先日、Flickr のセットから一括して写真へのリンクを作成する Ruby スクリプトについてエントリを書きました。
Flickrのセットからブログ用のHTMLを出力するRubyスクリプトを書きました
今日は、一枚ずつですが同じフォーマットでブラウザに表示している Flickr の写真を TextExpander で HTML コンテンツに展開するスニペットをご紹介したいと思います。この方法は Mac 上の TextExpander でしか動きませんのでご注意ください。
お知らせ
TextExpander のまとめ記事を書きました。もしよろしかったらこちらもご覧ください。TextExpander の使い方
早速、仕組みをご紹介
やっていることはすごく簡単です。
表示しているページ ( Flickr の写真を表示しているページ)の URL を Safari あるいは Chrome から取得して、そこから Flickr の Photo ID を切り出して、Ruby スクリプトの引数に渡して Ruby スクリプトを動かした結果を展開しているだけです。
まずはスニペットの中身をご紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
on getURLFromSafari() tell application "Safari" set myURL to URL of document 1 as Unicode text end tell return myURL end getURLFromSafari set frickr_url to getURLFromSafari() set curDelim to AppleScript's text item delimiters set AppleScript's text item delimiters to "/" set node to text items of frickr_url set AppleScript's text item delimiters to curDelim set photoId to item 6 of node do shell script "/usr/bin/ruby /usr/local/bin/getFlickr.rb " & photoId as string |
このスニペットは AppleScript として登録してください。
やっていることを簡単に説明すると、Safari で開いている URL を取得してきて’/’ で分割した要素のから Photo ID を取得してきます。それを /usr/local/bin に置いてある getFlickr.rb というファイルの引数に渡して実行する、という内容です。
Chromeから取ってきたい時は
1 2 3 4 5 6 |
on getURLFromChrome() tell application "Google Chrome" set MyURL to URL of active tab of window 1 as Unicode text end tell return myURL end getURLFromChrome |
とすれば Chrome から同じ事をすることができます。
実際に Flickr から取得してくるのは /usr/local/bin に置いた getFlickr.rb がやってくれます。こちらの内容は末尾に載せておきますが、前回のセットを取得するのとほとんど変わりません。
前回の getFrickrSet.rb を実行した人はユーザIDや API Key などの情報をすでに登録済みなのでそのまま実行できますが、もし、まだ登録していない人は一度ターミナルを開いて、getFlickr.rb を実行して API キーなどを登録してください。
詳細は前回のエントリでもご紹介した
RubyでFlickrの画像をまとめてダウンロード・バックアップしておく | 望遠鏡ドットコム
のエントリの通りにやるだけで大丈夫です。
準備が整ったら、Flickr で写真のページを開いた状態でスニペットを実行してください。一瞬の間があると思いますが、Flickr の画像への情報を取ってきて展開してくれると思います。これで、一枚だけ追加したりするのは、TextExpander 経由でできるようになりました。やっぱり TextExpander って便利ですよね。この便利さを皆さんと簡単に共有する方法があったら良いのに…
ソース
先ほどのソースはこちらになります。
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 |
#!/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'] photoid = ARGV[0] 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 |
Set取得を同じようにできないのか?
実は試した時にエラーが出たので出来ないと思い込んでいたのですが、エラーが出ても、ジッと我慢していると張り込まれました。こんなエラーがでるんですけどね…
どうやって使うかというと、Safariセットが表示されている状態で以下のスニペットを実行するだけです。先ほどと同じように、AppleScript としてスニペットを登録することと、 getFlickrSet.rb のパスはファイルを置いた場所に変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
on getURLFromSafari() tell application "Safari" set myURL to URL of document 1 as Unicode text end tell return myURL end getURLFromSafari set frickr_url to getURLFromSafari() set curDelim to AppleScript's text item delimiters set AppleScript's text item delimiters to "/" set node to text items of frickr_url set AppleScript's text item delimiters to curDelim set photoSetId to item 7 of node do shell script "/usr/bin/ruby /usr/local/bin/getFlickrSet.rb " & photoSetId as strings |
エラーが出てもジッと待っていると展開されます。ただ、どのくらい待ってくれるのか、などがよく分からないので、どこまで使えるかはよく分かりません。すみません。
余談
rb-appscript というライブラリが使えたら、AppleScript ではなくて Shell Script にできたので、もっとスマートになったと思うのですが、gem でインストールする時になぜかリンクに失敗するんですよね。時間がなかったので放置しちゃいましたが、いつか調べてみようと思います。どなたか情報をお持ちの方は教えてください。では、Happy TextExpander ライフを!
TextExpander for Mac (価格: ¥3,500)
カテゴリ: 仕事効率化
販売元: SmileOnMyMac, LLC
最後まで読んでいただきありがとうございます。
左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです
Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします
RSSリーダへの登録は こちら からどうぞ。
コメントを残す