「flickr.dms」の版間の差分
提供: Yourpedia
細 (ユーザ名にハイフンが入る場合に対応) |
細 (Mario Yonezawa (トーク) による編集を Abcdefgh による直前の版へ差し戻しました) |
||
(2人の利用者による、間の14版が非表示) | |||
1行目: | 1行目: | ||
− | [[Irvine]]を使って[[Flickr]] | + | [[Irvine]]を使って[[Flickr]]の静止画を落とすためのスクリプト(動画には非対応)。「All Sizes」のページが無かったり、有っても「The owner has disabled downloading of their photos」(本オーナーは本画像のDLを拒否する)の標記が有る画像<del>には使えない</del>にも使える(出来るだけ大きい画像、VGA~XGA、2012年12月以降に送信された画像は最大長辺2048ピクセルまで)(2007年2月28日以前に送信された画像はほぼ無条件に本画像をDLする)様に改良。 |
− | #[ | + | #[http://mxmkitchen.com/2009/03/13/2357.php ここ]からIrvineとDorothy2.zipをDL、インストールする |
#「(Irvineが有るフォルダ)¥Dorothy2¥program¥flickr.dms」を以下の内容で上書きする | #「(Irvineが有るフォルダ)¥Dorothy2¥program¥flickr.dms」を以下の内容で上書きする | ||
#Irvineを起動後、上記サイトに出てる設定を行う | #Irvineを起動後、上記サイトに出てる設定を行う | ||
8行目: | 8行目: | ||
//Dorothy2 | //Dorothy2 | ||
//caption=Flickr | //caption=Flickr | ||
− | //version=0. | + | //version=0.08 |
//hint=「All Sizes」ボタンがあるページのURLを渡してください | //hint=「All Sizes」ボタンがあるページのURLを渡してください | ||
− | //match= | + | //match=https?://www.flickr.com/photos/ |
//author=nanasi | //author=nanasi | ||
//path=program | //path=program | ||
19行目: | 19行目: | ||
//modified 21,Dec.,2010 by Abcdefgh | //modified 21,Dec.,2010 by Abcdefgh | ||
//modified 23,Dec.,2010 by Abcdefgh | //modified 23,Dec.,2010 by Abcdefgh | ||
+ | //modified 09,Jan.,2011 by Abcdefgh | ||
+ | //modified 30,Jan.,2011 by Abcdefgh | ||
+ | //modified 2,Apr.,2011 by Abcdefgh | ||
+ | //modified 1,Oct.,2013 by Abcdefgh | ||
+ | //modified 25,Apr.,2015 by Abcdefgh | ||
function(){ | function(){ | ||
println('flickr.dms start'); | println('flickr.dms start'); | ||
− | // 渡されたURLをALL | + | // 渡されたURLをALL SIZESページのURLに変換 |
− | var title = urlinfo.url | + | var title = urlinfo.url.match(/.+photos\/[^\/]+\/[0-9]+/)[0]; |
− | + | if (!title) { | |
− | println('error---> | + | println('error---> ALL SIZESページURLが見つかりません'); |
exit(); | exit(); | ||
} | } | ||
− | + | title2 = title + '/sizes/o'; | |
− | + | title3 = title + '/sizes/k'; | |
− | + | title4 = title + '/sizes/h'; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | var url = new URL( | + | var url = new URL(title2); |
urlinfo.url = url.url; | urlinfo.url = url.url; | ||
headers.host = url.host; | headers.host = url.host; | ||
− | // ALL | + | // ALL SIZESページをダウンロード |
common_load('download'); | common_load('download'); | ||
var http = download(urlinfo.url); | var http = download(urlinfo.url); | ||
48行目: | 49行目: | ||
} | } | ||
if(http.responseHeader.code == 302){ | if(http.responseHeader.code == 302){ | ||
− | + | var url = new URL(title3); | |
− | var url = new URL( | + | |
urlinfo.url = url.url; | urlinfo.url = url.url; | ||
headers.host = url.host; | headers.host = url.host; | ||
+ | |||
+ | // 最大画素数プレビューページをダウンロード | ||
common_load('download'); | common_load('download'); | ||
var http = download(urlinfo.url); | var http = download(urlinfo.url); | ||
− | if(http.responseHeader.code != 200){ | + | if( (http.responseHeader.code != 200) && (http.responseHeader.code != 302) ){ |
return retry('error--->' + http.responseHeader.code); | return retry('error--->' + http.responseHeader.code); | ||
+ | } | ||
+ | if(http.responseHeader.code == 302){ | ||
+ | var url = new URL(title4); | ||
+ | urlinfo.url = url.url; | ||
+ | headers.host = url.host; | ||
+ | |||
+ | // 最大画素数(1600)プレビューページをダウンロード | ||
+ | common_load('download'); | ||
+ | var http = download(urlinfo.url,true); | ||
+ | if(http.responseHeader.code != 200){ | ||
+ | return retry('error--->' + http.responseHeader.code); | ||
+ | } | ||
} | } | ||
} | } | ||
//画像URLを取得 | //画像URLを取得 | ||
− | if (!http.data.match(/<a href=\"([^"]+_?[ | + | if (!http.data.match(/<a href=\"([^"]+_?[mbhkoz]?_d[.][^"]+)/)) { |
// このページはオリジナルサイズではない | // このページはオリジナルサイズではない | ||
− | if (!http.data.match(/<img src=\"([^"]+farm[^"]+)/)) { | + | if (!http.data.match(/<img src=\"([^"]+(static|farm)[^"]+)/)) { |
println('error---> 大きなサイズの画像が見つかりません'); | println('error---> 大きなサイズの画像が見つかりません'); | ||
exit(); | exit(); | ||
69行目: | 83行目: | ||
var title=RegExp.$1; | var title=RegExp.$1; | ||
− | if ( (!title.match(/_[ | + | if ( (!title.match(/_[mbdhkoz][.]/)) ){ |
− | var | + | var title = title.replace(/[.]jpg/ , "_z.jpg"); |
− | + | ||
} | } | ||
− | + | //単純変換が可能か否かを調査 | |
− | + | var title2 = title.replace(/(_[mbhkoz])?((_d)?[.][^\/]+)$/ , "_o$2"); | |
− | + | var url = new URL(title2); | |
− | + | urlinfo.url = url.url; | |
− | + | headers.host = url.host; | |
− | } | + | var rHeader = new Object; |
− | + | rHeader['bytesRead'] = 1024; | |
+ | common_load('test2_download'); | ||
+ | var http = test2_download(urlinfo.url,false,rHeader); | ||
+ | if( (http.responseHeader.code != 200) && (http.responseHeader.code != 302) ){ | ||
+ | return retry('error--->' + http.responseHeader.code); | ||
+ | } | ||
+ | if(http.responseHeader.code != 302){ | ||
+ | title=title2; | ||
} | } | ||
var url = new URL(title); | var url = new URL(title); | ||
− | |||
urlinfo.url = url.url; | urlinfo.url = url.url; | ||
headers.host = url.host; | headers.host = url.host; | ||
− | if (!title.match(/[^ | + | //ファイル名を抽出 |
− | println('error---> | + | if (!title.match(/([^\/?]+)([?].+)?$/)) { |
+ | println('error---> ファイル名が見つかりません'); | ||
exit(); | exit(); | ||
} | } | ||
− | + | Dorothy.fileName = RegExp.$1; | |
− | + | ||
− | + | ||
− | + | ||
} | } | ||
</nowiki></pre> | </nowiki></pre> | ||
[[Category:Irvine用スクリプト]] | [[Category:Irvine用スクリプト]] |
2019年2月8日 (金) 21:03時点における最新版
Irvineを使ってFlickrの静止画を落とすためのスクリプト(動画には非対応)。「All Sizes」のページが無かったり、有っても「The owner has disabled downloading of their photos」(本オーナーは本画像のDLを拒否する)の標記が有る画像には使えないにも使える(出来るだけ大きい画像、VGA~XGA、2012年12月以降に送信された画像は最大長辺2048ピクセルまで)(2007年2月28日以前に送信された画像はほぼ無条件に本画像をDLする)様に改良。
- ここからIrvineとDorothy2.zipをDL、インストールする
- 「(Irvineが有るフォルダ)¥Dorothy2¥program¥flickr.dms」を以下の内容で上書きする
- Irvineを起動後、上記サイトに出てる設定を行う
- 後は上記サイトの説明通り
//Dorothy2 //caption=Flickr //version=0.08 //hint=「All Sizes」ボタンがあるページのURLを渡してください //match=https?://www.flickr.com/photos/ //author=nanasi //path=program //priority=500 //end //rebooted 17,Dec.,2010 by Abcdefgh //modified 18,Dec.,2010 by Abcdefgh //modified 21,Dec.,2010 by Abcdefgh //modified 23,Dec.,2010 by Abcdefgh //modified 09,Jan.,2011 by Abcdefgh //modified 30,Jan.,2011 by Abcdefgh //modified 2,Apr.,2011 by Abcdefgh //modified 1,Oct.,2013 by Abcdefgh //modified 25,Apr.,2015 by Abcdefgh function(){ println('flickr.dms start'); // 渡されたURLをALL SIZESページのURLに変換 var title = urlinfo.url.match(/.+photos\/[^\/]+\/[0-9]+/)[0]; if (!title) { println('error---> ALL SIZESページURLが見つかりません'); exit(); } title2 = title + '/sizes/o'; title3 = title + '/sizes/k'; title4 = title + '/sizes/h'; var url = new URL(title2); urlinfo.url = url.url; headers.host = url.host; // ALL SIZESページをダウンロード common_load('download'); var http = download(urlinfo.url); if( (http.responseHeader.code != 200) && (http.responseHeader.code != 302) ){ return retry('error--->' + http.responseHeader.code); } if(http.responseHeader.code == 302){ var url = new URL(title3); urlinfo.url = url.url; headers.host = url.host; // 最大画素数プレビューページをダウンロード common_load('download'); var http = download(urlinfo.url); if( (http.responseHeader.code != 200) && (http.responseHeader.code != 302) ){ return retry('error--->' + http.responseHeader.code); } if(http.responseHeader.code == 302){ var url = new URL(title4); urlinfo.url = url.url; headers.host = url.host; // 最大画素数(1600)プレビューページをダウンロード common_load('download'); var http = download(urlinfo.url,true); if(http.responseHeader.code != 200){ return retry('error--->' + http.responseHeader.code); } } } //画像URLを取得 if (!http.data.match(/<a href=\"([^"]+_?[mbhkoz]?_d[.][^"]+)/)) { // このページはオリジナルサイズではない if (!http.data.match(/<img src=\"([^"]+(static|farm)[^"]+)/)) { println('error---> 大きなサイズの画像が見つかりません'); exit(); } } var title=RegExp.$1; if ( (!title.match(/_[mbdhkoz][.]/)) ){ var title = title.replace(/[.]jpg/ , "_z.jpg"); } //単純変換が可能か否かを調査 var title2 = title.replace(/(_[mbhkoz])?((_d)?[.][^\/]+)$/ , "_o$2"); var url = new URL(title2); urlinfo.url = url.url; headers.host = url.host; var rHeader = new Object; rHeader['bytesRead'] = 1024; common_load('test2_download'); var http = test2_download(urlinfo.url,false,rHeader); if( (http.responseHeader.code != 200) && (http.responseHeader.code != 302) ){ return retry('error--->' + http.responseHeader.code); } if(http.responseHeader.code != 302){ title=title2; } var url = new URL(title); urlinfo.url = url.url; headers.host = url.host; //ファイル名を抽出 if (!title.match(/([^\/?]+)([?].+)?$/)) { println('error---> ファイル名が見つかりません'); exit(); } Dorothy.fileName = RegExp.$1; }