俺仕様画像抽出ブックマークレット(a,img) by fashi2 2016.01.26-

    @@ -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 です。

History

  1. 2016/01/30 04:20:30 - 2016-01-30
  2. 2016/01/30 04:04:11 - 2016-01-30
  3. 2016/01/29 16:56:53 - 2016-01-29
  4. 2016/01/29 16:51:58 - 2016-01-29
  5. 2016/01/29 16:28:01 - 2016-01-29
  6. 2016/01/29 16:06:43 - 2016-01-29
  7. 2016/01/29 05:43:34 - 2016-01-29