俺仕様画像抽出ブックマークレット(a,img) by fashi2 2016.01.26-
by
fashi
2016-01-30 [2016/01/30 04:20:30]
動作選択式(XPath抽出、正規表現フィルタ、新窓)
@@ -1,73 +1,73 @@
/*
- * @title 俺仕様画像抽出ブックマークレット(a,img) by fashi2
- * @description 動作選択式(抽出タグ、正規表現フィルタ、新窓)+XPathで画像リンクと非リンク画像の混在抽出
+ * @title 俺仕様画像抽出ブックマークレット(a,img) by fashi2 2016.01.26-
+ * @description 動作選択式(XPath抽出、正規表現フィルタ、新窓)
* @include http://*
* @license MIT License
* @require
* @javascript_url
*/
+
(function(){
-var a,i=0,j=0,k=0,l,m,e,t,tp,s="",u="",w,d,e,v="",sp;
-var tag = prompt("mode [a|img|special|xpath]","special");
-var dp = new Object();
-
-if (tag=='special') {
- var xp=prompt("xpath prefix\nex.\n//div[contains(@class,'entry-content')]\n//div[contains(@class,'permalink-tweet')]","//body");
- //imgタグを囲むaタグとaタグに囲まれてないimg
- sp=document.evaluate(xp+'//a[(child::img)]/@href|'+xp+'//img[not(ancestor::a)]/@src', document, null, 7, null);
- //TODO: css/background-image, text-link, both href & img
- for(k=0;k<sp.snapshotLength;k++){
- dp[sp.snapshotItem(k).nodeValue]=1;
+
+ var a,i=0,j=0,k=0,l,m,e,t,tp,s="",u="",w,d=document,e,v="",sp,xp,pf="",n=null,et="",br="<br /><br /><br />",ln;
+ var dp = new Object();
+ var tag = prompt("mode [a|img|external|mix|xpath]","mix");
+ switch(tag){
+ case 'a': /* aタグ */
+ xp='//a/@href';
+ break;
+ case 'external': /* imgを囲むリンク */
+ case 'mix': /* imgを囲むリンクとリンクに囲まれてないimg */
+ pf=prompt("xpath prefix\nex.\n//div[contains(@class,'entry-content')]\n//div[contains(@class,'permalink-tweet')]","//body");
+ xp=pf+'//a[(child::img)]/@href';
+ if (tag=='mix') xp+='|'+pf+'//img[not(ancestor::a)]/@src';
+ break;
+ case 'xpath': /* XPath */
+ xp=prompt("xpath (nodeValue)","//body//img/@src");
+ break;
+ default:
+ xp='//'+tag+'/@src'; /* 任意タグのsrc */
+
+ /* TODO: css/background-image, text-link, both href & img */
}
-}
-else if (tag=='xpath') {
- var xp=prompt("xpath (nodeValue)","//body//img/@src");
- sp=document.evaluate(xp, document, null, 7, null);
+ sp=document.evaluate(xp,d,n,7,n);
for(k=0;k<sp.snapshotLength;k++){
dp[sp.snapshotItem(k).nodeValue]=1;
}
-}
-else {
- a=document.getElementsByTagName(tag);
- while (e=a[i++]) {
- if (tag == 'a'){ tp=e.href; } else { tp=e.src; }
- dp[tp]=1;
- }
-}
-var f = new RegExp(prompt("filter (regexp)","\.(jpg|jpeg|gif|png)$"),'i');
-var keys=Object.keys(dp);
-for(j=0, l=keys.length; j<l; j+=1) {
- t=keys[j];
- if(!t.match(f)){
- continue;
- }
- if (t.match(/twimg\.com\/media\/([^\:]+)/i)) {
- //TODO: trim ':large'
- s += "<a href='"+t+":orig' download='"+RegExp.$1+"'>"+RegExp.$1+"</a><br />\n";
- v += "<a href='"+t+":orig' download='"+RegExp.$1+"' target='_blank'><img src='"+t+":orig' width=200 height=200 /></a> ";
- u += t+"\n";
+ var f = new RegExp(prompt("filter (regexp)",'\.(jpg|jpeg|gif|png)$'),'i');
+ var keys=Object.keys(dp);
+ for(j=0, l=keys.length; j<l; j+=1) {
+ t=keys[j];
+ if(!t.match(f)){
+ continue;
+ }
+ if (t.match(/(http.+twimg\.com\/media\/)([^:\/]+)/i)) {
+ ln = '<a href="'+RegExp.$1+RegExp.$2+':orig" download="'+RegExp.$2+'" target="_blank">';
+ s += ln+RegExp.$2+"</a><br />\n";
+ v += ln+'<img src="'+RegExp.$1+RegExp.$2+':orig" width=200 height=200 /></a> ';
+ u += t+"\n";
+ }
+ else {
+ ln = '<a href="'+t+'" target="_blank">';
+ s += ln+t+"</a><br />\n";
+ v += ln+'<img src="'+t+'" width=200 height=200 /></a> ';
+ u += t+"\n";
+ }
+ }
+ if (u) {
+ if (confirm("thumbnail?")) et+="<div style='float:left'>"+v+"</div>";
+ et+="<div style='clear:left'>"+br+s+"</div>";
+ if(confirm("new window ?")){
+ window.open("data:text/html,"+encodeURIComponent("<html><head><title>Images</title></head><body>"+br+et+br+"</body></html>"),"_blank");
+ } else {
+ d.body.innerHTML += br+"<hr />"+br+et+br;
+ }
+
+ if(_jsaCScript){ if(confirm("copy?")) _jsaCScript.setClipBoardString(u); }
}
else {
- s += "<a href='"+t+"'>"+t+"</a><br />\n";
- v += "<a href='"+t+"' target='_blank'><img src='"+t+"' width=200 height=200 /></a> ";
- u += t+"\n";
- }
-}
-if (u) {
- if (tag=='xpath' && !xp.match(/img/)) { v=""; }
- var ent="<div style='float:left;'>"+v+"</div><div style='clear:left;'><br /><br /><br />"+s+"</div>";
- if(confirm("new window ?")){
- window.open("data:text/html,"+encodeURIComponent("<html><head><title>Images</title></head><body><br /><br />"+ent+"<br /><br /></body></html>"),"_blank");
- } else {
- document.body.innerHTML += "<br /><hr /><br /><br /><br />"+ent+"<br /><br /><br />";
+ alert('none');
}
- /*
- if(confirm("copy?")) _jsaCScript.setClipBoardString(u); //JSActions
- */
-}
-else {
- alert('none!');
-}
-})();
+})();
/*
* @title 俺仕様画像抽出ブックマークレット(a,img) by fashi2 2016.01.26-
* @description 動作選択式(XPath抽出、正規表現フィルタ、新窓)
* @include http://*
* @license MIT License
* @require
* @javascript_url
*/
(function(){
var a,i=0,j=0,k=0,l,m,e,t,tp,s="",u="",w,d=document,e,v="",sp,xp,pf="",n=null,et="",br="<br /><br /><br />",ln;
var dp = new Object();
var tag = prompt("mode [a|img|external|mix|xpath]","mix");
switch(tag){
case 'a': /* aタグ */
xp='//a/@href';
break;
case 'external': /* imgを囲むリンク */
case 'mix': /* imgを囲むリンクとリンクに囲まれてないimg */
pf=prompt("xpath prefix\nex.\n//div[contains(@class,'entry-content')]\n//div[contains(@class,'permalink-tweet')]","//body");
xp=pf+'//a[(child::img)]/@href';
if (tag=='mix') xp+='|'+pf+'//img[not(ancestor::a)]/@src';
break;
case 'xpath': /* XPath */
xp=prompt("xpath (nodeValue)","//body//img/@src");
break;
default:
xp='//'+tag+'/@src'; /* 任意タグのsrc */
/* TODO: css/background-image, text-link, both href & img */
}
sp=document.evaluate(xp,d,n,7,n);
for(k=0;k<sp.snapshotLength;k++){
dp[sp.snapshotItem(k).nodeValue]=1;
}
var f = new RegExp(prompt("filter (regexp)",'\.(jpg|jpeg|gif|png)$'),'i');
var keys=Object.keys(dp);
for(j=0, l=keys.length; j<l; j+=1) {
t=keys[j];
if(!t.match(f)){
continue;
}
if (t.match(/(http.+twimg\.com\/media\/)([^:\/]+)/i)) {
ln = '<a href="'+RegExp.$1+RegExp.$2+':orig" download="'+RegExp.$2+'" target="_blank">';
s += ln+RegExp.$2+"</a><br />\n";
v += ln+'<img src="'+RegExp.$1+RegExp.$2+':orig" width=200 height=200 /></a> ';
u += t+"\n";
}
else {
ln = '<a href="'+t+'" target="_blank">';
s += ln+t+"</a><br />\n";
v += ln+'<img src="'+t+'" width=200 height=200 /></a> ';
u += t+"\n";
}
}
if (u) {
if (confirm("thumbnail?")) et+="<div style='float:left'>"+v+"</div>";
et+="<div style='clear:left'>"+br+s+"</div>";
if(confirm("new window ?")){
window.open("data:text/html,"+encodeURIComponent("<html><head><title>Images</title></head><body>"+br+et+br+"</body></html>"),"_blank");
} else {
d.body.innerHTML += br+"<hr />"+br+et+br;
}
if(_jsaCScript){ if(confirm("copy?")) _jsaCScript.setClipBoardString(u); }
}
else {
alert('none');
}
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。