summaryrefslogtreecommitdiffstats
path: root/src/helpers.cr
diff options
context:
space:
mode:
Diffstat (limited to 'src/helpers.cr')
-rw-r--r--src/helpers.cr27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/helpers.cr b/src/helpers.cr
index a5148bdf..8106cb4f 100644
--- a/src/helpers.cr
+++ b/src/helpers.cr
@@ -183,4 +183,29 @@ def decrypt_signature(a)
a[0] = a[49 % a.size]
a[49] = c
return a.join("")
-end \ No newline at end of file
+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