{ "info": { "author": "Alex Schroeder", "author_email": "alex@gnu.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Programming Language :: Python :: 3 :: Only", "Topic :: Communications" ], "description": "# Mastodon Archive\n\nThis tool allows you to make an archive of your statuses, your\nfavourites and the media in both your statuses and your favourites.\nFrom this archive, you can generate a simple text file, or a HTML file\nwith or without media. Take a look at an\n[example](https://alexschroeder.ch/mastodon.weaponvsac.space.user.kensanata.html)\nif you're curious.\n\nNote that Mastodon\n[v2.3.0](https://github.com/tootsuite/mastodon/releases/tag/v2.3.0)\nadded an account archive download feature: \"Every 7 days you are able\nto request a full archive of your toots. The toots are exported in\nActivityPub JSON format alongside the media files attached to them,\nyour avatar and header images as well as the private key of your\naccount used for signing content.\" If all you want to do is have a\nbackup of your data, perhaps that is enough and you don't need this\ntool.\n\nPlease report issues on the\n[Software Wiki](https://alexschroeder.ch/software/Mastodon_Archive).\nYou can get the latest sources\n[from the author\u2019s site](https://alexschroeder.ch/cgit/mastodon-archive/about/).\n\n\n**Table of Contents**\n\n- [Installation](#installation)\n- [Making an archive](#making-an-archive)\n- [Downloading media files](#downloading-media-files)\n- [Generating a text file](#generating-a-text-file)\n- [Searching your archive](#searching-your-archive)\n- [Show context for a toot](#show-context-for-a-toot)\n- [Generating a HTML file](#generating-a-html-file)\n- [Reporting](#reporting)\n- [Expiring your toots and favourites](#expiring-your-toots-and-favourites)\n- [Troubleshooting](#troubleshooting)\n- [Followers](#followers)\n- [Following](#following)\n- [Whitelist](#whitelist)\n- [Mutuals](#mutuals)\n- [Example Setup](#example-setup)\n- [Documentation](#documentation)\n- [Development](#development)\n- [Processing using jq](#processing-using-jq)\n- [Exploring the API](#exploring-the-api)\n- [Alternatives](#alternatives)\n\n\n\n# Installation\n\nThe following command will install `mastodon-archive` and all its\ndependencies:\n\n```bash\n# Python 3\npip3 install mastodon-archive\n```\n\nIf this is the first tool you installed using `pip` then perhaps it\ninstalled `mastodon-archive` in a directory that's not on your `PATH`.\nI had to add the following to my `~/.bashrc` file:\n\n```bash\nexport PATH=$PATH:$HOME/.local/bin\n```\n\n\ud83d\udd25 If you're getting an error that ends with `Command \"python setup.py\negg_info\" failed with error code 1 ...` you might have to install the\nsetup tools. Try the following:\n\n```bash\npip3 install --user setuptools\npip3 install mastodon-archive\n```\n\n# Making an archive\n\nWhen using the app for the first time, you will have to authorize it:\n\n```text\n$ mastodon-archive archive kensanata@dice.camp\nRegistering app\nLog in\nVisit the following URL and authorize the app:\n[the app gives you a huge URL which you need to visit using a browser]\nThen paste the access token here:\n[this is where you paste the authorization code]\nGet user info\nGet statuses (this may take a while)\nSave 41 statuses\n```\n\nNote that the library we are using says: \"Mastodons API rate limits\nper IP. By default, the limit is 300 requests per 5 minute time slot.\nThis can differ from instance to instance and is subject to change.\"\nThus, if every request gets 20 toots, then we can get at most 6000\ntoots per five minutes.\n\nIf this is taking too long, consider skipping your favourites:\n\n```text\n$ mastodon-archive archive --no-favourites kensanata@dice.camp\n```\n\nIf you want a better picture of conversations, you can also include\nmentions. Mentions are notifications of statuses in which you were\nmentioned as opposed to statuses of yours that were favoured or\nboosted by others. Note that if you used to *dismiss* notifications\nusing the \"Clear notifications\" menu, then no mentions will be found\nas mentions are simply a particular kind of notification.\n\n```text\n$ mastodon-archive archive --with-mentions kensanata@dice.camp\n```\n\nNo matter what you did, You will end up with three new files:\n\n`dice.camp.client.secret` is where the client secret for this instance\nis stored. `dice.camp.user.kensanata.secret` is where the\nauthorisation token for this user and instance is stored. If these two\nfiles exist, you don't have to log in the next time you run the app.\nIf your login expired, you need to remove the file containing the\nauthorisation token and you will be asked to authorize the app again.\n\n`dice.camp.user.kensanata.json` is the JSON file with your data (but\nwithout your media attachments). If this file exists, only the missing\ntoots will be downloaded the next time you run the app. If you suspect\na problem and want to make sure that everything is downloaded again,\nyou need to remove this file.\n\n# Downloading media files\n\nBy default, media you uploaded and media of statuses you added your\nfavourites are not part of your archive. You can download it using a\nseparate command, however.\n\nAssuming you already made an archive of your toots:\n\n```text\n$ mastodon-archive media kensanata@dice.camp\n44 urls in your archive (half of them are previews)\n34 files already exist\nDownloading |################################| 10/10\n```\n\nYou will end up with a new directory, `dice.camp.user.kensanata`. It\ncontains all the media you uploaded, and their corresponding previews.\n\nIf you rerun it, it will simply try to get the remaining files. Note,\nhowever, that instance administrators can *delete* media files. Thus,\nyou might be forever missing some files\u2014particularly the ones from\n*remote* instances, if you added any to your favourites.\n\nThere's one thing you need to remember, though: the media directory\ncontains all the media from your statuses, and all the media from your\nfavourites. There is no particular reason why the media files from\nboth sources need to be in the same directory, see\n[issue #11](https://github.com/kensanata/mastodon-backup/issues/11).\n\n# Generating a text file\n\nAssuming you already made an archive of your toots:\n\n```text\n$ mastodon-archive text kensanata@dice.camp\n[lots of other toots]\nAlex Schroeder \ud83d\udc09 @kensanata 2017-11-14T22:21:50.599000+00:00\nhttps://dice.camp/@kensanata/99005111284322450\n[#introduction](https://dice.camp/tags/introduction) I run\n[#osr](https://dice.camp/tags/osr) games using my own hose rule document but\nit all started with Labyrinth Lord which I knew long before I knew B/X. Sadly,\nmy Indie Game Night is no longer a thing but I still love Lady Blackbird, all\nthe [#pbta](https://dice.camp/tags/pbta) hacks on my drive, and so much more.\nBut in the three campaigns I run, it\u2019s all OSR right now.\n```\n\nGenerating a text file just means redirection the output to a text\nfile:\n\n```text\n$ mastodon-archive text kensanata@dice.camp > statuses.txt\n```\n\nIf you're working with text, you might expect the first toot to be at\nthe top and the last toot to be at the bottom. In this case, you need\nto reverse the list:\n\n```text\n$ mastodon-archive text --reverse kensanata@dice.camp | head\n```\n\n# Searching your archive\n\nYou can also filter using regular expressions. These will be checked\nagainst the status *content* (obviously), *display name* and\n*username* (both are important for boosted toots), and the *created\nat* date. Also note that the regular expression will be applied to the\nraw status content. In other words, the status contains all the HTML\nand problably starts with a `
`, which is then removed in the\noutput.\n\n```text\n$ mastodon-archive text kensanata@dice.camp house\n```\n\nYou can provide multiple regular expressions and they will all be\nchecked:\n\n```text\n$ mastodon-archive text kensanata@dice.camp house rule\n```\n\nRemember basic\n[regular expression syntax](https://docs.python.org/3/library/re.html#regular-expression-syntax):\n`\\b` is a word boundary, `(?i)` ignores case, `(a|b)` is for\nalternatives, just to pick some useful ones. Use single quotes to\nprotect your backslashes and questionmarks.\n\n```text\n$ mastodon-archive text kensanata@dice.camp house 'rule\\b'\n```\n\nYou can also search your favourites or your mentions:\n\n```text\n$ mastodon-archive text --collection favourites kensanata@dice.camp '(?i)blackbird'\n```\n\nDates are in ISO format (e.g. `2017-11-19T14:00`). I usually only care\nabout year and month, though:\n\n```text\n$ mastodon-archive text --collection favourites kensanata@dice.camp bird '2017-(07|08|09|10|11)'\n```\n\n\n# Show context for a toot\n\nSometimes you only remember something about a *thread*. Let's say you\nasked a question a while back but now you can't remember the answer\nyou got back then. First, find the question:\n\n```text\n$ mastodon-archive text kensanata@dice.camp rules\nAlex Schroeder \ud83d\udc09 @kensanata 2018-05-28T21:19:27.483000+00:00\nhttps://dice.camp/@kensanata/100109016572069901\n...\n```\n\nUsing the URL, you can now search the archive for some context:\n\n```text\n$ mastodon-archive context kensanata@dice.camp https://dice.camp/@kensanata/100109016572069901\n```\n\nThis shows the same information clicking on the toot shows you in the\nweb client: all its ancestors and all its descendants. Obviously, if\nthese toots are not in your archive, we can't find them. You'll have\nto click on the links and hope they're still around.\n\n\n# Generating a HTML file\n\nAssuming you already made an archive of your toots:\n\n```text\n$ mastodon-archive html kensanata@dice.camp\n```\n\nThis will create numbered HTML files starting with\n`dice.camp.user.kensanata.statuses.0.html`, each page with 2000 toots.\n\nYou can change the number of toots per page using an option:\n\n```text\n$ mastodon-archive html --toots-per-page 100 kensanata@dice.camp\n```\n\nIf you have downloaded your media attachments, these will be used in\nthe HTML files. Thus, if you want to upload the HTML files, you now\nneed to upload the media directory as well or all the media links will\nbe broken.\n\nYou can also generate a file for your favourites:\n\n```text\n$ mastodon-archive html --collection favourites kensanata@dice.camp\n```\n\nThis will create numbered HTML files starting with\n`dice.camp.user.kensanata.favourites.0.html`, each page with 2000\ntoots.\n\nNote that both the HTML file with your statuses and the HTML file with\nyour favourites will refer to the media files in your media directory.\n\n# Reporting\n\nSome numbers, including your ten most used hashtags:\n\n```text\n$ mastodon-archive report kensanata@dice.camp\nConsidering the last 12 weeks\nStatuses: 296\nBoosts: 17\nMedia: 9\n\nTop 10 hashtags:\n#caster(8) #20questions(5) #osr(3) #dungeonslayers(2) #introduction(2)\n#currentprojects(2) #diaspora(1) #gygax(1) #yoonsuin(1) #casters(1)\n\nFavourites: 248\nBoosts: 0\nMedia: 20\n\nTop 10 hashtags:\n#1strpg(9) #rpg(5) #myfirstcharacter(5) #introduction(5) #osr(4)\n#1strpgs(4) #dnd(3) #gamesnacks(1) #vancian(1) #mastoart(1)\n```\n\nYou can specify a different time number of weeks to consider using\n`--newer-than N` or use `--all` to consider all your statuses and\nfavourites.\n\nYou can list a different number of hashtags using `--top N` and you\ncan list all of them by using `--top -1`. This might result in a very\nlong list.\n\nBy default only your toots are considered for the hashtags. Use `--include-boosts` to also include toot you have boosted.\n\n# Expiring your toots and favourites\n\n**Warning**: This is a destructive operation. You will delete your\ntoots on your instance, or unfavour your favourites, or dismiss your\nnotifications on your instance. Where as it might be possible to\nfavour all your favourites again, there is no way to repost all those\ntoots. You will have a copy in your archive, but there is no way to\nrestore these to your instance.\n\n**But why?** I might want to keep a copy of my toots, but I don't\nthink they have much value going back months and years. I never read\nthrough years of tweeting history! This only benefits your enemies,\nnever your friends. So I want to expire my toots. We can always write\na blog post about the good stuff. You can read more about this [on my\nblog](https://alexschroeder.ch/wiki/2017-04-27_Record_Keeping).\n\n**Alternatives**: Check out [forget](https://forget.codl.fr/about/)\nwhich is a web app that only expires your toots without archiving\ntheme.\n[MastoPurgee](https://github.com/ThomasLeister/mastopurge/blob/master/README.md)\ndoes the same thing but it's a stand-alone binary. Depending on your\nneeds, these might be good enough.\n\nAnyway, back to *Mastodon Archive*. \ud83d\ude42\n\nYou can expire your toots using the `expire` command and providing the\n`--older-than` option. This option specifies the number of weeks to\nkeep on the server. Anything older than that is deleted or unfavoured.\nIf you use `--older-than 0`, then *all* your toots will be deleted, or\n*all* your favourites will be unfavoured, or *all* your notifications\nwill be dismissed.\n\n```text\n~/src/mastodon-backup $ mastodon-archive expire --older-than 0 kensanata@social.nasqueron.org\nThis is a dry run and nothing will be expired.\nInstead, we'll just list what would have happened.\nUse --confirmed to actually do it.\nDelete: 2017-11-26 \"
Testing \u00e4\u00f6\u00fc
\"\n```\n\nActually, the default operation just does a dry run. You need to use\nthe `--confirmed` option to proceed.\n\nAnd one more thing: since this requires the permission to *write* to\nyour account, you will have to reauthorize the app.\n\n```text\n$ mastodon-archive expire --collection favourites --older-than 0 \\\n --confirmed kensanata@social.nasqueron.org\nLog in\nVisit the following URL and authorize the app:\n[long URL shown here]\nThen paste the access token here:\n[long token pasted here]\nExpiring |################################| 1/1\n```\n\nAfter a while you'll notice that archiving mentions takes more and\nmore time. The reason is when expiring mentions, the tool goes through\nall your notifications and looks at those of the type \"mention\" and\nexpires them if they are old enough. There are other types of\nnotifications, however: \"follow\", \"favourite\", and \"reblog\" (at the\ntime of this writing). As these are not archived, we also don't expire\nthem. Thus, the list of notifications to look through when archiving\nkeeps growing unless you use the \"Clear notifications\" menu in the\nMastodon web client. Alternatively, you can use the\n`--delete-other-notifications` option together with `--collection\nmentions` and then the tool will dismiss all the older other\nnotifications for you.\n\n# Troubleshooting\n\n\ud83d\udd25 If you are archiving a ton of toots and you run into a General API\nproblem, use the `--pace` option. This is what the problem looks like:\n\n```text\n$ mastodon-archive archive kensanata@dice.camp\n...\nGet statuses (this may take a while)\nTraceback (most recent call last):\n...\nmastodon.Mastodon.MastodonAPIError: General API problem.\n```\n\nSolution:\n\n```text\n$ mastodon-archive archive --pace kensanata@dice.camp\n```\n\nThe problem seems to be related to how Mastodon [rate\nlimits](https://mastodonpy.readthedocs.io/en/latest/#a-note-about-rate-limits)\nrequests.\n\n\ud83d\udd25 If you are expiring many toots, same thing. The default rate limit\nis 300 requests per five minutes, so when more than 300 toots are to\nbe deleted, the app simply has to wait for five minutes before\ncontinuing. It takes time.\n\n```text\n$ mastodon-archive expire --confirm kensanata@octodon.social\nLoading existing archive\nExpiring | | 1/1236\nWe need to authorize the app to make changes to your account.\nLog in\nVisit the following URL and authorize the app:\n[long URL here]\nThen paste the access token here:\n[access token here]\nConsidering the default rate limit of 300 requests per five minutes and having 1236 statuses,\nthis will take at least 20 minutes to complete.\nExpiring |####### | 301/1236\n```\n\n\ud83d\udd25 If you are experimenting with expiry, you'll need to give the app\nwrite permissions. If you then delete the user secret file, hoping to\nstart with a clean slate when archiving, you'll be asked to authorize\nthe app again, but somehow Mastodon remembers that you have already\ngranted the app read and write permissions, and you will get this\nerror:\n\n`mastodon.Mastodon.MastodonAPIError: Granted scopes \"read write\" differ from requested scopes \"read\".`\n\nIn order to get rid of this, you need to visit the website, got to\nSettings \u2192 Authorized apps and revoke your authorization for\nmastodon-archive. Now you can try the authorization URL again and you\nwill only get read permissions instead of both read and write\npermissions.\n\n# Followers\n\nThis is work in progress. I'm actually not sure where I want to go\nwith this. Right now it lists all your followers that haven't\ninteracted with you. If a toot of theirs mentions you, then that\ncounts as an interaction. Favouring and boosting does not count. By\ndefault, this looks at the last twelve weeks. In order for this to\nwork, you need an archive containing both mentions and followers.\n\n```text\n$ mastodon-archive archive --with-mentions --with-followers kensanata@dice.camp\nLoading existing archive\nGet user info\nGet new statuses\nFetched a total of 0 new toots\nGet new favourites\nFetched a total of 0 new toots\nGet new notifications\nFetched a total of 2 new toots\nGet followers (this may take a while)\nSaving 659 statuses, 376 favourites, 478 mentions, and 107 followers\n```\n\nNow you're ready to determine the list of lurkers:\n\n```text\n$ mastodon-archive followers kensanata@dice.camp\nConsidering the last 12 weeks\nThere is no whitelist\n...\n```\n\nAs I said, this is work in progress and I don't really know where I'm\ngoing with this. More\n[on my blog](https://alexschroeder.ch/wiki/2018-04-13_Social_Media_Goals).\n\nThis command supports the [whitelist](#whitelist).\n\n# Following\n\nAssume you're on the fediverse just for the conversation. You're not\nactually interested in following anybody who never talks to you: no\njournalists, no famous people, no pundits. You just want to follow\nregular people who interact with you. You can list the people you're\nfollowing who never mentioned you, and you can unfollow them all!\n\nThere are two prerequisites, however:\n\n1. you need to add the people you're following to the archive\n2. you need to add the mentions to the archive (this can take a long time)\n\n```text\n$ mastodon-archive archive --with-following --with-mentions kensanata@dice.camp\nLoading existing archive\nGet user info\nGet new statuses\nX\nAdded a total of 11 new items\nGet new favourites\nX\nAdded a total of 7 new items\nGet new notifications and look for mentions\n.....\nAdded a total of 7 new items\nSkipping followers\nGet following (this may take a while)\nSaving 932 statuses, 527 favourites, 657 mentions, 107 followers, and 192 following\n```\n\nGiven this data, you can now list the people we're interested in:\n\n```text\n$ mastodon-archive following kensanata@dice.camp\nConsidering the last 12 weeks\n...\n```\n\nAll these people that never mentioned you: do you really want to\nfollow them all? If you don't, here's how to unfollow them:\n\n```text\n$ mastodon-archive following --unfollow kensanata@dice.camp\nConsidering the last 12 weeks\nUnfollowing |################################| 1/125\nWe need to authorize the app to make changes to your account.\nRegistering app\nThis app needs access to your Mastodon account.\nVisit the following URL and authorize the app:\n[long URL here]\nThen paste the access token here:\n[access token here]\n```\n\nNote that the application needs the permission to unfollow people in\nyour name, which is why you need to authorize it again.\n\nThis command supports the [whitelist](#whitelist).\n\n# Whitelist\n\nYou can have a whitelist of people you want to be exempt from some\ncommands. Create a text file with a name like the following:\n`dice.camp.user.kensanata.whitelist.txt`.\n\nThat is: `It\u2019s nice to reinvent yourself every so often, don\u2019t you think?
\"\n }\n]\n```\n\n# Exploring the API\n\nNow that you have token files, you can explore the Mastodon API using\n`curl`. Your *access token* is the long string in the file\n`*.user.*.secret`. Here is how to use it.\n\nGet a single status:\n\n```sh\ncurl --silent --show-error \\\n --header \"Authorization: Bearer \"$(cat dice.camp.user.kensanata.secret) \\\n https://dice.camp/api/v1/statuses/99005111284322450\n```\n\nExtract the account id from your archive using `jq` and use `echo` to\n[strip the surrounding double quotes](https://stackoverflow.com/a/24358387/534893).\nThen use the id to get some statuses from the account and use `jq` to\nprint the status ids:\n\n```sh\nID=$(eval echo $(jq .account.id < dice.camp.user.kensanata.json))\ncurl --silent --show-error \\\n --header \"Authorization: Bearer \"$(cat dice.camp.user.kensanata.secret) \\\n \"https://dice.camp/api/v1/accounts/$ID/statuses?limit=3\" \\\n | jq '.[]|.id'\n```\n\n# Alternatives\n\nThere are two kinds of alternatives:\n\n1. Solutions that extract your public toots from your profile, e.g.\n [https://octodon.social/@kensanata](https://octodon.social/@kensanata).\n The problem there is that you'll only get \"top level\" toots and\n boosts but *no replies*.\n \n * [Mastotool](https://mdhughes.tech/mastotool/) includes media\n download!\n * [MastoUserScrape.py](https://gist.github.com/FlyMyPG/2e9d4532453182ada0da78e74980193b)\n \n2. Solutions that extract your public toots from your Atom feed, e.g.\n [https://octodon.social/users/kensanata.atom](https://octodon.social/users/kensanata.atom).\n The problem there is that you'll only get a few pages worth of\n toots, not *all* of them.\n\n * [Mastotool \"Atom\"](https://github.com/kensanata/mastotool)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kensanata/mastodon-backup#mastodon-archive", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "mastodon-archive", "package_url": "https://pypi.org/project/mastodon-archive/", "platform": "", "project_url": "https://pypi.org/project/mastodon-archive/", "project_urls": { "Homepage": "https://github.com/kensanata/mastodon-backup#mastodon-archive" }, "release_url": "https://pypi.org/project/mastodon-archive/1.2.0/", "requires_dist": null, "requires_python": "", "summary": "Utility for backing up your Mastodon content", "version": "1.2.0" }, "last_serial": 5135351, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "ae8e88d596c6dbacd09a23f9d0212e85", "sha256": "ec5f7b6747e0e8e93097560099742994949e5ae6c7345d668a5f852a4807eecd" }, "downloads": -1, "filename": "mastodon_archive-0.0.1.tar.gz", "has_sig": false, "md5_digest": "ae8e88d596c6dbacd09a23f9d0212e85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22783, "upload_time": "2017-12-01T14:37:08", "url": "https://files.pythonhosted.org/packages/94/d8/a2dd760ae1d5a45654a795d8f2aa47c57113bf038262b3b7248ee6d5c00e/mastodon_archive-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "05597d2baa255a9004e6db179dc55404", "sha256": "f67f06e182a0e7274198d3dbe1e34c7b9d5461c067d6a955d6c832645ad58913" }, "downloads": -1, "filename": "mastodon_archive-0.0.2.tar.gz", "has_sig": false, "md5_digest": "05597d2baa255a9004e6db179dc55404", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22895, "upload_time": "2017-12-01T15:36:16", "url": "https://files.pythonhosted.org/packages/55/8b/7351e36519e008eab447271459dda6256aa93f494436038ff84279caa4fa/mastodon_archive-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "19469c5dcda3b27d714bd6776adad882", "sha256": "1c1bcd5750abde8ba8f3b6b0fc1dd37d9edcbc36d32832af99255f93c9ae2b23" }, "downloads": -1, "filename": "mastodon_archive-0.0.3.tar.gz", "has_sig": false, "md5_digest": "19469c5dcda3b27d714bd6776adad882", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23313, "upload_time": "2017-12-02T21:01:45", "url": "https://files.pythonhosted.org/packages/62/4f/0883377d939d413c8dfd345f765f834c63159a65f9b78bde4a077e878f23/mastodon_archive-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "35d7d3d532b7c48ce1b2e037104c19f4", "sha256": "e574a7db0fd71cbc855378a700dcfa9f2fa46f4a1683a59e42ee96a3385d75a1" }, "downloads": -1, "filename": "mastodon_archive-0.0.4.tar.gz", "has_sig": false, "md5_digest": "35d7d3d532b7c48ce1b2e037104c19f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27966, "upload_time": "2017-12-11T13:51:03", "url": "https://files.pythonhosted.org/packages/d5/53/da5d55e3491f8483c57db1fc68f5331e6f428fb958574d2ef1470a2b2bb9/mastodon_archive-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "e8b1c962c32b4909af29473436604ad9", "sha256": "664dc7cde4485467e32535fc4105f7444fd1c7784f3eb4dd436a5200de9d4dcf" }, "downloads": -1, "filename": "mastodon_archive-0.0.5.tar.gz", "has_sig": false, "md5_digest": "e8b1c962c32b4909af29473436604ad9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29326, "upload_time": "2018-01-20T13:59:07", "url": "https://files.pythonhosted.org/packages/80/7c/df9f3adca6cf0d70f5c5754341a6196bfbb6c7b3d00e72c4a4238a4ff93a/mastodon_archive-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "ccbe477ea5bd0b884c7e7a3dda796b6a", "sha256": "d06362e7b943db3123fe95d872812660ea1d40f4ff3054b3fa0c37c2fead1099" }, "downloads": -1, "filename": "mastodon_archive-0.0.6.tar.gz", "has_sig": false, "md5_digest": "ccbe477ea5bd0b884c7e7a3dda796b6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30013, "upload_time": "2018-02-21T19:38:19", "url": "https://files.pythonhosted.org/packages/bb/e8/d34be73cccc28ec12fac77945898d6122201bb9e74d5f7657022a0816d87/mastodon_archive-0.0.6.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "be833648af646a523866b627d88e6523", "sha256": "57c4e69c0149365a11207cd9c6f292a56052d10942b259aa6a3bba691af15d0d" }, "downloads": -1, "filename": "mastodon_archive-1.0.0.tar.gz", "has_sig": false, "md5_digest": "be833648af646a523866b627d88e6523", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33511, "upload_time": "2018-08-17T17:15:05", "url": "https://files.pythonhosted.org/packages/b2/f1/2b883c917e62c176ae5e9a99aeed9bd93b3cdf076b1a39502b1cd5e68ae1/mastodon_archive-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "4f63098f2b6d0c5d7906b69c1330aa09", "sha256": "cbaf8d9dd544f586fbf59cf1c5bbb460c2db0ad5b13550f8856a2d86cfbe4288" }, "downloads": -1, "filename": "mastodon_archive-1.1.0.tar.gz", "has_sig": false, "md5_digest": "4f63098f2b6d0c5d7906b69c1330aa09", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46138, "upload_time": "2018-10-04T21:34:17", "url": "https://files.pythonhosted.org/packages/b9/ac/ac703bd0a8aac433c00fea2f3c360542b6cc897ad741cedf30df43d04b4c/mastodon_archive-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "1e32f5f3ec6107cc0b473e61a1f60227", "sha256": "8ea0c69c358a42f0138ad388d5471067185e7e561d8fc99b3007cbc6e6826c1a" }, "downloads": -1, "filename": "mastodon_archive-1.2.0.tar.gz", "has_sig": false, "md5_digest": "1e32f5f3ec6107cc0b473e61a1f60227", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48862, "upload_time": "2019-04-12T19:21:25", "url": "https://files.pythonhosted.org/packages/d6/31/c6e73562a3585dc701af0ffe3e196dc77d9496289f81e1c16e09d04b419a/mastodon_archive-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1e32f5f3ec6107cc0b473e61a1f60227", "sha256": "8ea0c69c358a42f0138ad388d5471067185e7e561d8fc99b3007cbc6e6826c1a" }, "downloads": -1, "filename": "mastodon_archive-1.2.0.tar.gz", "has_sig": false, "md5_digest": "1e32f5f3ec6107cc0b473e61a1f60227", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48862, "upload_time": "2019-04-12T19:21:25", "url": "https://files.pythonhosted.org/packages/d6/31/c6e73562a3585dc701af0ffe3e196dc77d9496289f81e1c16e09d04b419a/mastodon_archive-1.2.0.tar.gz" } ] }