PHPでGoogleニュースの見出しを表示

(1/1)
Googleニュースを検索し、その結果の見出しのみを時間順・日付順に表示するプログラムを、PHPを使って作ってみることにする。

(2021年1月16日)PHP8に対応した。

目次

サンプル・プログラムの実行例

PHPでGoogleニュースの見出し表示

サンプル・プログラム

解説:検索URLの生成

0212: /**
0213:  * 無効な証明書サイトからXML取得できるようにする
0214:  * @paramなし
0215:  * @returnなし
0216: */
0217: function unknown_certificate() {
0218:     $context = array(
0219:         'ssl' => array(
0220:             'verify_peer' => FALSE,
0221:             'verify_peer_name' => FALSE,
0222:         )
0223:     );
0224:     libxml_set_streams_context(stream_context_create($context));
0225: }

0227: /**
0228:  * Googleニュース検索URLを生成する(RSS2.0出力)
0229:  * @param string $query検索キー(INTERNAL_ENCODING)
0230:  * @return string検索URL
0231: */
0232: function getURL_GoogleNewsSearch($query) {
0233:     $query  = urlencode($query);
0234:     $url = "https://news.google.com/news/rss/headlines/section/q/{$query}/?ned=jp&hl=ja&gl=JP";
0235:     return $url;
0236: }

ユーザー関数 getURL_GoogleNewsSearch は、Googleニュースの検索URLを作成する。
検索キー(変数 $query)を指定して作成する。このURLで受け取れる出力形式はRSS2.0となっている。
2018年(平成30年)1月頃にURLと仕様が変わり、件数の指定はできなくなっている。

また、プロトコルは https になったが、SSL証明書の認証が不完全であるようなので、ユーザー関数 unknown_certificate を用意し、無効な証明書サイトからでもRSSを取得できるようにしている。

解説:記事の解析

0251: /**
0252:  * Googleニュースを検索し、解析結果を配列に格納
0253:  * @param object $rss   MagpieRSSの出力
0254:  * @param array  $items 解析結果を格納する配列
0255:  * @return int 解析結果
0256: */
0257: function analyseGoogleNews($rss, &$items) {
0258:     $pat = '/<font\scolor\=\"#6f6f6f\">([^<]+)<\/font>/uims';
0259:     $key = 0;
0260: 
0261:     foreach ($rss->channel->item as $val) {
0262:         $items[$key]['title'] = $val->title;           //記事タイトル
0263:         $items[$key]['url'] = $val->link;                //記事URL
0264:         $items[$key]['ts'] = strtotime($val->pubDate);  //UNIX時間
0265:         $items[$key]['media'] =                      //メディア
0266:             (preg_match($pat$val->description$arr) > 0) ? $arr[1] : '';
0267:         $key++;
0268:     }
0269: 
0270:     return $key;
0271: }

取得したRRSフィード(XMLオブジェクト)を、一覧にしやすいように解析するのがユーザー関数 analyseGoogleNews である。

pubDate タグに記述されている日時をUNIX TIMEに変換しておく。あとで並べ替えがしやすくできるようにするためである。
また、descriptionタグ中にメディア名称が組み込まれているので、関数  preg_match  を使って分離する。

解説:その他

UNIX TIMEを日本語表示にするユーザー関数 jdate は、「PHPで日本語対応dateを作る」で作成したものである。

Googleニュースの表示フォーマットは時々変更される。
もしサンプル・プログラムが正常に動作しないようだったら、各自において手直ししていただきたい。

活用例

キーワードで読む世相:みんなの知識 ちょっと便利帳」では、このサンプル・プログラムを活用し、キーワードで簡単にニュース検索できるようにしている。ありがとうございます。
(この項おわり)
header