tangled
alpha
login
or
join now
edavis.dev
/
bsky-tools
0
fork
atom
this repo has no description
0
fork
atom
overview
issues
pulls
pipelines
feat: drop popular feed
Eric Davis
1 year ago
c8eb11f6
cda83b95
-58
2 changed files
expand all
collapse all
unified
split
feed_manager.py
feeds
popular.py
-2
feed_manager.py
···
2
2
3
3
from feeds.battle import BattleFeed
4
4
from feeds.rapidfire import RapidFireFeed
5
5
-
from feeds.popular import PopularFeed
6
5
from feeds.homeruns import HomeRunsTeamFeed
7
6
from feeds.norazone_interesting import NoraZoneInteresting
8
7
from feeds.sevendirtywords import SevenDirtyWordsFeed
···
52
51
pass
53
52
54
53
feed_manager = FeedManager()
55
55
-
feed_manager.register(PopularFeed)
-56
feeds/popular.py
···
1
1
-
import logging
2
2
-
3
3
-
import apsw
4
4
-
import apsw.ext
5
5
-
6
6
-
from . import BaseFeed
7
7
-
8
8
-
class PopularFeed(BaseFeed):
9
9
-
FEED_URI = 'at://did:plc:4nsduwlpivpuur4mqkbfvm6a/app.bsky.feed.generator/popular'
10
10
-
11
11
-
def __init__(self):
12
12
-
# use the posts from the most-liked feed for this
13
13
-
self.db_cnx = apsw.Connection('db/mostliked.db')
14
14
-
self.db_cnx.pragma('foreign_keys', True)
15
15
-
self.db_cnx.pragma('journal_mode', 'WAL')
16
16
-
17
17
-
def process_commit(self, commit):
18
18
-
pass
19
19
-
20
20
-
def commit_changes(self):
21
21
-
pass
22
22
-
23
23
-
def generate_sql(self, limit, offset, langs):
24
24
-
bindings = []
25
25
-
sql = """
26
26
-
select posts.uri, create_ts, likes, lang, unixepoch('now') - create_ts as age_seconds,
27
27
-
exp( -1 * ( ( unixepoch('now') - create_ts ) / 1800.0 ) ) as decay,
28
28
-
likes * exp( -1 * ( ( unixepoch('now') - create_ts ) / 1800.0 ) ) as score
29
29
-
from posts
30
30
-
left join langs on posts.uri = langs.uri
31
31
-
where
32
32
-
"""
33
33
-
if not '*' in langs:
34
34
-
lang_values = list(langs.values())
35
35
-
bindings.extend(lang_values)
36
36
-
sql += " OR ".join(['lang = ?'] * len(lang_values))
37
37
-
else:
38
38
-
sql += " 1=1 "
39
39
-
sql += """
40
40
-
order by score desc
41
41
-
limit ? offset ?
42
42
-
"""
43
43
-
bindings.extend([limit, offset])
44
44
-
return sql, bindings
45
45
-
46
46
-
def serve_feed(self, limit, offset, langs):
47
47
-
sql, bindings = self.generate_sql(limit, offset, langs)
48
48
-
cur = self.db_cnx.execute(sql, bindings)
49
49
-
return [row[0] for row in cur]
50
50
-
51
51
-
def serve_feed_debug(self, limit, offset, langs):
52
52
-
sql, bindings = self.generate_sql(limit, offset, langs)
53
53
-
return apsw.ext.format_query_table(
54
54
-
self.db_cnx, sql, bindings,
55
55
-
string_sanitize=2, text_width=9999, use_unicode=True
56
56
-
)