Add home page
This commit is contained in:
parent
3bd6f0151b
commit
a9cea62d5b
3 changed files with 58 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 %>
|
||||
|
|
Loading…
Reference in a new issue