nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

Pythonで画像データをFlickerで取得する

はじめに

Pythonで画像データを取得してみたいと思います。 flickr の画像取得は、flickr API を使用します。

flickrのAPIは以下に記載されています

https://www.flickr.com/services/api/

APIを使用して画像情報を取得してみる

flickrのAPIを使用して画像の情報を取得します。

コマンドプロンプト上から python [コードのファイル名] monkey と打つと画像情報を取得できます。

コード例

import flickrapi
from urllib.request import urlretrieve
from pprint import pprint
import os, time, sys

# APIキーの情報

key = "d21bac140e0245aed437c6c812f27d44"
secret = "b5e79704c13a3d15"
wait_time = 1

# コマンドライン引数の 1 番目の値を取得
animalname = sys.argv[1]

# 画像を保存するディレクトリを指定
savedir = "./" + animalname

flickr = flickrapi.FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
    # 検索キーワード
    text = animalname,
    # 取得するデータ件数
    per_page = 2,
    # 検索するデータの種類(ここでは、写真)
    media = 'photos',
    # データの並び順(関連順)
    sort = 'relevance',
    # UI コンテンツを表示しない
    safe_search = 1,
    # 取得したいオプションの値(url_q->画像のアドレスが入っている情報、licence -> ライセンス情報)
    extras = 'url_q, licence'
)

photos = result['photos']

# 戻り値を表示する
# pprint(photos)
{'page': 1,
 'pages': 498092,
 'perpage': 2,
 'photo': [{'farm': 4,
            'height_q': '150',
            'id': '15557905405',
            'isfamily': 0,
            'isfriend': 0,
            'ispublic': 1,
            'owner': '101295317@N06',
            'secret': '05357b440d',
            'server': '3928',
            'title': 'monkey',
            'url_q': 'https://live.staticflickr.com/3928/15557905405_05357b440d_q.jpg',
            'width_q': '150'},
           {'farm': 1,
            'height_q': '150',
            'id': '297887549',
            'isfamily': 0,
            'isfriend': 0,
            'ispublic': 1,
            'owner': '12345287@N00',
            'secret': '2dc0ee273f',
            'server': '110',
            'title': 'monkey',
            'url_q': 'https://live.staticflickr.com/110/297887549_2dc0ee273f_q.jpg',
            'width_q': '150'}],
 'total': '996183'}

次に、画像を実際にダウンロードします。

コマンドプロンプト上から python [コードのファイル名] monkey と打つと画像データがダウンロードされます。

コード例

import flickrapi
from urllib.request import urlretrieve
from pprint import pprint
import os, time, sys

# APIキーの情報

key = "d21bac140e0245aed437c6c812f27d44"
secret = "b5e79704c13a3d15"
wait_time = 1

# コマンドライン引数の 1 番目の値を取得
animalname = sys.argv[1]

# 画像を保存するディレクトリを指定
savedir = "./" + animalname

flickr = flickrapi.FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
    # 検索キーワード
    text = animalname,
    # 取得するデータ件数
    per_page = 400,
    # 検索するデータの種類(ここでは、写真)
    media = 'photos',
    # データの並び順(関連順)
    sort = 'relevance',
    # UI コンテンツを表示しない
    safe_search = 1,
    # 取得したいオプションの値(url_q->画像のアドレスが入っている情報、licence -> ライセンス情報)
    extras = 'url_q, licence'
)

photos = result['photos']

for i, photo in enumerate(photos['photo']):
    url_q = photo['url_q']

    filepath = savedir + '/' + photo['id'] + '.jpg'

    # ファイルが重複していたらスキップする
    if os.path.exists(filepath): continue

     # データをダウンロードする
    urlretrieve(url_q, filepath)

    time.sleep(wait_time)