選択 URL をまとめて鑑定するブックマークレット

ここでは、「選択 URL をまとめて鑑定するブックマークレット」 に関する記事を紹介しています。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
張られている URL を踏んでいいものか迷ったときはURLチェッカーをよく利用しています。 たとえばaguseソースチェッカーオンラインMcAffeさんのSiteAdvisorなど。
でも毎回毎回サイトに移動して URL を貼ったり、とメンドイ。

そこで、選択 URL をこれらでチェックするブックマークレットを作ってみた。
必要なものは javascript だけ。Flash等は使っていないので何かをインストールする必要なし。
使い方も簡単。

使い方。
1.右のリンクをブックマーク→   [まとめて鑑定!] (リンクバーへドラッグすると簡単) 
2.調べたい URL をドラッグしてがばっと選択
3.ブックマークレットを起動
4.するとURLチェッカーのウインドウが開き始める。

複数 URL の場合は「次へ」ダイアログボックスのOKボタンを適当な間隔でたたいてください。連打すると、一気にウインドウが開くことになりあちこちに負担がかかります。

練習用URL
http://www.google.co.jp/ グーグル先生にはいつもお世話になってます。
ヤフーさんはこちら http://www.yahoo.co.jp/
↑この辺を全体的に選択して、ブックマークレットをクリックしてみてください




特徴、制限、気になったことなど。
がばっと広めに選択してもOK。(選択範囲から正規表現でURLを抽出)
● ttpはhttpに自動変換。(例:ttp://google.co.jp/)
● URL中にスペースが入っていっても動作。(例:h t t p : //w w w . g o o g l e . c o . j p /)
● 選択範囲にURLが無いときは、ブックマークレットを起動しても何も起こらない
● http:://やttp://が全部省略されている場合には対応していない
選択範囲が広すぎてURLが2個以上あるときはうまくいかない
その行が URL で終わっていてかつ次の行が英数字で始まると URL の後ろにゴミがつく
● XP+SP3 の firefox 2.0.0.16 firefox3 と IE7 で動作確認。Linux の firefox 3.0.1も可だった
なのであまり広い範囲は選択しないほうが吉かも
うまく動かないときは URL だけ慎重に選択してからブックマークレットを起動すればOKだと思います

マウスの動きに敏感に反応してURLが選択しにくいとき便利、というのを想定してます。


例によってネーミングはテキトーです
アドバイスなどコメントいただければうれしいです
(とくに動作しない例を発見された場合)



関連:
Web Archiveを見るブックマークレット




一応お約束です。これは無保証です。利用される場合は自己責任で。また、URLチェッカーでチェックしたとしても絶対安全とは言い切れないので、最終的にその URL を踏むかどうかの判断も各自の責任においてお願いします


以下を参考にしました。感謝。
JavaScriptな日々:選択テキストを取得する方法

* IE6/FF2.0で動作確認済みですが、きっとNNやSafariでも動作してくれるはず。
* 動作しない場合は何も起こりません。
* 絶対パスに限らず、相対パスもおそらく可能。
* ttp://~のような先頭のh抜きは自動修正します。
* パスに\s(改行、タブ、スペースなどの空白文字)が含まれる場合、消去して解釈します。
* 多分、相対パスもいけると思われます。


http URL の正規表現
JavaScriptの技法:正規表現を学ぶ
JavaScriptで正規表現を使う
TEXTAREAにおける改行をスペースに置換するには?
ブックマークレットの文字数制限、IE 7 beta 2



自分用メモ。
Javascriptで正規表現を使うときは、やり方が大まかに二通りある。
検索対象文字列が固定の場合と変数に格納されている場合で分けて考える。

正規表現を完全なものの方にすれば変な動作も解消できるのかと思ったが、IE6だとブックマークの文字列は最大508文字なので無理だった。URLの正規表現をもっと短くできないか。もしくは前処理とか後処理をつけてへんなURLを何とかする。無理? とりあえず考え中。

IE7でブックマークレットの文字列にURLエンコードしたものが入っていると「Internet Explorer では、をダウンロードできません エラーを特定できません」と出てしまった。&とかを使うように気をつけるべき。



はじめのソース


javascript:(
 function(){
  var ss="s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+",
  rg=new RegExp(ss,"g"),
  d=document,
  w=window,
  ds=d.selection,
  ws=w.selection,
  wg=w.getSelection;  t=((ds?ds.createRange().text:ws?ws.createRange().text:wg?wg():d.getSelection?d.getSelection():'')+'')
.replace(/\s/ig,'').replace(/^ttp:/i,'h$&');
  t=t.match(rg);
  if(!!t){
   window.open('http://www.aguse.jp/?m=w&url='+t);
   window.open('http://so.7walker.net/index.php?site='+t);
  }
 }
)();





9/20改良。
● McAffeさんのSiteAdvisorも使うようにした。
● 選択範囲に複数URLが入っていた時は、一つ一つ分離する努力をしてみた。あくまで努力w
● それに伴って、チェックしてくれるサイトさんに連続アクセスが発生してしまう。これはよくないので、ダイアログを出して待ちを入れるようにした。
備忘録用のソース

javascript:(
function(){
 var%20ss=%22s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+%22,
 rg=new%20RegExp(ss,%22g%22),
 d=document,w=window,
 ds=d.selection,
 ws=w.selection,
 wg=w.getSelection,wo=window.open;
 t=((ds?ds.createRange().text:ws?ws.createRange().text:wg?wg():d.getSelection?d.getSelection():'')+'')
.replace(/\s/ig,'').replace(/^ttp:/i,'h$&').replace(/(\n|\r)/g,'%E3%81%82');
 t=t.match(rg);
 if(!!t){
  for(i=0;i<t.length;i++){
   alert('%E6%AC%A1%E3%81%B8');
   wo('http://www.aguse.jp/?m=w&url='+t[i]);
   wo('http://so.7walker.net/index.php?site='+t[i]);
   wo('http://www.siteadvisor.com/sites/'+t[i]);
  }
 }
}
)();


最初は sleep できないかと考えたけど、javascript だけの範囲で短く書けるよい方法が見つからなかった。なので使うときに手動で待つようにした。

javascript における sleep の話題について、以下の URL が非常に参考になりました。
Javascript sleep with Java applet.
JavaScriptでのSleep,Waitの実装について

9/21改良
● 改行で区切られた、ttp:で始まるURLのみが連続している場合がうまく動いてなかったので改善した。
● あまりたくさんの URL を同時に鑑定にかけると重くなるので、10個に制限をつけてみた。
備忘録用にソース残しとこ。


javascript:(
 function(){
  var ss="s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";
  rg=new RegExp(ss,"g"),
  d=document,
  w=window,
  ds=d.selection,
  ws=w.selection,
  wg=w.getSelection,
  wo=window.open;
  t=((ds?ds.createRange().text:ws?ws.createRange().text:wg?wg():d.getSelection?d.getSelection():'')+'')
.replace(/(\n|\r)/g,'あ h').replace(/\s/ig,'').replace(/^ttp:/i,'h$&');
  t=t.match(rg);
  if(!!t){
   for(i=0;i<Math.min(t.length,10);i++){
    alert('次へ');
    wo('http://www.aguse.jp/?m=w&url='+t[i]);
    wo('http://so.7walker.net/index.php?site='+t[i]);
    wo('http://www.siteadvisor.com/sites/'+t[i]);
   }
  }
 }
)();


方針の覚え書き。きれいなやり方ではないけどまぁいいや

動作の流れは次のとおり。
1.選択範囲を取得した後、改行文字を「あ h」に変換。
たとえば「http;//www.abc.co.jp/」で終わる行の次の行に「ttp://www.xyz.com」で始まるのがきてたら「http;//www.abc.co.jp/あ http://www.xyz.com」になる。ここで「あ」を入れているのはわざと。
2.スペースの除去。さっきの例では「http;//www.abc.co.jp/あhttp://www.xyz.com」となる。
3.正規表現でURLを切り出す。さっきの例では「あ」が全角文字であることがポイント。半角英数とかだとURLの一部と誤認されてしまう。

ってここまで書いてみて、別に「あ」と「h」の間にスペースは入れなくていいような気がしてきたw 1バイト削れるww

まとめると、
「http;//www.abc.co.jp/」で終わる行の次の行に「ttp://www.xyz.com」のケースは
→「http;//www.abc.co.jp/あ http://www.xyz.com」 (「改行」→「あ h」)
→「http;//www.abc.co.jp/あhttp://www.xyz.com」 (スペース除去)
→「http;//www.abc.co.jp,http://www.xyz.com」 (正規表現で分解)

ちなみに、
「http;//www.abc.co.jp/」で終わる行の次の行に「http://www.xyz.com」のケースは
→「http;//www.abc.co.jp/あ hhttp://www.xyz.com」 (「改行」→「あ h」)
→「http;//www.abc.co.jp/あhhttp://www.xyz.com」 (スペース除去)
→「http;//www.abc.co.jp,http://www.xyz.com」 (正規表現で分解)


場当たり的っぽい対処なのでうまくいかないパターンがありそうな気がする。





関連:
Web Archiveを見るブックマークレット




スポンサーサイト

関連タグ : ブックマークレット, URLチェッカー,

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://tekitobibouroku.blog42.fc2.com/tb.php/58-3ec022d0
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。