JavaScriptでページ内イメージリンクを一括抽出
いろんなサイトを巡回してると、画像へのリンクと、他のサイトへのリンクが混在しているのをよく見かける。
単に画像だけ見たい私にはとってもうっとうしい。
なので、とりあえずjpegとpng形式だけだけど、こんなブックマークレットを作ってみた。
試作段階なので、単純に150x150サイズに縮小して並べているだけです。
今は、クリックすると別ウィンドウで画像が開くようになっているけど、同一画面で拡大とかできたらいいなぁ・・・
javascript:( function(d){ var a = d.getElementsByTagName("a"); var n = ''; for(var i=0;i<a.length;i++){ if (a[i].href.search(/(.jpg)|(.png)/i) != -1) { n += "<div style='float:left;'>" + "<a href='" + a[i].href + "' target='_blank'>" + "<img src='" + a[i].href + "' width='150' height='150' /></a></div>"; } } d.body.innerHTML = n; } )(document);
bookmarklet makerで簡単にブックマークレットへの変換ができるようです。
Rubyでページ内イメージリンクをまとめてTumblrにPost
あるページにたくさん画像があって、それをまとめてTumblrにポストしたいなと思って作ってみたスクリプト
require 'rubygems' require 'tumblr' require 'mechanize' #tumblrアカウント email ='foo@hoge.com' pass = 'password' #画像取得サイト siteurl = 'http://www.hogehoge.com/galleries/index.html' #相対パス用基準URL baseurl = 'http://www.hogehoge.com/galleries/' agent = Mechanize.new agent.user_agent_alias = 'Windows IE 7' agent.get(siteurl) #サイトタイトル取得 title = agent.page.title links = agent.page.links links.each do |lnk| imgurl = lnk.href if imgurl =~ /.jpg/ caption = lnk.text if caption == '' #画像にaltが設定されていなかったらページタイトルをCaptionとする caption = title end if imgurl !~ /http/ #相対URLだったら基準URLを付加する if imgurl[0,1] == '/' imgurl = imgurl[1] end imgurl = baseurl + imgurl end begin #念のためmechanizeで取得テスト agent.get(imgurl) #tumblrにアップロード Tumblr::API.write(email, pass) do photo(imgurl,caption) puts 'uploaded : ' + imgurl end rescue end end end
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をつくりました - ¬¬日常日記を参照させていただきました。