Skip to content
Snippets Groups Projects
Commit d79795de authored by Jan Eggers's avatar Jan Eggers
Browse files

akt

parent d29b9d08
No related branches found
No related tags found
No related merge requests found
# aichecker # aichecker
Checks Bluesky accounts (and, later, similar media) for AI suspicion. Checks Bluesky accounts (and, later, similar media) for AI suspicion.
## Wozu es gut ist
Das Fernziel ist eine Recherche zu KI-Inhalten im Wahlkampf mit zwei Stoßrichtungen:
- Verdachtsfälle besonders krasser Fälschungen finden
- Gesamt-KI-Anteil nach Partei/Person
## Der Plan ## Der Plan
### Phase 1: Bluesky ### Phase 1: Bluesky
......
...@@ -4,11 +4,11 @@ from atproto import Client, models ...@@ -4,11 +4,11 @@ from atproto import Client, models
def fetch_user_posts(handle: str, limit: int = 100) -> list: def fetch_user_posts(handle: str, limit: int = 100) -> list:
# Initialize the Bluesky client (unauthenticated) # Initialize the Bluesky client (unauthenticated)
client = Client() client = Client(base_url="https://api.bsky.app")
try: try:
# Fetch the user ID from the handle # Fetch the user ID from the handle
profile = client.get_profile(handle) profile = client.app.bsky.actor.get_profile({'actor': handle})
user_id = profile.did user_id = profile.did
# Initialize an empty list to store posts # Initialize an empty list to store posts
...@@ -17,11 +17,31 @@ def fetch_user_posts(handle: str, limit: int = 100) -> list: ...@@ -17,11 +17,31 @@ def fetch_user_posts(handle: str, limit: int = 100) -> list:
# Fetch timeline for the user (latest posts first) # Fetch timeline for the user (latest posts first)
cursor = None cursor = None
while len(posts) < limit: while len(posts) < limit:
feed = client.app.bsky.feed.get_author_feed(actor=user_id, limit=min(limit - len(posts), 50), cursor=cursor) feed = client.app.bsky.feed.get_author_feed({'actor':user_id,
if not feed.posts: 'limit':min(limit - len(posts), 50),
'cursor':cursor,
})
if not feed['feed']:
break break
posts.extend(feed.posts) for item in feed['feed']:
cursor = feed.cursor # Extract basic post information
post_data = {
'author_handle': getattr(item[0][1], 'handle', ''),
'author_display_name': getattr(item[0][1], 'display_name', ''),
'author_did': getattr(item[0][1], 'did', ''),
'created_at': getattr(item[3], 'created_at', ''),
'indexed_at': item[2],
'text': getattr(item[3], 'text', ''),
'uri': item[4],
'cid': item[1],
'like_count': item[8],
'reply_count': item[10],
'repost_count': item[11],
'quote_count': item[9],
'language': getattr(item[3], 'langs', [''])[0] if hasattr(item[3], 'langs') else ''
}
posts.append(post_data)
cursor = len(feed['feed'])
return posts[:limit] return posts[:limit]
...@@ -31,7 +51,8 @@ def fetch_user_posts(handle: str, limit: int = 100) -> list: ...@@ -31,7 +51,8 @@ def fetch_user_posts(handle: str, limit: int = 100) -> list:
def main(): def main():
# Define the Bluesky handle and number of posts to fetch # Define the Bluesky handle and number of posts to fetch
handle = '@lion-c.bsky.social' # Replace with the desired handle # Remove the @ before handle strings
handle = 'lion-c.bsky.social' # Replace with the desired handle
limit = 100 limit = 100
# Fetch the last 100 posts from the specified user # Fetch the last 100 posts from the specified user
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment