*

RubyでFlickrの画像をまとめてダウンロード・バックアップしておく

公開日: : 最終更新日:2014/05/20 プログラミング , , ,

FlickrからのクリスマスプレゼントでProアカウントが復活してたのがこの3月で期限切れになります(した)。新生Flickrはどうなるか?と期待してたのですが、やっぱりなんだか重くていまどきのサービスとしてはいかがなものか、という気持ちが拭い切れない一方で500pxほどに敷居が高くなくてやっぱり楽しい場所ですね。

Proアカウントはオリジナルサイズのファイルにアクセスできるので、この際、全部ダウンロードしておこうと思い、またまた不慣れなプログラミングに挑戦。泥縄式なため、参考になるかどうか。。。しかし、すぐに忘れるので自分のための備忘録もかねて。

なお、記事を書くのが遅くなりすぎてしまい、クリスマスプレゼントのProアカウントはexpireしてしまってると思いますが、書きかけた記事ですのでアップしておきます。

RubyのFlickrawをインストール

sudo gem install flickraw

FlickrでAPIキーとかトークンとかをもらう流れ

これがややこしいです。

  1. ブラウザでAPIキーとシェアドシークレットを取得
  2. Rubyスクリプトで認証用URLを取得
  3. ブラウザで認証用URLにアクセスして認証用コードを取得
  4. Rubyスクリプトでアクセストークンとアクセスシークレットを取得

ブラウザでAPIキーとシェアドシークレットを取得

Flickr Servicesで「非商用」なので「APPLY FOR A NON-COMMERCIAL KEY」をクリック。

Creating an app on Flickr  Application Sharing

すると、KeyとSecretという文字列が帰ってきます。

Creating an app on Flickr  Application Sharing 1

下の方の掲載しているサンプルスクリプト中の

は、ここで取得したキーとシークレットを使います。

Rubyスクリプトで認証用URLを取得

次に認証用URLを取得するのですが、これには次のRubyスクリプトをコンソールで実行させます。

auth.rb

と返ってきます(下に続く)。こちらの画面はこのままにしておいて、次の工程です。

ブラウザで認証用URLにアクセスして認証用コードを取得

スクリプトから表示されたURL(http://〜deleteまで)をコピーし、ブラウザで開きますにアクセスすると次のような画面へと遷移します。

Flickr Authorize test

OK, I’LL AUTHORIZE ITをクリックすると、数字が返ってきます。

Rubyスクリプトでアクセストークンとアクセスシークレットを取得

Flickr Services

この数字を先ほどのコンソール画面ターミナルにペーストしてエンター。

これでようやく、トークンとシークレットも取得できました。

下の画像取得スクリプト中の

は、ここで取得したトークンとシークレットとなります。

Ruby+FlickRawで画像を取得

user_idはアカウント情報(http://www.flickr.com/account)でYour buddy iconの画像のURLに含まれている、http://l.yimg.com/g/images/buddyicon.gif#xxxxxxxx@Nxxの「xxxxxxxx@Nxx」の部分です。

base_dirは保存先ディレクトリ、url_size = ‘url_o’はオリジナルサイズのURLです。

save_file()はhttp://brly.net/blog/2012/03を参考にさせていただきました。

flickr.photosets.getListだけですと、セットに所属しないファイルのURLを取得できないので、flickr.photos.getNotInSetを使ってセットに入れていないのも取得しました。

なお、タイムアウトなどエラー処理を一切してませんので各自工夫してください(というか自分ではできなかったのと、意外にもエラーもなくサクサクと落とせました)。

Comment

  1. a より:

    久々に使ってみたら、エラーでダウンロードできません。
    重宝してるので、よかったら更新お願いします。
    RubyFlickRaw.rb:37:in block (2 levels) in fetch_photos_of_sets': undefined method url_o’ for # (NoMethodError)
    from C:/RubyFlickRaw.rb:36:in each'
    from C:/RubyFlickRaw.rb:36:in
    block in fetch_photos_of_sets’
    from C:/Program Files/Ruby-2.0.0/lib/ruby/gems/2.0.0/gems/flickraw-0.9.6/lib/flickraw/response.rb:41:in block in each'
    from C:/Program Files/Ruby-2.0.0/lib/ruby/gems/2.0.0/gems/flickraw-0.9.6/lib/flickraw/response.rb:41:in
    each’
    from C:/Program Files/Ruby-2.0.0/lib/ruby/gems/2.0.0/gems/flickraw-0.9.6/lib/flickraw/response.rb:41:in each'
    from C:/RubyFlickRaw.rb:33:in
    fetch_photos_of_sets’
    from C:/RubyFlickRaw.rb:58:in `’

  2. masaki より:

    aさん。

    コメントありがとうございます。

    Windowsで試したことがございませんでしたので、この機会にとRuby環境を作成し、試してみました。RubyはRumix 2(http://ruby.morphball.net)を使わせていただき、2.0.0p247を入れ、gem install flickrawでははaさんと同じ0.9.6が入りました。また、変数base_dirと、35行目の末尾のディレクトリ表現にスラッシュの代わりに円マーク円マークとしました。

    この環境でProアカウントを継続しているアカウントと古くからの無料アカウントの両方で動作いたしました。

    うーん、なんとか再現できないものかと今度は別のアカウントを作成してやってみましたが、url_oでのエラーが出ませんでした。というわけで、現時点で解決できず申し訳ございません。引き続き、調べてみます。

  3. a より:

    返信ありがとうございます。
    Rumix 2に入れ替えました。
    上に書いてるコードの35行目にはスラッシュは含まれていないので、おそらく34行目のことだと思いますが、
    (/[?”\\\*|]/,”_”) + ‘/’を
    (/[?”\\\*|]/,”_”) + ‘\’や’\\’にしたり
    色々試行錯誤してもエラーでダメでした。
    flickrawだけではエラーが出るので、flickraw-cachedもインストールする必要があるようです。

    rubyプログラムが動く環境の方は一緒だと思うので、windows用に編集したrbファイルの方をアップしていただき、api_keyなど必要な箇所だけ入力する形にすればフォーマットの間違えもなく確実だと思います。

    同じエラーですが、前に貼ったとき何故か最後の部分だけちゃんと張られていなかったので、念のため貼りなおします。
    $ D:\RubyFlickRaw.rb
    d:/rubyflickraw.rb:37:in block (2 levels) in fetch_photos_of_sets': undefined method url_o’ for # (NoMethodError)
    from d:/rubyflickraw.rb:36:in each'
    from d:/rubyflickraw.rb:36:in
    block in fetch_photos_of_sets’
    from C:/rumix/ruby/2.0.0/i386-mingw32/lib/ruby/gems/2.0.0/gems/flickraw-0.9.6/lib/flickraw/response.rb:41:in block in each'
    from C:/rumix/ruby/2.0.0/i386-mingw32/lib/ruby/gems/2.0.0/gems/flickraw-0.9.6/lib/flickraw/response.rb:41:in
    each’
    from C:/rumix/ruby/2.0.0/i386-mingw32/lib/ruby/gems/2.0.0/gems/flickraw-0.9.6/lib/flickraw/response.rb:41:in each'
    from d:/rubyflickraw.rb:33:in
    fetch_photos_of_sets’
    from d:/rubyflickraw.rb:58:in `’

  4. […] の通りにやって 4 つの文字列を入手しましょう。 RubyでFlickrの画像をまとめてダウンロード・バックアップしておく | 望遠鏡ドットコム それからユーザ ID も事前に調べておいてくださ […]

  5. […] ください。 詳細は前回のエントリでもご紹介した RubyでFlickrの画像をまとめてダウンロード・バックアップしておく | 望遠鏡ドットコム のエントリの通りにやるだけで大丈夫です。 準 […]

  6. masaki より:

    a様

    半年間、気になりながらも手を付けられなかったのですが、Windows環境での動作確認を別にポストいたしました。正規表現のところをちょっとかえました。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

no image
Inno Setupを利用して複数PCに同様の環境を構築する

ブラウザベースの業務の効率化のためにブックマークレットを作成したのです

no image
sacd_extractをOSXでmakeする

sacd_extractは、SACD-ISOをDSFやDIFFに展開す

サーバのPositive SSL証明書更新(2015/05版)

サーバの証明書を更新 今年もやり方を忘れていたので再録。

ドイツからMAXI-COSI PebbleとEasy Base2他を個人輸入したときの配送記録

MAXI-COSI Pebbleは国内・海外の価格差がそれほどないので

eBayのGlobal Shipping Programでの配送記録

やっぱり遅いeBayのGlobal Shipping Program

→もっと見る

    • None Found
  • Visits today: 262
PAGE TOP ↑