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

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

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

目次

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

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

サンプル・プログラム

解説:検索URLの生成

 212: /**
 213:  * 無効な証明書サイトからXML取得できるようにする
 214:  * @param   なし
 215:  * @return  なし
 216: */
 217: function unknown_certificate() {
 218:     $context = array(
 219:         'ssl' => array(
 220:             'verify_peer' => FALSE,
 221:             'verify_peer_name' => FALSE,
 222:         )
 223:     );
 224:     libxml_set_streams_context(stream_context_create($context));
 225: }

 227: /**
 228:  * Googleニュース検索URLを生成する(RSS2.0出力)
 229:  * @param   string $query 検索キー(INTERNAL_ENCODING)
 230:  * @return  string 検索URL
 231: */
 232: function getURL_GoogleNewsSearch($query) {
 233:     $query  = urlencode($query);
 234:     $url = "https://news.google.com/news/rss/headlines/section/q/{$query}/?ned=jp&hl=ja&gl=JP";
 235:     return $url;
 236: }

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

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

解説:記事の解析

 251: /**
 252:  * Googleニュースを検索し、解析結果を配列に格納
 253:  * @param   object $rss   MagpieRSSの出力
 254:  * @param   array  $items 解析結果を格納する配列
 255:  * @return  int 解析結果
 256: */
 257: function analyseGoogleNews($rss, &$items) {
 258:     $pat = '/<font\scolor\=\"#6f6f6f\">([^<]+)<\/font>/uims';
 259:     $key = 0;
 260: 
 261:     foreach ($rss->channel->item as $val) {
 262:         $items[$key]['title'] = $val->title;            //記事タイトル
 263:         $items[$key]['url'] = $val->link;               //記事URL
 264:         $items[$key]['ts'] = strtotime($val->pubDate);  //UNIX時間
 265:         $items[$key]['media'] =                         //メディア
 266:             (preg_match($pat, $val->description, $arr> 0? $arr[1: '';
 267:         $key++;
 268:     }
 269: 
 270:     return $key;
 271: }

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

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

解説:その他

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

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

活用例

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