記念すべき10回目です。(笑) 今回はタイトルと投稿者名の取得に関してです。
タイトルですが、ちびぼーどにはタイトルがないのでとりあえず保留にしておきます。(^^;
投稿者名はHTML上では、
<div id="mes5" style="position:absolute;visibility:hidden;top:5">投稿者名:<font color="#fa8072">
となっています。 DIVタグとFONTタグを利用して正規表現を書けそうです。 一番考えずに済む方法はそのまま書いてしまうことです。
58行目の
s/<B>(.*?)<\/B>//; $head.="N:$1\n"; # 名前
の
/<B>(.*?)<\/B>/
の部分を書き換えます。
/<div id="mes5" style="position:absolute;visibility:hidden;top:5">(.*?):<font color="#fa8072">/
でもこれでは5番目の記事にしかマッチしません。 なぜかというと「id="mes5"」という部分が可変だからです。
/<div id="mes\d+" style="position:absolute;visibility:hidden;top:5">(.*?):<font color="#fa8072">/
というように「\d+」で数字にマッチするようにすればどうでしょう。 結果は一部の記事の投稿者名しか取得できません。 HTMLソースを記事ごとに比較してみると、フォントの色が記事ごとに違うようです。
/<div id="mes\d+" style="position:absolute;visibility:hidden;top:5">(.*?):<font color="#[^"]+">/
「<font color="#[^"]+">」として、「#」以降FONTタグの閉じ「"」が現れるまで 閉じ「"」以外の文字にマッチさせます。 これで投稿者名は全て取得できていますね。 しかし、マッチ文字列があまりに長いし、もっと柔軟性も持たせたいですね。 HTMLソースを見るとDIVとFONTの開始タグは1記事中に1度しかありません。 というわけで、タグの種類だけを判断するように書き直します。
/<div[^>]+>(.*?):<font[^>]+>/
ずいぶんとスッキリしましたね。 これでもちゃんと投稿者名を取得できます。
さて、投稿者名の取得に関してはもう1つ問題があります。 書き込んだ人のURLが入力されている場合です。 INCMの投稿者名にAタグとそれに挟まれたIMGタグが入ってしまってますね。 HTMLソースを見ると、
投稿者名(余分なタグ):
というように、投稿者名と「:」の間に余分なタグが入ってしまうようです。 現在は
/<div[^>]+>(.*?):<font[^>]+>/
としてますから、「.*?」で全ての文字を投稿者名として取得しています。 これを「<」以外にマッチさせて、「:」の前に任意の文字列としてみます。
/<div[^>]+>([^<]+).*?:<font[^>]+>/
上手く行きましたね。 問題点としては投稿者名に「<」が含まれているとまずいです。 ただ大抵のCGIはタグを使えないようにする仕様として、「<」などに 変換してることが多いと考えて今回はこのようにしました。
もう1つ問題がありまして、メールアドレスも入力できるようですね。 これが入った場合にどうなるかで、上手く行かないことがありそうです。 その辺りは次回までに調べてみます。
URLについては修正なしでも上手く取得できているみたいですね。
今回はここまでとします。次回は本文の取得とないはずのタイトルをどうするか考えていきます。