diff options
Diffstat (limited to 'src/helpers.cr')
| -rw-r--r-- | src/helpers.cr | 27 |
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 |
