今回から実践編です。
ISLANDプラグインを改造して、ちびぼーど用プラグインを作成します。
動作確認用にちびぼーどを設置しましたのでご利用下さい。
まずはISLANDプラグインをコピーして名前を変更します。 私は「cm_ChibiBoard.pl」などとしてみました。 次にフォルダプロパティに表示されるプラグイン情報を書き換えます。 「cm_ChibiBoard.pl」を開いて下さい。
1〜2行目
##### INCM plug-in for Island (http://www.island.ne.jp/) #### Ver0.10a 2000/4/18 by 一 五明
となっているのを
##### INCM plug-in for ちびぼーど (http://homepage2.nifty.com/nejifactory) #### Ver0.01 2002/06/13 by GETWILD'74 ### 一 五明さんのIsland用を改造しました。
のように修正して下さい。
INCM plug-in for の後ろの部分が対応として表示されます。
Verのところがバージョンとして表示されます。
by の後ろの部分が作者として表示されます。
作者のところには自分の名前を入れてみましょう。
3行目に追加されてるのはベースとなったプラグインの説明です。
これを保存したら、実際に表示されるか確認してみます。 ちびぼーど巡回用にフォルダを作成して下さい。 私は「ちびぼーど」という名前のフォルダを作ってみました。 さっそくプロパティダイアログを開いて「ChibiBoard」プラグインを選んでみます。 すると基本設定タブのプラグイン情報に先程書き換えた情報が表示されてるはずです。
それでは巡回設定のURL欄に 「http://www3.wind.ne.jp/getwild/Program/PluginLecture/Chibi/chibiboard.cgi」 と入れてとりあえず巡回を実行してみます。
私の環境では記事が一つだけ取得されましたが、正しい結果ではないです。 ツリーの「+」を押してちびぼーどフォルダを展開してみて下さい。 ?アイコンで「LOG」という名前のものが表示されてますね。 SHIFTキーを押しながらこれをクリックしてみて下さい。 何も出ない場合は一度きちんと記事の表示される別のフォルダで 記事を表示してからクリックしてみて下さい。 HTTPヘッダを含んだHTML文が表示されると思います。 これを見て記事の区切りを考えてみましょう。
記事の部分は
<div id="mes9" style="position:absolute;visibility:hidden;top:5">投稿者名:<font color="#808000">本文</font> 04/27(Sat)21:49[36]</div>
という一行で表されてます。 改行ごとに区切れば良さそうです。
43行目を
$/="\n<A NAME=\"";
から
$/="\n";
に変えて、
45行目の
print LOG $_;
を
print LOG "\n--------------\n$_\n--------------\n";
に変えます。 43行目の変更はHTMLを読み込んでくる区切りを改行にしています。 45行目はあとで区切りが成功しているか確認するために「LOG.HTM」に 書き出す内容に手を加えてみました。 さっそく巡回して、LOGを表示してみましょう。
-------------- <div id="mes27" style="position:absolute;visibility:hidden;top:5">投稿者名:<font color="#ff8c00">本文</font> 04/20(Sat)23:41[18]</div> -------------- -------------- <div id="mes28" style="position:absolute;visibility:hidden;top:5">投稿者名:<font color="#fa8072">本文</font> 04/20(Sat)23:08[17]</div> --------------
のようになりましたか? 「--------------」で囲まれた部分に1記事だけ入っていれば成功です。
巡回した時に巡回ウィンドウの記事を示す「*」が並んで表示されたのは 確認できたでしょうか? これを見ると日付からの記事の認識も上手くいっているようです。
でも相変わらず取得できるのは1記事だけですね。 この取得できた記事の記事番号を見ると「0」になってますね。 そんな記事番号はないはずなので、認識された全ての記事の記事番号が 取得されずに「0」になっているために取得できたのに1記事に上書き されてしまうようです。
プラグイン内で記事番号を取得してる部分を見てみましょう。 52行目の
/^(\d+)\">/; $num=$1;
の部分で取得しています。
ちびぼーどのHTMLを見てみると、最後の「</div>」の前の「[数字]」が 連番になっているので記事番号だと考えられます。 ということは「^(\d+)\">」という正規表現ではダメですね。 まず「</div>」が現れることが条件になりますね。
/<\/div>/;
次に[]で囲まれた数字に一致させます。
/\[\d+\]<\/div>/;
[]は特別な意味があるので「\」でエスケープする必要がありましたね。 「\d」は数字にマッチし、「+」で1つ以上の数字にマッチさせます。 これで、「[1]</div>」でも「[123]</div>」でもマッチできます。 でもこれでは不完全です。 マッチ後に「$num=$1;」とあるように「$1」に代入させなければいけません。 そうしないとマッチしただけで記事番号を取得できないからです。
/\[(\d+)\]<\/div>/;
のように数字を示す部分を()で囲めばいいんでしたね。 これで「$1」に記事番号が代入されます。
では試しに巡回してみましょう。 どうですか、不完全ですが記事は一応取得されているはずです。
今回はここまでとします。 45行目は
print LOG $_;
に戻しておいて下さい。
次回は今回ではまだ不完全だった部分について考えていきます。