Tumblr画像をRubyでバックアップ
Tumblr画像をバックアップできないかなぁと思ってツールを探してみたのだけれどMac用しか見つからない。
なのでRubyで組んでみた。
もっとうまい組み方とかあるんだろうけどとりあえず動いたのでこれでいいかと・・・
require 'rubygems' require 'tumblr' require 'xmlsimple' require 'mechanize' #自分のTumblrアドレス tmb = 'hoge.tumblr,com' #保存先フォルダ savepath = ENV["HOME"] + 'tumblr/' #すべての登録情報をXMLに保存 Tumblr::API.read(tmb) do |pager| data = Tumblr::Data.new 0.upto(pager.last_page) do |n| puts "get #{n}/#{pager.last_page}" data << pager.page(n) end data.save(File.join(ENV["HOME"], "backup.xml")) end #保存したXMLから最大画像サイズのjpgのみ保存 agent = Mechanize.new xml = XmlSimple.xml_in(File.join(ENV["HOME"], "backup.xml")) xml['posts'].each do|psts| psts['post'].each do|pst| pst['photo-url'].each do |url| #Jpeg画像以外は取得しない unless url['content'] =~ /jpg/ #画像名取得 jpg_id = url['content'].split('/') #最大サイズ画像(width=1280)は拡張子が付いていないので保存ファイル名に付加 fname =File.join(savepath, jpg_id[jpg_id.length-1]) + '.jpg' #ダウンロード済みファイルは上書きしない unless File.exist?(fname) puts "downloading url : " + url['content'] jpg_file = open(fname, 'w') jpg_file.print agent.get_file(url['content']) jpg_file.close end end end end end
こんな感じでとりあえずバックアップができた。
ファイル名取得とかその辺はきっと正規表現とか使えばもっとスマートになるんだろうけど
まだまだ勉強中なので美しくないコードなのです
なお、Tumblrデータ取得部分はruby-tumblrをつくりました - ¬¬日常日記を参照させていただきました。