"""Project 113: public Bluesky posts (7 days) about bot/fake FOLLOWERS on the poster's own account. Read-only, public AppView search, 0.7 s between calls. Writes posts.json.""" import json from fetch_lib import search, posts, NOW, OLD Q = [ "bot followers", "followed by bots", "bots following me", "bot follows", "bots follow me", "fake followers", "spam followers", "spam follows", "follower count bots", "my followers are bots", "half my followers", "how many of my followers", "real followers", "remove followers", "remove bot followers", "soft block", "softblock", "softblocking", "block bots", "mass block", "follow bots", "new followers bots", "porn bots follow", "crypto bots follow", "follower purge", "lost followers", "follower audit", "check my followers", "bot list", "blocklist bots", "followers are fake", "inactive followers", "ghost followers", "who follows me", ] for q in Q: n = search(q) print(f"{n:4d} {q}") json.dump({"window": [OLD.isoformat(), NOW.isoformat()], "queries": Q, "posts": list(posts.values())}, open("posts.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1) print("unique posts in window:", len(posts))