this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add feed for quotes of a nora.zone post

+69
+2
feed_manager.py
··· 4 4 from feeds.rapidfire import RapidFireFeed 5 5 from feeds.popular import PopularFeed 6 6 from feeds.homeruns import HomeRunsTeamFeed 7 + from feeds.norazone_interesting import NoraZoneInteresting 7 8 8 9 class FeedManager: 9 10 def __init__(self): ··· 44 45 feed_manager.register(RapidFireFeed) 45 46 feed_manager.register(PopularFeed) 46 47 feed_manager.register(HomeRunsTeamFeed) 48 + feed_manager.register(NoraZoneInteresting)
+67
feeds/norazone_interesting.py
··· 1 + import logging 2 + 3 + import apsw 4 + import apsw.ext 5 + 6 + from . import BaseFeed 7 + 8 + # https://bsky.app/profile/nora.zone/post/3kv35hqi4a22b 9 + TARGET_QUOTE_URI = 'at://did:plc:4qqizocrnriintskkh6trnzv/app.bsky.feed.post/3kv35hqi4a22b' 10 + 11 + class NoraZoneInteresting(BaseFeed): 12 + FEED_URI = 'at://did:plc:4nsduwlpivpuur4mqkbfvm6a/app.bsky.feed.generator/nz-interesting' 13 + 14 + def __init__(self): 15 + self.db_cnx = apsw.Connection('db/nz-interesting.db') 16 + self.db_cnx.pragma('journal_mode', 'WAL') 17 + self.db_cnx.pragma('wal_autocheckpoint', '0') 18 + 19 + with self.db_cnx: 20 + self.db_cnx.execute(""" 21 + create table if not exists posts (uri text, create_ts timestamp); 22 + create index if not exists create_ts_idx on posts(create_ts); 23 + """) 24 + 25 + self.logger = logging.getLogger('feeds.nz_interesting') 26 + 27 + def process_commit(self, commit): 28 + if commit['opType'] != 'c': 29 + return 30 + 31 + if commit['collection'] != 'app.bsky.feed.post': 32 + return 33 + 34 + record = commit.get('record') 35 + if record is None: 36 + return 37 + 38 + embed = record.get('embed') 39 + if embed is None: 40 + return 41 + 42 + inner_record = embed.get('record') 43 + if inner_record is None: 44 + return 45 + 46 + if inner_record.get('uri') == TARGET_QUOTE_URI: 47 + self.logger.debug('found quote post of target, adding to feed') 48 + uri = 'at://{repo}/app.bsky.feed.post/{rkey}'.format( 49 + repo = commit['did'], 50 + rkey = commit['rkey'] 51 + ) 52 + ts = self.safe_timestamp(record.get('createdAt')).timestamp() 53 + self.db_cnx.execute( 54 + 'insert into posts (uri, create_ts) values (:uri, :ts)', 55 + dict(uri=uri, ts=ts) 56 + ) 57 + 58 + def commit_changes(self): 59 + self.logger.debug('committing changes') 60 + self.wal_checkpoint(self.db_cnx, 'RESTART') 61 + 62 + def serve_feed(self, limit, offset, langs): 63 + cur = self.db_cnx.execute( 64 + 'select uri from posts order by create_ts desc limit :limit offset :offset', 65 + dict(limit=limit, offset=offset) 66 + ) 67 + return [uri for (uri,) in cur]