{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Flickr Apollo Archive\n", "=================\n", "\n", "Python package to list and download all original images from [Flickr Apollo Archive](https://www.flickr.com/photos/projectapolloarchive)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Install\n", "-------\n", "With `pip`:\n", "\n", "```bash\n", "$ pip install apollo-archive\n", "```\n", "\n", "With the `source files`:\n", "```bash\n", "$ git clone https://github.com/seignovert/python-flickr-apollo-archive.git apollo-archive\n", "$ cd apollo-archive ; python setup.py install\n", "```\n", "\n", "> __Note__:\n", "> You need FlickrAPI `key` and `secret` tokens.\n", "> They can be generated [here](https://www.flickr.com/services/api/keys/).\n", ">\n", "> Use the prompt input to init the key variables on the first load of the module:\n", "> ```bash\n", "Warning: Some environnement variables are missing.\n", ">> Go to https://www.flickr.com/services/api/keys/ to setup your keys.\n", "FLICKR_API_KEY: 1234567890\n", "FLICKR_API_SECRET: ABCDEF\n", "```\n", "> or you can set then globally:\n", "> ```bash\n", "$ export FLICKR_API_KEY=1234567890\n", "$ export FLICKR_API_SECRET=ABCDEF\n", "```\n", ">\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Query Flickr API" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Flickr User: Apollo Image Gallery (136485307@N06) | 107 albums" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from apolloarchive import User\n", "\n", "user = User()\n", "\n", "user" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[Album: \"Announcements\" (3 photos),\n", " Album: \"Apollo 7 Magazine 3/M\" (46 photos),\n", " Album: \"Apollo 7 Magazine 4/N\" (55 photos),\n", " Album: \"Apollo 7 Magazine 7/S\" (141 photos),\n", " Album: \"Apollo 7 Magazine 11/P\" (65 photos),\n", " Album: \"Apollo 8 Magazine 12/D\" (171 photos),\n", " Album: \"Apollo 8 Magazine 13/E\" (168 photos),\n", " Album: \"Apollo 8 Magazine 14/B\" (152 photos),\n", " Album: \"Apollo 8 Magazine 15/F\" (46 photos),\n", " Album: \"Apollo 8 Magazine 16/A\" (75 photos),\n", " Album: \"Apollo 8 Magazine 17/C\" (169 photos),\n", " Album: \"Apollo 8 Magazine 18/G\" (81 photos),\n", " Album: \"Apollo 9 Magazine 19/A\" (144 photos),\n", " Album: \"Apollo 9 Magazine 20/E\" (125 photos),\n", " Album: \"Apollo 9 Magazine 21/B\" (146 photos),\n", " Album: \"Apollo 9 Magazine 22/C\" (151 photos),\n", " Album: \"Apollo 9 Magazine 23/D\" (144 photos),\n", " Album: \"Apollo 9 Magazine 24/F\" (63 photos),\n", " Album: \"Apollo 10 Magazine 27/N\" (133 photos),\n", " Album: \"Apollo 10 Magazine 34/M\" (164 photos),\n", " Album: \"Apollo 10 Magazine 35/U\" (116 photos),\n", " Album: \"Apollo 11 Magazine 36/N\" (144 photos),\n", " Album: \"Apollo 11 Magazine 37/R\" (124 photos),\n", " Album: \"Apollo 11 Magazine 38/O\" (181 photos),\n", " Album: \"Apollo 11 Magazine 39/Q\" (108 photos),\n", " Album: \"Apollo 11 Magazine 40/S (v1 / levels-adj)\" (130 photos),\n", " Album: \"Apollo 11 Magazine 40/S (v2)\" (128 photos),\n", " Album: \"Apollo 11 Magazine 41/P\" (189 photos),\n", " Album: \"Apollo 11 Magazine 44/V\" (158 photos),\n", " Album: \"Apollo 12 Magazine 46/Y\" (154 photos),\n", " Album: \"Apollo 12 Magazine 47/V\" (154 photos),\n", " Album: \"Apollo 12 Magazine 48/X\" (151 photos),\n", " Album: \"Apollo 12 Magazine 49/Z\" (154 photos),\n", " Album: \"Apollo 12 Magazine 50/Q\" (141 photos),\n", " Album: \"Apollo 12 Magazine 51/R\" (130 photos),\n", " Album: \"Apollo 12 Magazine 55/EE\" (172 photos),\n", " Album: \"Apollo 13 Magazine 58/N\" (26 photos),\n", " Album: \"Apollo 13 Magazine 59/R\" (95 photos),\n", " Album: \"Apollo 13 Magazine 60/L\" (150 photos),\n", " Album: \"Apollo 13 Magazine 61/II\" (167 photos),\n", " Album: \"Apollo 13 Magazine 62/JJ\" (161 photos),\n", " Album: \"Apollo 14 Magazine 64/LL\" (157 photos),\n", " Album: \"Apollo 14 Magazine 65/KK\" (15 photos),\n", " Album: \"Apollo 14 Magazine 66/II\" (145 photos),\n", " Album: \"Apollo 14 Magazine 67/JJ\" (33 photos),\n", " Album: \"Apollo 14 Magazine 68/MM\" (102 photos),\n", " Album: \"Apollo 14 Magazine 72/L\" (114 photos),\n", " Album: \"Apollo 14 Magazine 74/N\" (18 photos),\n", " Album: \"Apollo 14 Magazine 75/R\" (97 photos),\n", " Album: \"Apollo 15 Magazine 81/QQ\" (179 photos),\n", " Album: \"Apollo 15 Magazine 82/SS\" (172 photos),\n", " Album: \"Apollo 15 Magazine 84/MM\" (119 photos),\n", " Album: \"Apollo 15 Magazine 85/LL (v1 / mixed dpi)\" (177 photos),\n", " Album: \"Apollo 15 Magazine 85/LL (v2)\" (177 photos),\n", " Album: \"Apollo 15 Magazine 86/NN\" (165 photos),\n", " Album: \"Apollo 15 Magazine 87/KK\" (166 photos),\n", " Album: \"Apollo 15 Magazine 88/TT\" (154 photos),\n", " Album: \"Apollo 15 Magazine 89/WW\" (165 photos),\n", " Album: \"Apollo 15 Magazine 90/PP\" (151 photos),\n", " Album: \"Apollo 15 Magazine 91/M\" (77 photos),\n", " Album: \"Apollo 15 Magazine 92/OO\" (174 photos),\n", " Album: \"Apollo 15 Magazine 93/P\" (160 photos),\n", " Album: \"Apollo 15 Magazine 96/Q\" (134 photos),\n", " Album: \"Apollo 15 Magazine 97/O\" (161 photos),\n", " Album: \"Apollo 16 Magazine 105/M\" (185 photos),\n", " Album: \"Apollo 16 Magazine 106/K\" (183 photos),\n", " Album: \"Apollo 16 Magazine 107/C\" (165 photos),\n", " Album: \"Apollo 16 Magazine 108/I\" (162 photos),\n", " Album: \"Apollo 16 Magazine 109/G\" (120 photos),\n", " Album: \"Apollo 16 Magazine 110/H\" (170 photos),\n", " Album: \"Apollo 16 Magazine 111/J\" (160 photos),\n", " Album: \"Apollo 16 Magazine 112/L\" (87 photos),\n", " Album: \"Apollo 16 Magazine 113/A\" (104 photos),\n", " Album: \"Apollo 16 Magazine 114/B\" (88 photos),\n", " Album: \"Apollo 16 Magazine 115/D\" (92 photos),\n", " Album: \"Apollo 16 Magazine 116/E\" (162 photos),\n", " Album: \"Apollo 16 Magazine 117/F\" (131 photos),\n", " Album: \"Apollo 16 Magazine 118/NN\" (166 photos),\n", " Album: \"Apollo 16 Magazine 119/RR\" (161 photos),\n", " Album: \"Apollo 16 Magazine 120/V\" (157 photos),\n", " Album: \"Apollo 16 Magazine 121/PP\" (112 photos),\n", " Album: \"Apollo 16 Magazine 122/QQ\" (155 photos),\n", " Album: \"Apollo 17 Magazine 133/J\" (184 photos),\n", " Album: \"Apollo 17 Magazine 134/B\" (158 photos),\n", " Album: \"Apollo 17 Magazine 135/G\" (149 photos),\n", " Album: \"Apollo 17 Magazine 136/H\" (186 photos),\n", " Album: \"Apollo 17 Magazine 137/C\" (163 photos),\n", " Album: \"Apollo 17 Magazine 138/I\" (158 photos),\n", " Album: \"Apollo 17 Magazine 139/K\" (167 photos),\n", " Album: \"Apollo 17 Magazine 140/E\" (159 photos),\n", " Album: \"Apollo 17 Magazine 141/L\" (160 photos),\n", " Album: \"Apollo 17 Magazine 142/M\" (166 photos),\n", " Album: \"Apollo 17 Magazine 143/N\" (150 photos),\n", " Album: \"Apollo 17 Magazine 144/R\" (151 photos),\n", " Album: \"Apollo 17 Magazine 145/D\" (157 photos),\n", " Album: \"Apollo 17 Magazine 146/F\" (163 photos),\n", " Album: \"Apollo 17 Magazine 147/A\" (157 photos),\n", " Album: \"Apollo 17 Magazine 148/NN\" (170 photos),\n", " Album: \"Apollo 17 Magazine 149/KK\" (164 photos),\n", " Album: \"Apollo 17 Magazine 150/LL\" (164 photos),\n", " Album: \"Apollo 17 Magazine 151/OO\" (161 photos),\n", " Album: \"Apollo 17 Magazine 152/PP\" (151 photos),\n", " Album: \"Apollo 17 Magazine 153/MM\" (171 photos),\n", " Album: \"Apollo 17 Magazine 157/VV\" (46 photos),\n", " Album: \"Apollo 17 Magazine 160/YY\" (52 photos),\n", " Album: \"Apollo 17 Magazine 162/SS\" (72 photos),\n", " Album: \"Apollo 17 Magazine 163/TT\" (72 photos)]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "albums = user.albums\n", "\n", "albums" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Announcements'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "albums[0].slug" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Photo: \"(also) Follow Project Apollo Archive on Facebook\",\n", " Photo: \"About the Project Apollo Archive Flickr Gallery\",\n", " Photo: \"The Project Apollo Archive is best experienced in the \"Albums\" view\"]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "albums[0].photos" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'https://farm1.staticflickr.com/622/21878909302_a369c0c4de_o.jpg'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "albums[0].photos[0].url" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Also-follow-project-apollo-archive-on-facebook.jpg'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "albums[0].photos[0].filename" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sync Flickr photosets" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Sync Announcements: 100%|██████████| 3/3 [00:00<00:00, 4.00it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "> Download: Also-follow-project-apollo-archive-on-facebook\n", "> Download: About-the-project-apollo-archive-flickr-gallery\n", "> Download: The-project-apollo-archive-is-best-experienced-in-the-albums-view\n", "\n" ] } ], "source": [ "from apolloarchive import sync\n", "\n", "sync(album=0, ncpu=4, overwrite=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### CLI sync" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "usage: apollo-archive [-h] [--user-id USER_ID] [--username USERNAME]\r\n", " [--album ALBUM] [--ncpu NCPU] [--overwrite]\r\n", "\r\n", "Sync Flickr folder(s)\r\n", "\r\n", "optional arguments:\r\n", " -h, --help show this help message and exit\r\n", " --user-id USER_ID, -i USER_ID\r\n", " User ID\r\n", " --username USERNAME, -u USERNAME\r\n", " Username\r\n", " --album ALBUM, -a ALBUM\r\n", " Album number to sync\r\n", " --ncpu NCPU, -n NCPU Number of thread during for download\r\n", " --overwrite, -o Re-download all\r\n" ] } ], "source": [ "!apollo-archive --help" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sync Announcements: 100%|█████████████████████████| 3/3 [00:00<00:00, 3.82it/s]\n", "> Download: Also-follow-project-apollo-archive-on-facebook\n", "> Download: About-the-project-apollo-archive-flickr-gallery\n", "> Download: The-project-apollo-archive-is-best-experienced-in-the-albums-view\n", "\n" ] } ], "source": [ "!apollo-archive --album 0 --ncpu 4 --overwrite" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }