#!/usr/bin/env python3 import json import argparse import html def extract_post(post): """Extract only the desired fields and return HTML string.""" record = post.get("record", {}) author = post.get("author", {}) text = html.escape(str(record.get("text") or "")) date = record.get("created_at") or post.get("created_at") or "" name = html.escape(str(author.get("display_name") or author.get("handle") or "")) avatar = author.get("avatar") or "" likes = post.get("like_count") or 0 shares = post.get("repost_count") or 0 html_parts = ['
'] if avatar: html_parts.append(f' ') html_parts.append(f' {name}') html_parts.append(f' {date}') html_parts.append(f'

{text}

') html_parts.append(f' Likes: {likes}') html_parts.append(f' Shares: {shares}') html_parts.append('
\n') return "\n".join(html_parts) def main(): parser = argparse.ArgumentParser(description="Convert Bluesky JSON posts to minimal HTML") parser.add_argument("file", help="JSON input file") args = parser.parse_args() with open(args.file) as f: data = json.load(f) thread = data.get("thread", []) for item in thread: post = item.get("thread", {}).get("post", {}) if post: print(extract_post(post)) if __name__ == "__main__": main()