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

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

  1. 2012 年(平成 24 年)1 月、RSS を使った取得方法に変更した。
  2. 2018 年(平成 30 年)5 月、Google ニュースの仕様変更に対応し、Magpie RSS の利用を廃止した。

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

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

サンプル・プログラム

解説:検索URLの生成

0202: /**
0203:  * 無効な証明書サイトからXML取得できるようにする
0204:  * @param なし
0205:  * @return なし
0206: */
0207: function unknown_certificate() {
0208:     $context = array(
0209:         'ssl' => array(
0210:             'verify_peer' => FALSE,
0211:             'verify_peer_name' => FALSE,
0212:         )
0213:     );
0214:     libxml_set_streams_context(stream_context_create($context));
0215: }
0216: 
0217: /**
0218:  * Googleニュース検索URLを生成する(RSS2.0出力)
0219:  * @param string $query 検索キー(INTERNAL_ENCODING)
0220:  * @return string 検索URL
0221: */
0222: function getURL_GoogleNewsSearch($query) {
0223:     $query  = urlencode($query);
0224:     $url = "https://news.google.com/news/rss/headlines/section/q/{$query}/?ned=jp&hl=ja&gl=JP";
0225:     return $url;
0226: }

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

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

解説:記事の解析

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

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

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

解説:その他

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

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

活用例

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