Skip to content

Commit

Permalink
Add get_bsky_post_by_url example (#424)
Browse files Browse the repository at this point in the history
Co-authored-by: Ilya (Marshal) <[email protected]>
  • Loading branch information
DGaffney and MarshalX authored Nov 14, 2024
1 parent 91e0335 commit ab74814
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions examples/advanced_usage/get_bsky_post_by_url.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from typing import Optional

from atproto import Client, IdResolver, models


def fetch_posts(client: Client, resolver: IdResolver, url: str) -> Optional[models.AppBskyFeedPost.Record]:
"""Fetch a post using its Bluesky URL.
Args:
client (Client): Authenticated Atproto client.
resolver (IdResolver): Resolver instance for DID lookup.
url (str): URL of the Bluesky post.
Returns:
:obj:`models.AppBskyFeedPost.Record`: Post if found, otherwise None.
"""
try:
# Extract the handle and post rkey from the URL
url_parts = url.split('/')
handle = url_parts[4] # Username in the URL
post_rkey = url_parts[6] # Post Record Key in the URL

# Resolve the DID for the username
did = resolver.handle.resolve(handle)
if not did:
print(f'Could not resolve DID for handle "{handle}".')
return None

# Fetch the post record
return client.get_post(post_rkey, did).value
except (ValueError, KeyError) as e:
print(f'Error fetching post for URL {url}: {e}')
return None


def main() -> None:
# Initialize a client and authenticate
client = Client()
client.login('my-handle', 'my-password')

# Initialize IdResolver for DID resolution
resolver = IdResolver()

# Define the URL of the post to fetch
bsky_post_url = 'https://bsky.app/profile/test.marshal.dev/post/3laqsdrwwgc24'

# Fetch the post
post_record = fetch_posts(client, resolver, bsky_post_url)

# Display the post details
if post_record:
print(f'Post content: {post_record.text}')
else:
print('Post could not be fetched.')


if __name__ == '__main__':
main()

0 comments on commit ab74814

Please sign in to comment.