import json import requests from mastodon import Mastodon import config def get_images(album_api): return requests.get(album_api).json()['result']['images'] def get_next_image(images, previous_id): tail = [image for image in images if image['id']>previous_id] return tail and sorted(tail, key=lambda image: image['id'])[0] or None def get_previous_id(): try: return int(json.load(open("previous_id.txt"))) except Exception: return 0 def set_previous_id(previous_id): json.dump(previous_id, open("previous_id.txt", "w")) def toot_next_image(): mastodon = Mastodon(access_token="secrets.txt") image = get_next_image(get_images(config.ALBUM_API), get_previous_id()) if image: if image['comment'] is None: image['comment'] = "" # Better not mess up templates when no comment. media = mastodon.media_post( requests.get( image["derivatives"][config.MEDIA_SIZE]["url"]).content, mime_type="image/jpeg", description = config.ALT_TEXT_TEMPLATE.format(**image)) mastodon.status_post( config.TOOT_TEMPLATE.format(**image), media_ids=[media], visibility=config.TOOT_VISIBILITY, language=config.TOOT_LANGUAGE) set_previous_id(image['id']) if __name__=='__main__': toot_next_image()