diff --git a/scripts/resolve_feed.py b/scripts/resolve_feed.py index 2a89e69..52fe4e4 100644 --- a/scripts/resolve_feed.py +++ b/scripts/resolve_feed.py @@ -2,29 +2,56 @@ import os from atproto import AtUri, Client -# The hostname of the server where feed server will be hosted -# Ex: feed.bsky.dev -HOSTNAME: str = os.environ["ARTSCROLLING_HOSTNAME"] +# YOUR bluesky handle +# Ex: user.bsky.social +HANDLE: str = os.environ["HANDLE"] + +# YOUR bluesky password, or preferably an App Password (found in your client settings) +# Ex: abcd-1234-efgh-5678 +PASSWORD: str = os.environ["PASSWORD"] + +SERVICE_PDS: str | None = os.environ.get("SERVICE_PDS") FEED_URI: str = os.environ["FEED_URI"] def main(): - client = Client(base_url=f"https://{HOSTNAME}") + client = Client(base_url=SERVICE_PDS) + client.login(HANDLE, PASSWORD) + + if not client.me: + raise RuntimeError uri = AtUri.from_str(FEED_URI) if uri.collection != "app.bsky.feed.generator": raise ValueError("URI not corresponding to a feed generator") - result = client.app.bsky.feed.describe_feed_generator() + result = client.com.atproto.repo.get_record( + { + "repo": uri.hostname, + "collection": "app.bsky.feed.generator", + "rkey": uri.rkey, + } + ) print(result) - skeleton = client.app.bsky.feed.get_feed_skeleton({"feed": FEED_URI, "limit": 30}) - print("✓ Feed skeleton response is VALID according to atproto models!") + result = client.app.bsky.feed.get_feed_generator({"feed": FEED_URI}) + print(result) - # Show first few posts - for idx, item in enumerate(skeleton.feed[:3]): - print(f" Post {idx + 1}: {item.post}") + feed_result = client.app.bsky.feed.get_feed({"feed": FEED_URI, "limit": 30}) + print("✓ getFeed succeeded!") + print(f"\nRetrieved {len(feed_result.feed)} posts") + if feed_result.cursor: + print(f"Cursor: {feed_result.cursor}") + + # Show first few posts with details + for idx, item in enumerate(feed_result.feed[:3]): + print(f"\n Post {idx + 1}:") + print(f" URI: {item.post.uri}") + print(f" Author: {item.post.author.handle}") + if item.post.record.text: + text = item.post.record.text[:100] + print(f" Text: '{text}...'") if __name__ == "__main__":