Skip to content

Instantly share code, notes, and snippets.

@tkazusa
Created December 25, 2019 14:47
Show Gist options
  • Save tkazusa/0ae76a096eb16c3eab8c7ebc593a2616 to your computer and use it in GitHub Desktop.
Save tkazusa/0ae76a096eb16c3eab8c7ebc593a2616 to your computer and use it in GitHub Desktop.
Download iamges with flickr API
"""
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