forked from midou/invidious
Add home page
This commit is contained in:
parent
3bd6f0151b
commit
a9cea62d5b
@ -184,3 +184,28 @@ def decrypt_signature(a)
|
|||||||
a[49] = c
|
a[49] = c
|
||||||
return a.join("")
|
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
|
end
|
||||||
|
|
||||||
get "/" do |env|
|
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"
|
templated "index"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
<% content_for "header" do %>
|
<% content_for "header" do %>
|
||||||
<title>Invidious</title>
|
<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 New Issue
Block a user