読者です 読者をやめる 読者になる 読者になる

やっつけ仕事スクリプト・ID検索君作成

友達がブログをココログに移転したということですが、IDのヒントのみでなかなか移転先URLを教えてくれませんorz。なので、ちょっくらやっつけ仕事スクリプトを作ってみることに。


このスクリプト中でやっていることは、

  1. IDを列挙したファイルを読み込んで
  2. 各IDとURLを連結してHEAD送信し
  3. HTTPステータスが200だったら「○」を、それ以外だったら「×」を
  4. 最後に結果を同じファイルに書き込む

と至極単純なもの。

大まかな方針は↑のような感じですが、作業中に若干躓いたところ。

HTTPコマンド
HEADの送信は、lwp-requestのaliasで手軽に。ってか、最初コマンドラインでいろいろ検証してたのをそのままプログラムコードに落としただけで、あんまり考えてませんw
/dev/nullの入力
認証を必要とするURLだった場合はIDとパスワードを標準入力から読むようになっているので、一律空ファイルである「/dev/null」を入力として食わせています。こうやると、Authorization Errorで落ちるけどそれはそれでOK。
改行コード
ちょっとはまった。Cygwin上でスクリプト実行しているのですが、文字列検索の際に改行コードが邪魔してうまく動きませんでした。改行コードをUnix (LF) にすると望みどおりの動作に。


実際のコードは以下の通り。

#!/usr/bin/perl
use warnings;
use strict;

my $file;
my @user_list;
my @user;
my %result;
my @response;

$file = shift @ARGV;

### ファイルの読込
open  USER, "< $file" or die "Cannot Read File: $!";
@user_list = <USER>;
close USER;

### HTTPステータスコードの判定
for (@user_list) {
  chomp;
  @user = split /,/;
  next if $result{$user[0]} = $user[1]; # 判定済みならば次のループパスへ

  @response = `head http://$user[0].cocolog-nifty.com/blog/ < /dev/null`;
  $result{$user[0]} = index($response[0], '200') >= 0 ? '○' : '×';
  print "[$user[0]] is found!\n" if $result{$user[0]} eq '○';
}

### ファイルの書込
open  USER, "> $file" or die "Cannot Write File: $!";
for (sort keys(%result)) {
  print USER "$_,$result{$_}\n";
}
close USER;

で、このスクリプトに食わせるファイルは、思い当たるIDを適当に列挙。

hoge, ×
fuge
fuga

これを、先ほどのスクリプトに食わせると、

fuga, ×
fuge, ○
hoge, ×

といった感じで、存在したID (URL) ならば「○」が帰ってくるというわけ。

後から検索しやすいように、出力はIDでソートするようにしています。それとパフォーマンスを高めるために、既に結果を判定済みのものは除外して、結果未判定(○・×双方ついていない)IDだけ判定するように。


ま、結論としては色々な意味で全然ダメでしたが><

なかなか集中できず&勘が取り戻せてないのもあって、たったこれだけのスクリプトを作成する時間に数時間を費やしてしまいました。にも関わらず、60件ぐらいで試したところでIDがもう思い浮かびません。ID自動生成&自動検証も考えたけど、それはそれで大変そうだったので断念。

そろそろおせーてくださいな・・・ >U16な人