PythonでFlickr APIを使って写真を検索する(その2)
前回では検索結果をJSON形式で取得できることがわかったので、写真をダウンロードしてみます。
実験環境
- ThinkPad X200
- Windows7 Professional 64bit
- Python 2.7.3
写真をダウンロードする
検索結果から写真が保存されているURLを得るために、Photo Source URLsに仕様が書かれています。
これによると写真のURLは下記フォーマットで決定されることがわかります。
https://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}.jpg
前回エントリーで取得した結果と比べてみると、
{ "farm": 4, "id": "14676462357", "isfamily": 0, "isfriend": 0, "ispublic": 1, "owner": "107369966@N07", "secret": "de3d8c1e63", "server": "3882", "title": "Fruits Daifuku picture2" },
farm-idにfarmの値を、server-idにserverの値を、idにidの値を、secretにsecretの値をあてはめてURLを作れば、写真が保管されているURLになります。
前回エントリーのプログラムをベースにして、"daifuku"の写真を50枚ダウンロードするプログラムを書いてみました。
# -*- coding: utf-8 -*- import requests url = 'https://api.flickr.com/services/rest/' API_KEY = 'YOUR API KEY' payload = { 'method': 'flickr.photos.search', 'api_key': API_KEY, 'text': 'daifuku', 'per_page': '50', 'format': 'json', 'nojsoncallback': '1' } r = requests.get(url, params=payload) resp = r.json() tpl_url = 'https://farm%s.staticflickr.com/%s/%s_%s.jpg' count = 1 for i in resp['photos']['photo']: img_url = tpl_url % (i['farm'],i['server'],i['id'],i['secret']) print "#%04d" % count, img_url r = requests.get(img_url) fname = "%04d.jpg" % count f = open(fname, 'wb') f.write(r.content) f.close() count += 1
実行させると、おいしうな大福の写真がダウンロードできました。でもちょっと違う写真もちらほら見えます。検索APIにはパラメータが数多くあるので、いろいろと試してみるとおもしろそうです。