2008-08-28
Yahoo!フォトの画像を一括ダウンロードするためのGMスクリプト
なにをするもの?
Yahoo!フォトの画像一覧ページ(例えばココ)で実行すると、サムネイルのリンク先をオリジナルサイズの画像に変える。
このスクリプトによってリンクが書き換えられたら、flashgetなどのダウンローダにぶっこめばいい。
なお、非同期なので画像の数が多かったりサーバの応答が遅いとリンク書き換えに数秒かかるかも。
flashgetはちゃんとリンク先を画像ファイルと認識するので、まとめてダウンロードが可能。
必要なもの
- firefox(アドオンのflashgotも?)
- greasemonkeyと今回のyahoo_photos_link_original_images.user.js
- flashgetなどのダウンローダ(一括DLするため)
どうやってるか
Yahoo!フォトの画像のアドレスは拡張子のあとに呪文がついてないと開けないようになっている。
http://proxy.f3.ymdb.yahoofs.jp/users/48b5e2e1_3dd5/bc/dc7b/__hr_/e5bd.jpg?bcuMJLJBHYYK79F9
オリジナルサイズにアクセスできる呪文は一覧のページにはない。
通常サムネイルをクリックすると、小さめの画像を表示したページが開かれる。
そこで、一覧のページからGM_xmlhttpRequestでオリジナルサイズのページへアクセスして、
画像の呪文を取得し、サムネイルのリンクを書き換えている。
インストール
yahoo_photos_link_original_images.user.js
yahoo photos - direct link for Greasemonkey
新しいソースコード
Array.forEach(document.querySelectorAll('img[src*="yahoofs"]'), function(e) { var ep = e.parentNode; GM_xmlhttpRequest({ method: "GET", url: ep.href + "&.hires=t", onload: function(res) { var re = RegExp(e.src.replace(/__tn_.+/, '(?:__hr_|__sr_)[^"]+')); var newHref = re.exec(res.responseText)[0]; ep.href = newHref; } }); });
古いソースコード
// ==UserScript== // @name yahoo_photos_link_original_images // @namespace http://cherenkov.vox.com // @include http://photos.yahoo.co.jp/ph/* // ==/UserScript== (function(){ var img = document.evaluate('//img[contains(@src,"yahoofs")]', document, null, 7, null); for(var i=0;i<img.snapshotLength;i++){ var yp = (function(i){ var href = img.snapshotItem(i).parentNode.href+'&.hires=t'; GM_xmlhttpRequest({ method:"GET", url: href, headers:{ "User-Agent":"Mozilla/5.0", "Accept":"text/xml" }, onload:function(res) { var zzz = img.snapshotItem(i).src.replace('__tn_','__hr_').split(/\?/,1); var p1 = res.responseText.indexOf(zzz[0]); var tmp = res.responseText.substring(p1+zzz[0].length); var p2 = tmp.indexOf('"'); var id = tmp.substring(0,p2); if(id[0]=='?'){ //id check img.snapshotItem(i).parentNode.href = zzz[0]+id; }else{ var qqq = img.snapshotItem(i).src.replace('__tn_','__sr_').split(/\?/,1); var p1 = res.responseText.indexOf(qqq[0]); var tmp = res.responseText.substring(p1+qqq[0].length); var p2 = tmp.indexOf('"'); var id = tmp.substring(0,p2); img.snapshotItem(i).parentNode.href = qqq[0]+id; } } }); })(i); } })();
もごもごしている
responseTextからidを抽出するところをすっきりさせたい。
近いもの
トラックバック - http://d.hatena.ne.jp/Cherenkov/20080828/p1
リンク元
- 988 http://timecapture.blog46.fc2.com/blog-entry-43.html
- 720 http://timecapture.blog46.fc2.com/blog-entry-40.html
- 467 http://www.coza4.com/wp/?p=464
- 48 http://userscripts.org/scripts/show/89744
- 37 http://search.yahoo.co.jp/search?p=yahooフォト+一括&ei=UTF-8&fr=slv1-tbtop&x=wrt&meta=vc=
- 30 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP276JP276&q=capsule CM
- 29 http://www.google.co.jp/search?q=yahooフォト+ダウンロード&hl=ja&lr=&sa=2
- 27 http://www.google.co.jp/search?q=yahoo_photos_link_original_images.user.js &lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 26 http://search.yahoo.co.jp/search?p=yahoo!フォト 一括ダウンロード&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 22 http://search.yahoo.co.jp/search?p=ヤフーフォト+一括ダウンロード&ei=UTF-8&fr=top_ga1_sa&x=wrt&meta=vc=