this repo has no description
1import logging 2 3import apsw 4import apsw.ext 5 6from . import BaseFeed 7 8class MostLikedFeed(BaseFeed): 9 FEED_URI = 'at://did:plc:4nsduwlpivpuur4mqkbfvm6a/app.bsky.feed.generator/most-liked' 10 11 def __init__(self): 12 self.db_cnx = apsw.Connection('db/mostliked.db') 13 self.db_cnx.pragma('foreign_keys', True) 14 self.db_cnx.pragma('journal_mode', 'WAL') 15 16 def generate_sql(self, limit, offset, langs): 17 bindings = [] 18 sql = """ 19 select posts.uri, create_ts, create_ts - unixepoch('now', '-24 hours') as ttl, likes, lang 20 from posts 21 left join langs on posts.uri = langs.uri 22 where 23 """ 24 if not langs: 25 sql += " 1=1 " 26 else: 27 lang_values = list(langs.values()) 28 bindings.extend(lang_values) 29 sql += " OR ".join(['lang = ?'] * len(lang_values)) 30 sql += """ 31 order by likes desc, create_ts desc 32 limit ? offset ? 33 """ 34 bindings.extend([limit, offset]) 35 return sql, bindings 36 37 def serve_feed(self, limit, offset, langs): 38 sql, bindings = self.generate_sql(limit, offset, langs) 39 cur = self.db_cnx.execute(sql, bindings) 40 return [row[0] for row in cur] 41 42 def serve_feed_debug(self, limit, offset, langs): 43 sql, bindings = self.generate_sql(limit, offset, langs) 44 return apsw.ext.format_query_table( 45 self.db_cnx, sql, bindings, 46 string_sanitize=2, text_width=9999, use_unicode=True 47 )