pull/3/head
Omar Roth 2018-02-05 17:56:40 -06:00
rodzic 3bd6f0151b
commit a9cea62d5b
3 zmienionych plików z 58 dodań i 2 usunięć

Wyświetl plik

@ -183,4 +183,29 @@ def decrypt_signature(a)
a[0] = a[49 % a.size]
a[49] = c
return a.join("")
end
end
def rank_videos(db, n)
top = [] of {Float64, String}
db.query("SELECT id, wilson_score, published FROM videos WHERE views > 5000 ORDER BY published DESC LIMIT 10000") do |rs|
rs.each do
id = rs.read(String)
wilson_score = rs.read(Float64)
published = rs.read(Time)
# Exponential decay, older videos tend to rank lower
temperature = wilson_score * Math.exp(-0.02*((Time.now - published).hours))
top << {temperature, id}
end
end
top.sort!
# Make hottest come first
top.reverse!
top = top.map { |a, b| b }
# Return top
return top[1..n]
end

Wyświetl plik

@ -123,6 +123,21 @@ macro templated(filename)
end
get "/" do |env|
top = rank_videos(PG_DB, 120)
args = [] of String
1..(top.size - 1).times { |i| args << "($#{i + 1}), " }
args << "($#{top.size}) "
args = args.join("")
videos = [] of Video
PG_DB.query("SELECT * FROM videos d INNER JOIN (VALUES #{args}) v(id) USING (id)", top) do |rs|
rs.each do
video = rs.read(Video)
videos << video
end
end
templated "index"
end

Wyświetl plik

@ -1,3 +1,19 @@
<% content_for "header" do %>
<title>Invidious</title>
<% end %>
<% end %>
<% videos.each_slice(4) do |slice| %>
<div class="pure-g">
<% slice.each do |video| %>
<% player_response = JSON.parse(video.info["player_response"]) %>
<div class="pure-u-1 pure-u-md-1-4">
<div style="margin: 1em;">
<a style="width:100%;" class="link" href="/watch?v=<%= video.id %>">
<img style="width:100%" src="<%= player_response["videoDetails"]["thumbnail"]["thumbnails"][0]["url"] %>"/>
<%= video.title %>
</a>
</div>
</div>
<% end %>
</div>
<% end %>