コマンドラインで Flickr 操作

というわけで、実験してみました。Beej's Python Flickr API というのを使っています。Python 2.4 でゴリゴリ動かしましたが、2.5 が使える方は、そちらのほうが良いでしょう*1
以下のスクリプトで、2007年 10月 1日から 20日*2に撮影された自分の写真をサーチして、写真の ID、撮影日時、撮影日時の精度を表示します。

#!/usr/pkg/bin/python2.4

taken_date_from  = '2007-10-01'
taken_date_until = '2007-10-20'

import flickrapi

api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
api_secret = 'yyyyyyyyyyyyyyyyy'

flickr = flickrapi.FlickrAPI(api_key, api_secret)

(token, frob) = flickr.getTokenPartOne(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.getTokenPartTwo((token, frob))

list = flickr.photos_search(user_id="me", sort="date-taken-asc",
        min_taken_date=taken_date_from, max_taken_date=taken_date_until)

for photo in list.photos[0].photo:
        id = photo['id']
        info = flickr.photos_getInfo(photo_id=id)
        print "%s %s (%s)" % (id, info.photo[0].dates[0]['taken'],
                info.photo[0].dates[0]['takengranularity'])

あ、FlickrAPI Key が必要です。この辺で調べてください。

Beej's Python Flickr API は、ここで入手できます。

緯度経度を得る

位置情報を与えている写真を抜き出す方法です。なぜか私が試したとき、思ったように getWithGeoData() が動きませんでしたので、search()で探しました。

#!/usr/pkg/bin/python2.4

taken_date_from  = '1900-01-01'
taken_date_until = '2100-01-01'

import flickrapi

api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
api_secret = 'yyyyyyyyyyyyyyyyy'

flickr = flickrapi.FlickrAPI(api_key, api_secret)

(token, frob) = flickr.getTokenPartOne(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.getTokenPartTwo((token, frob))

list = flickr.photos_search(user_id="me", sort="date-taken-asc",
        bbox="-180,-90,180,90",
        min_taken_date=taken_date_from, max_taken_date=taken_date_until)

for photo in list.photos[0].photo:
        id = photo['id']
        info = flickr.photos_getInfo(photo_id=id).photo[0]
        print "%s %s (%s) %s %s (%s)" % (id, info.dates[0]['taken'],
                info.dates[0]['takengranularity'],
                info.location[0]['latitude'], info.location[0]['longitude'],
                info.location[0]['accuracy'])

*1:uuid というモジュールがインストールされていて、あと、setup.py を少しいじれは 2.4 でも動くようです。

*2:EXIF で与えられた日付です。