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 )