僕はよく写真を撮るのですが、写真ファイルにはExif(エグジフ、Exchangeable image file format)と言う撮影時の色々な情報を保持していて、撮影時のカメラの状態(ISO、絞り、露出とか)を持っています。僕の場合は撮影した写真はGoogleのPicasaウエブアルバム上で管理しています。当然、Picasa上からもExifを見れるのですが、ひとつずつしか見れないので面倒です。一気に見たいのです。スルッと見たいのですが、今の所そんな機能はないので、このExif情報を一覧形式で見るためにGoogle API(Python)を利用して何か作ろうかと思います。
あ、でも今回は本格的な何かを作り始めるのではなく、とりあえず今日中に出来る簡易的なものにしておきます。
■どんなのもを作るのか
Picasaウエブアルバムから指定されたアルバム内の全写真の詳細情報(Exif)を取得してHTMLとして出力する。
Picasaのユーザー名、パスワード、アルバム名を引数として特定のアルバムを対象とする。
出力したHTMLファイルは自分でクリックして起動する。
■やること
・PythonからGoogleAPIを使う準備
・作ってみる
・動かしてみる
■HTMLファイルに出力する情報
・camera
・メーカ(make)
・モデル(model)
・ISO
・絞り(fstop)
・露出(exposure)
・レンズ焦点距離(focallength)
・フラッシュ(flash)
・日時(time)
●PythonからGoogleAPIを使う準備
GoogleのAPI(Python)を使うには
「Google Data APIs Python Client Library」というライブラリを入れる必要があるみたいです。
ここからダウンロード
http://code.google.com/p/gdata-python-client/downloads/list
gdata-2.0.17.zip
展開して
cd ~/デスクトップ/gdata-2.0.17
sudo python setup.py install
で、buildディレクトリが出来るのでその中の「atom」「gdata」ディレクトリを実行場所にコピーする
cp -R ~/デスクトップ/gdata-2.0.17/build/lib.linux-i686-2.7/* ~/tool
これから作るものは~/toolで作成して動かすので~/toolに配置しておく
●作ってみる
cd ~/tool
vi picasa.py
# -*- coding: utf-8 -*- import gdata.photos.service import gdata.media import gdata.geo import getpass import sys import datetime #実行:python picasa.py ユーザ名 パスワード 'アルバム名'>aaa.html #第1引数:ユーザ名(メールアドレス) email=sys.argv[1] #第2引数:パスワード password=sys.argv[2] #第3引数:アルバム名 albumname = sys.argv[3] gd_client = gdata.photos.service.PhotosService() gd_client.email = email gd_client.password = password gd_client.source = 'exampleCo-exampleApp-1' gd_client.ProgrammaticLogin() username=email albumid = "" albums = gd_client.GetUserFeed(user=username) for album in albums.entry: if album.title.text == albumname: albumid = album.gphoto_id.text photos = gd_client.GetFeed( '/data/feed/api/user/%s/albumid/%s?kind=photo' % ( username, albumid)) print '<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">' print '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' print '<body bgcolor="#585858" text="#E6D2B1"></body>' print '<style type="text/css">' print 'td, th { border: 1px #857464 solid; }' print 'table { border: 1px #555555 solid; }' print '.aa{ background-color: #39303A; }' print '</style>' print '<h2>Picasa WebAlbum -- %s</h2>' % (sys.argv[3]) for photo in photos.entry: print '<table>' print '<tr><td><a href="%s"><img src="%s"/></a></td>' % (photo.content.src, photo.media.thumbnail[2].url) print '<td><table>' print '<tr><td>%s\n</td></tr>' % (photo.summary.text) if photo.exif.make and photo.exif.model: camera = '%s %s' % (photo.exif.make.text, photo.exif.model.text) exposure = '%s' % (photo.exif.exposure.text) flash = '%s' % (photo.exif.flash.text) focallength = '%s' % (photo.exif.focallength.text) fstop = '%s' % (photo.exif.fstop.text) iso = '%s' % (photo.exif.iso.text) make = '%s' % (photo.exif.make.text) model = '%s' % (photo.exif.model.text) time = '%s' % datetime.date.fromtimestamp(int(photo.exif.time.text)/1000) else: camera = 'unknown' print '<tr><td class="aa">camera:<td>%s\n</td></td></tr>' % (camera) print '<tr><td class="aa">メーカ(make):<td>%s\n</td></td></tr>' % (make) print '<tr><td class="aa">モデル(model):<td>%s\n</td></td></tr>' % (model) print '<tr><td class="aa">ISO:<td>%s\n</td></td></tr>' % (iso) print '<tr><td class="aa">絞り(fstop):<td>%s\n</td></td></tr>' % (fstop) print '<tr><td class="aa">露出(exposure):<td>%s\n</td></td></tr>' % (exposure) print '<tr><td class="aa">レンズ焦点距離(focallength):<td>%s\n</td></td></tr>' % (focallength) print '<tr><td class="aa">フラッシュ(flash):<td>%s\n</td></td></tr>' % (flash) print '<tr><td class="aa">日時(time):<td>%s\n</td></td></tr>' % (time) print '</table></td>' print '</tr>' print '</table>' print '<br>' print '<h2>-------------------Other Album----------------------</h2>' albums = gd_client.GetUserFeed(user=username) print '<table>' for album in albums.entry: print '<tr><td class="aa">title:</td><td>%s</td><td class="aa">number of photos:</td><td>%s</td><td class="aa"> id:</td><td>%s</td></tr>' % (album.title.text, album.numphotos.text, album.gphoto_id.text) print '</table>' print'</html>' |
gistにも置いてあります
https://gist.github.com/brokendish/4753988
●動かしてみる
実行:python picasa.py ユーザ名 パスワード ‘アルバム名’>aaa.html
星空を撮影した時のカメラの情報を比較してみる
一覧にすると露出時間とかが比較しやすいので個人的には便利!