flickr API を使う ( Python )
概要
- flickr API を Python で使用してみる。
- 特定ユーザの画像リストを取得する。
flickr って?
- https://www.flickr.com/
- 画像共有サービス
- 無料アカウントでも 1TB まで画像を入れておける!!
- ( 2014/03/26 時点。将来はもっと増えるのかも?? )
- 日本では、そこまで流行っていない感がある。基本が英語だから?
flickr API
- flickr アカウントがあれば使用することができる API。
- API Key を取得すれば使用可能。ただし、登録の手間が少しかかる。
- 『flickr API』でググると色々方法出てくる。ここでは省略。
API の使用
- API Key と Secret を入手すると、様々な言語で利用可能。
- The App Garden に大量に置いてある。
flickrpy
- 今回は、Python の flickrpy を使用した。
初期設定
- flickr.py 内の API_KEY と API_SECRET に、取得した値を入れる。
# (前半部省略) # set these here or using flickr.API_KEY in your application API_KEY = '' # <= ここに API Key を設定 API_SECRET = '' # <= ここに API secret を設定 email = None password = None AUTH = False debug = False # (以下省略)
使ってみる。
- 後は、他の python ファイルから「import flickr」すれば使用可能。
- 以下では、指定したユーザのオリジナルサイズ画像一覧の URL を取得している。
- 使用例:『$python get_flickr_user_photos.py 101142033@N08 out.csv』
- get_flickr_user_photos.py
# -*- coding: utf-8 -*- import flickr import csv import json import sys def execute( user_id, dest_filename ) : ''' flickr API を用いて、指定ユーザの写真 URL を取得します。 写真名と URL を対にした CSV ファイルとして出力します。 TODO : ユーザが存在することのチェック TODO : 出力ファイル名のファイルが書き込めることのチェック ''' destfile = open( dest_filename, 'w' ) dest = csv.writer( destfile, lineterminator = '\n' ) header = [ "Title", "URL" ] dest.writerow( header ) page_count = 0 photo_max = 1 while ( photo_max > 0 ) : page_count += 1 photos = flickr.people_getPublicPhotos( user_id, page = str( page_count ) ) photo_max = len( photos ) photo_count = 0 for photo in photos : photo_count += 1 title = str( photo.title ) print "Page {0} ({1}/{2}), Get photo : {3}".format( page_count, photo_count, photo_max, title ) sizes = str( photo.getSizes() ) url = _getOriginalUrlFromSizes( sizes ) row = [] row.append( title ) row.append( url ) dest.writerow( row ) destfile.close() def _getOriginalUrlFromSizes( sizes ) : ''' 各サイズの URL からオリジナルサイズの URL を取得します。 ''' text = sizes.replace( "'", "\"" ) json_sizes = json.loads( text ) result = None for json_objs in json_sizes : label = json_objs["label"] if ( label == "Original" ) : result = json_objs["source"] break return result ''' メイン処理 ''' if __name__ == '__main__' : argv = sys.argv argc = len( argv ) user_id = None dest_filename = "out.csv" if ( argc < 2 ) : print "Usage: $ python {0} <user ID> <dest filename>".format( argv[0] ) quit() user_id = argv[1] if ( argc >= 3 ) : dest_filename = argv[2] execute( user_id, dest_filename )
他の使い方
- ドキュメントが無いので、基本は「ソースを読め」というスタンスと思われる。
- flickr.py の処理名は flickr API の名前とほぼ同じなので、その辺りから引いてくれば問題なさそう。