PHPでURL上のコンテンツを読み込む

(3/3)

サンプル・プログラムの解説:ファイルを読んで記事見出しを抽出する

0038: //コンテンツを1行ずつ読み込んで処理する
0039: while (! feof($fp)) {
0040:     $s = fgets($fp);
0041:     $n = preg_match_all($Pattern$s$arPREG_SET_ORDER);
0042:     //マッチングしたすべての箇所を表示する
0043:     for ($i = 0; $i < $n$i++)     print "" . $ar[$i][2] . "<br />\n";
0044: }

テキストファイルを 1行読み込むのは、関数  fgets  である。引き数は fopen関数で取得したりソース番号 $fp だ。
読み込んだ 1行は、変数 $s に代入する。
space
このプログラムの目的は、Google News から記事見出しのみ抽出することである。
読み込んだ行には複数の見出しが含まれているが、各々は事前に設定した正規表現パターン $Pattern を有する。(これは筆者が独自に調べたもので、今後変更される可能性はある)
そこで、読み込んだ行 $s に含まれるすべての見出しパターンを抽出するために、関数  preg_match_all  を使う。
関数  preg_match_all  は、引き数の正規表現パターンに合致するすべての部分文字列を配列に格納し、合致した部分文字列の数を返す。
合致した部分文字列とは、すなわち記事見出しである。そこで、逐次、部分文字列を表示させることでプログラムの目的を達する。この作業をテキストファイルの終わりまで繰り返す。これが 38行目である。
正規表現については、「PHP で正規表現」をあわせてご覧いただきたい。
space
関数  feof  は、ファイルの終端まで来たら TRUE を、そうでなければ FALSE を返す。ここでは否定演算子 ! を付けて、ファイル終端に到達するまで while ループを回し、ファイルを読んで記事見出しを抽出・表示させる処理を続ける、という形になる。

ファイルを閉じる

0045: fclose($fp);
0046: // ここまでPHPプログラム =======================================================
0047: ?>
0048: <p><img src="http://www.google.co.jp/logos/powered_by_google_135x35.gif" /></p>
0049: </body>

fopen関数で閉じたファイルは、最後に、関数  fclose  によって閉じなければならない。
最後に、お世話になった Google のロゴを表示しておこう。

質疑応答

【質問】 smily 様より
実際に「プログラムを実行する」をしたのですが、検索結果が 0 件で、Google news よりと、システム日付、ロゴしか表示されません。
デバックしていくと、
$n = preg_match_all($Pattern, $s, $ar, PREG_SET_ORDER);
の部分で、結果が 0 件になっているようなのですが、それが原因でしょうか。正規表現にマッチするものがないのでしょうか。
お忙しいところお手数ですが、解決方法をご教授願えますでしょうか。
ちなみに環境としましては、PHP5、Apache2.2 を使用しております。
【回答】
プログラムが古く、最近の GoogleNews に対応していませんでした。
「サンプル・プログラムの解説」でも述べたように、正規表現パターンが変わっていたことと、GoogleNews自体の文字コードがシフト JIS から UTF-8 に変更されていました。
そこで、最新の GoogleNews を読み込めるようにプログラムを修正したので、どうぞお試しください。

参考書籍

参考サイト

(この項おわり)
header