#!/usr/bin/env python """ Saves a toot to reference as a shortcode in a post. """ from http.client import HTTPResponse from urllib.parse import urlparse from urllib import request from typing import Optional import argparse import json import sys SAVE_DIR = "static/data/toots" # Grab arguments parser = argparse.ArgumentParser(description="Save a toot") parser.add_argument("toot_url", type=str, help="URL to specific toot") args = vars(parser.parse_args()) parsed_url = urlparse(args['toot_url']) # Parse Arguments SERVER = f"{parsed_url.scheme}://{parsed_url.netloc}" TOOT_ID = parsed_url.path.split("/")[-1] # Query server url = SERVER + "/api/v1/statuses/" + TOOT_ID response: Optional[HTTPResponse] = None try: response = request.urlopen(url) except Exception: print("Unable to grab toots from Mastodon.") if response is None: sys.exit(-1) # Parse server response server_data: Optional[dict] = None try: server_data = json.loads(response.read()) except Exception: print("Malformed JSON response from server.") if server_data is None: sys.exit(-1) if not isinstance(server_data, dict): print("Unexpected JSON response, should be of form dict.") sys.exit(-1) # Save toot TOOT_REFERENCE = f"{parsed_url.netloc.replace('.', '-')}-{TOOT_ID}" TOOT_SAVE_FILE = f"{SAVE_DIR}/{TOOT_REFERENCE}.json" try: with open(TOOT_SAVE_FILE, "w", encoding="UTF-8") as f: json.dump(server_data, f) except: print("Unable to write to save location.") sys.exit(-1) print("Saved Toot Reference", TOOT_REFERENCE)