Created
December 25, 2019 14:47
-
-
Save tkazusa/088ea0f4218c7299e4fcf74f3cdb5892 to your computer and use it in GitHub Desktop.
Download iamges with flickr API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
To utilize flickr API, you need to parse a config.json like bellow. | |
{ | |
"Key": "XXXX", | |
"Secret": "XXXX", | |
"Keywords": "XXXX", | |
"Per_page": "XXXX", | |
} | |
""" | |
import argparse | |
import json | |
import os | |
import time | |
from logging import DEBUG, StreamHandler, getLogger | |
from urllib.request import urlretrieve | |
from flickrapi import FlickrAPI | |
WAIT_TIME = 1 | |
SAVEDIR = "./photos" | |
logger = getLogger(__name__) | |
handler = StreamHandler() | |
handler.setLevel(DEBUG) | |
logger.setLevel(DEBUG) | |
logger.addHandler(handler) | |
logger.propagate = False | |
def get_photos_info(key: str, secret: str, perpage: int, keyword: str) -> list: | |
"""Get data photos using flickr api | |
Flickr API: https://code.google.com/archive/p/flickrpy/ | |
""" | |
logger.debug('Search keyword: {}'.format(keyword)) | |
flickr = FlickrAPI(key, secret, format='parsed-json') | |
result = flickr.photos.search( | |
text=keyword, | |
per_page=per_page, | |
media='photos', | |
sort='relevance', | |
safe_search=1, | |
extras='url_q, license') | |
photos_info = result['photos'] | |
return photos_info | |
def download_photos(photos_info: dict, keyword: str) -> None: | |
"""Download and save photos with photos info via flickr api""" | |
for i, photo_info in enumerate(photos_info['photo']): | |
url_q = photo_info['url_q'] | |
filepath = SAVEDIR + '/{}_{}.jpg'.format(keyword.replace(' ', '_'), i) | |
if os.path.exists(filepath): | |
continue | |
urlretrieve(url_q, filepath) | |
time.sleep(WAIT_TIME) | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser() | |
parser.add_argument( | |
'--flickr_config', | |
required=False, | |
default='flickr_config.json') | |
args = parser.parse_args() | |
with open(args.flickr_config) as f: | |
flickr_config = json.load(f) | |
key = flickr_config['Key'] | |
secret = flickr_config['Secret'] | |
keywords = flickr_config['Keywords'] | |
per_page = flickr_config['Per_page'] | |
if not os.path.isdir(SAVEDIR): | |
os.makedirs(SAVEDIR) | |
for keyword in keywords: | |
photos_info = get_photos_info(key, secret, per_page, keyword) | |
download_photos(photos_info, keyword) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment