«前の日記(2007年10月21日) 最新 次の日記(2007年10月25日)» 編集

混沌の庭研究所

1998|06|07|08|09|10|11|12|
1999|03|04|05|06|07|08|09|10|11|12|
2000|01|02|03|04|05|06|07|08|09|10|11|12|
2001|01|02|03|04|05|06|07|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|06|07|08|09|10|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|05|06|07|08|10|11|12|
2011|01|03|09|
2012|02|03|
2013|05|12|

2007年10月23日 火曜日 [長年日記]

_ [JavaScript] 2chリダイレクト消去Bookmarklet

夢幻交錯世界。の2007年11月16日の記事「ノイエ・2chでの画像一括ダウンロード…方法」で、えらい大昔に書いたime.nu消しブックマークレットが紹介されていました。ime.nu消しブックマークレットってのは簡単に言えば、ウェブブラウザで開いた2chのスレッドでリンクがime.nuなんかに飛ばされてしまうのを、直接開けるように書き換えるブックマークレットですな。あー……今書くと正規表現使って複数まとめるよなーと思ってちと書き直してみる。replaceの第一引数を正規表現にしてしまうのがミソですな。これで、1スクリプトでime.nu, ime.st, pinktower.comに対応。

javascript:
var L=document.links;
for (i=0;i<L.length;i++) {
	L[i].setAttribute('href',L[i].href.replace(/(ime\.(nu|st)|pinktower\.com)\//,''));
}

2chリダイレクト消去

スクリプトの右下のリンクを右クリックでブックマークに登録するか、ドラッグでツールバーに置いてやってください。なお、2006/6/7の日記に同様のスクリプトのGreasemonkey版があったりもします。

……ちょっと過去のスクリプトを見直してみたのだけど、Bookmarkletその4が動かないな? つか、最後の行がどう見てもおかしいんだが。ちゃちゃっと直したいのだけど、JavaScriptはいまいちわかってないからなー。

少し調べてみると、Bookmarklet - ブックマークレットを作成する際のポイントというページがあった。値を返さない、無名ファンクションのインスタンスを生成する、って辺りに気をつけないといけないのか。でも、逆に値を返してページ書き換えちゃうのもありだな。

_ [Perl] 2chのスレから画像ファイルっぽいURLをDLするperlスクリプト

今日は仕事で、とあるIDを与えて開かれるURLから特定のリンクを抽出して、そのリンク先から情報を抽出するperlスクリプトを作ってました。そんなわけで、そいつを応用して2chのスレから画像ファイルっぽいものをDLするperlスクリプトを作ってミタ。まあ、最近はファイルのDLはもっぱらcurlを使うし、Mac OS Xならコマンド叩いてみるのもまたヨシってことで。

#!/usr/bin/perl
# 2chのスレにある画像ファイルっぽいURLからファイルをDLするスクリプト。
# スクリプトは適当なディレクトリを作ってその中で実行すること。
# 実行したディレクトリに画像ファイルがDLされます。
# 引数は2chのスレのURL, レス番号を指定する場合は○○番以降(/100-とか)の形で。
$url = $ARGV[0];
# datファイルのURLに変換 $url =~ s/test\/read\.cgi\/([^0-9][^\/]+)\/([0-9]+)/\1\/dat\/$2.dat/;
# レス番号指定がある場合、番号を取得 if ($url =~ s/\/([0-9]+)-$//) { $count = $1; }
# datファイルを取得 system("curl -o tempfile '$url'");
# datファイルから画像のURLっぽいものを抽出 open FILE, './tempfile'; $count = $count - 1 if $count; while (<FILE>) { # レス番号指定がある場合、その番号まで空回りさせる。 if ($count) { $count = $count - 1; next; } ($dummy1, $dummy2, $dummy3, $res) = split /<>/, $_; while ($res =~ /:\/\/.*?\.(jpe*g|png|bmp)/i) { $res =~ /(:\/\/.*?\.(jpe*g|png|bmp))/i; $url = $1; push(@url, $url); $res =~ s/:\/\/.*?\.(jpe*g|png|bmp)//i; } } close FILE;
# 抽出した画像ファイルをDLする。 @url = sort @url; $last_url = ''; foreach $url (@url) { # 同じURLがあった場合はスルー。 next if $url eq $last_url; $url2 = 'http' . $url; $url2 =~ /([^\/]+\.(jpe*g|png|bmp))/i; $file_name = $1;
# 同じファイル名があった場合、拡張子の前に_を付加して別名にする。 while (-e $file_name) { $file_name =~ s/\.(jpe*g|png|bmp)/_.\1/i; } system("curl -o $file_name '$url2'"); $last_url = $url; }

pictdl.pl

以下、ざっと作業手順。

  1. スクリプトの下のpictdl.plリンクからスクリプトファイルをDLして、HOMEディレクトリに置く。上のスクリプトをテキストエディタにコピペして保存でもOK。その場合、改行コードはLFにすること。
  2. pictdl.plに実行権を付与(ターミナルを起動してchmod +x pictdl.pl(リターン)と入力)。
  3. DL用ディレクトリを作る(そのままターミナルでmkdir test1(リターン))。この場合、Finderで見るとHOMEにtest1フォルダが作られているのが見えます。
  4. カレントディレクトリを作成したディレクトリに変更(cd test1(リターン))。
  5. pictdl.plスクリプトを実行(../pictdl.pl http://pc11.2ch.net/test/read.cgi/mac/1189191200(リターン))。カレントディレクトリから見てpictdl.plの位置はひとつ上の階層になるので../pictdl.plになります。相対パスがよくわからなかったら絶対パスでもOK。

あまり動作チェックしてないから、ひょっとすると妙な動作をすることがあるかもしれません。まあ、実行ディレクトリ外に何かすることはないので、スクリプトを実行するディレクトリに気を付ければダイジョーブ。404でもかまわずファイルが保存されてしまうのはご愛敬w use strict;付いてないとかいろいろあるけど気にスンナ。