きっかけは EXIF を表示したかったから
最初は Flickr の写真をブログに載せる簡単な方法を探していたのです。ただし EXIF 情報も一緒に表示させられるものを、という条件付きで。一番最初に見つけたのは FlickrEx です。JavaScript のコードを張り込むだけで EXIF 情報を表示してくれるという優れもの。
[D] Flickr画像に自動的にExif情報を付加するブログパーツ FlickrEx
FlickrEx を自分のブログに適用してみたものの、なぜか上手く動きません。GitHub でソースも公開されていたのでちょっと見てみたのですが、Flickr API を理解しないと問題がどの辺にあるのか分からず断念しました。
次の候補はお友達のまつさん (@matubiz) が作成されているブックマークレット
ExiFlickrHtml : matuダイアリー
ところが、このブックマークレットは最新の写真を引っ張ってくる仕様になっているので、過去にあげたものなどを引用するようなケース(私の使い方の想定)だとちょっと合わなかったのです。
もう一つ、こちらもお友達のフィープレさん (@feelingplace) が作られている Flickr2HTML
Flickrをブログに貼りつけるタグを取得するブックマークレット、Flickr2HTMLが完全リニューアル!! | Feelingplace
こちらは EXIF が表示できないので残念ながら今回の用途には合いませんでした。
無いなら作ればいい
ということで探すのより作る方が簡単だろうということで作ることにしました。Flickr の画像を扱うようなエントリを書くのは Mac しか想定していないので、ブックマークレットとかの汎用性のある形ではなく、開発が簡単な Ruby で作ってしまうことにしました。
ここから先は相当マニアックですし、俺得なエントリでごめんなさい。
最初は写真を一枚ずつ取得するスクリプトにしていたのですが、セットを選んで一気に生成した方が楽なのでそういうコードにしてみました。
実は、一枚ずつ取得するスクリプトも書いていて、こちらは TextExpander から呼び出せるようにしたので、それについては別の機会にエントリを書きたいと思います。
今回のスクリプトでは Flickr API を簡単に扱えるようにするライブラリ Flickraw と API キーなどをソースから分離するために pit を使いました。このスクリプトを動かしてみたい方は、それぞれを gem からインストールしてください。
具体的にはターミナル (terminal.app) を開いて
1 2 |
> sudo gem install flickraw > sudo gem install pit |
です。
あとは Frickr API を勉強してガリガリとコードを書くだけです。
Flickr Services
でき上がったスクリプトについては末尾に載せておきます。このスクリプトを実行すると、こんなイメージを表示するための HTML を自動的に作ってくれます。
スクリプトを実行する
このスクリプトを動かすためには Flickr の API キーと API シークレットが必要になります。また、アクセストークンとアクセスシークレットも必要になるのですが、これについては以下のブログがとても詳しく説明してくれていますので、この通りにやって 4 つの文字列を入手しましょう。
RubyでFlickrの画像をまとめてダウンロード・バックアップしておく | 望遠鏡ドットコム
それからユーザ ID も事前に調べておいてください。自分の写真やセットを表示するとユーザIDがURLの中に含まれています。
ユーザIDと先ほどの4 つの文字列を取得したら、ターミナルを開いてスクリプトを実行します。スクリプトの引数に Flickr のセットID を指定します。
セットID は取得したいセットを表示させた状態で URL の set の後の数字がセットIDになります。
実際に実行する時は、ターミナルでこのように入力します。
1 |
./getFlickrSet.rb 72157643435884313 |
初めてスクリプトを起動した時には pit が動いて 4 つの文字列とアカウントを入力するために vim が立ち上がりますので、それぞれの値を入力してください。
これを入力すると、あとはコンソールにずらずらとHTMLの文字列が出てくるので、これをコピー&ペーストしてブログに張り込めば終わりです。
このコードを書いたおかげでα6000で撮影して Flickr にアップしてブログに貼るというルーチンがとても簡単になりました。
コード
コードは GitHub に置いてありますので使いたいという方は適当にどうぞ。ただ Flickr Pro アカウント、OS X 10.9 でしか試していないので無保証です。azur256/GetHTMLFromFlickrWithEXIF
一応、ここにもコピペしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#!/usr/bin/ruby require 'flickraw' require 'pit' ENV['EDITOR'] ||= 'vim' config = Pit.get('FlickApp', :require => { 'api_key' => 'Flickr API Key', 'shared_secret' => 'Flickr Shared Secret', 'access_token' => 'Flickr Access Token', 'access_secret' => 'Flickr Access Secret', 'user_id' => 'Flickr User ID'}) FlickRaw.api_key = config['api_key'] FlickRaw.shared_secret = config['shared_secret'] flickr.access_token = config['access_token'] flickr.access_secret = config['access_secret'] userid = config['user_id'] photosetid = ARGV[0] def getPhotoHTML(photoid) info = flickr.photos.getInfo(:photo_id => photoid) username = info.owner.username profile_url = FlickRaw.url_profile(info) title = info.title date = info.dates.taken src_url = FlickRaw.url(info) url = FlickRaw.url_photopage(info) license = "" license_code = info.license license_list = flickr.photos.licenses.getInfo license_list['license'].each do | each_license | license = each_license['name'] if each_license['id'] == license_code end exif = flickr.photos.getExif(:photo_id => photoid) camera = exif['camera'] exposure, exposureR, f_number, iso, focal, lensModel, lensType, lens = "" exif['exif'].each do | each_exif | exposure = each_exif['clean'] if each_exif['tag'] == 'ExposureTime' exposureR = each_exif['raw'] if each_exif['tag'] == 'ExposureTime' f_number = each_exif['clean'] if each_exif['tag'] == 'FNumber' iso = each_exif['raw'] if each_exif['tag'] == 'ISO' focal = each_exif['clean'] if each_exif['tag'] == 'FocalLength' lensModel = each_exif['raw'] if each_exif['tag'] == 'LensModel' lensType = each_exif['raw'] if each_exif['tag'] == 'LensType' end if (exposure == nil) then exposure = exposureR if (exposure != nil) then exposure = exposure + " sec" end end lens = (lensModel == nil ) ? lensType : lensModel if (lens != nil && lens != "") then lens = "(" + lens + ")" end exif_content = "#{camera} #{lens}<br />#{focal}, #{f_number}, ISO #{iso}, #{exposure}" content = "<a href=\"#{url}\" title=\"#{title} by #{username}, on Flickr\" target=\"_blank\"><img src=\"#{src_url}\" width=\"500\" height=\"333\" alt=\"#{title}\"></a><br />#{title} by <a href=\"#{profile_url}\">#{username}</a>, on Flickr<br /><div class=\"flickr-exif\">#{exif_content}</div>(#{license})<br />\n\n" puts content end photos = flickr.photosets.getPhotos(:photoset_id => photosetid) photos.photo.each do |photo| getPhotoHTML(photo.id) end |
これでブログ作成もはかどるかな?
一枚だけ引っ張ってくるために TextExpander スニペットも作りましたので、よろしかったらこちらもどうぞ。
Flickrで表示している画像を簡単にブログに張り込むTextExpanderスニペットを作りました
最後まで読んでいただきありがとうございます。
左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです
Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします
RSSリーダへの登録は こちら からどうぞ。
コメントを残す