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にはパラメータが数多くあるので、いろいろと試してみるとおもしろそうです。

