Webノウハウ

『Googleニュース用RSSジェネレータ』で収集したニュースをPHPで編集・成形してWebサイトに表示する

2017年1月31日(staff)

  このブログで以前に紹介した“『Googleニュース用RSSジェネレータ』と『単眼RSS』を使って労働関連に関る最新ニュースのコンテンツを作る”の続編です。 ニュースの表示方法をもう少しカスタマイズしたくなったので、単眼RSSを使わないやり方で編集する方法を模索しました。以下を紹介します。
 
[概要]
・googleニュースをPHPのSimpleXML拡張モジュールを使ってXMLオブジェクトに変換、さらにarray型データに変換する
・array型データの中から、Webサイトの表示に必要な項目を取り出して、htmlドキュメントを成形する

  
1.googleニュースをPHPのSimpleXML拡張モジュールを使ってxmlオブジェクトに変換、さらにarray型データに変換する


 SimpleXML拡張モジュールは、php5.0.1以上から対応しているので、最近のレンタルサーバなら殆ど利用できると思います。まず、Googleニュース用RSSジェネレータ<http://g.1o4.jp/news-rss.html>でURIを生成します。そのURIで得たデータをSimpleXMLElement、SimpleXMLIteratorを使ってarray型に変換します。というような操作が、phpマニュアルサイトの「User Contributed Notes」のコーディング例 http://php.net/manual/ja/class.simplexmliterator.phpで紹介されていましたので、参考にしました。
  
その例の中にあるxml2array()関数を使用した場合。

[PHP コーディング例]  

[crayon lang=”php”]
// 例:uriは労働運動関連ニュースを10件取得する場合
$uri = “https://news.google.com/news?ned=us&ie=UTF-8&oe=UTF-8&q=%E5%8A%B4%E5%83%8D%E3%80%80%E9%9B%87%E7%94%A8&output=atom&num=10&hl=ja”;
// この関数は、コーディング例にあるユーザ関数です。詳細は、上記のphpマニュアルサイトのリンク先で確認してください。
$rssAtomArray = xml2array($uri);
[/crayon]

  
2.array型データの中から、Webサイトの表示に必要な項目を取り出して、htmlドキュメントを成形する

[php コーディング例]

[crayon lang=”php”]
$aWork = array(); // Webサイト表示に必要な項目のみ、取り出して保持しておく領域
$aSortKey = array();// ソート用

// Webサイトの表示に必要な情報だけを取り出す
foreach ($rssAtomArray[“entry”] as $row){
$jpDate = new DateTime($row[“updated”][0]);
$jpDate->setTimezone(new DateTimeZone(“Asia/Tokyo”));
array_push($aWork, array(“updated” => $jpDate->format(“Y/m/d H:i:s”), “title” => $row[“title”], “id”=> $row[“id”]));
array_push($aSortKey, $jpDate->format(“Y/m/d H:i:s”));
}
array_multisort($aSortKey, SORT_DESC, $aWork); // ニュースは、更新日時の降順でソート。

// html成形
$cHTML = “

“;
foreach($aWork as $row) {
$cHTML .= “

“;
$cHTML .= “

“;
$cHTML .= “

“;
}
$cHTML .= “

“.$row[“updated”].”
“.$row[“title”][0].”

“;
echo $cHTML; // ブラウザに表示
[/crayon]

[説明]
googleニュースで得たarrayデータの要素(=xmlのタグ)

・"updated" :ニュースの更新日時。atom(RFC3339) 形式の世界標準時だったので日本時間に変換
・"title" :ニュースのタイトル
・"id" :ニュースのリンク先情報

これらの要素は、1.の処理の$rssAtomArrayをprint_r()で出力して、確認しました。
今回は、googleニュースの場合ですが、他のxmlオブジェクトは、違ってくるかもしれません。
後は、Webサイトに合わせて、htmlドキュメントを成形して、表示すればOKです。

余談:
XMLオブジェクトをArray型に変換する方法は、ネットで検索すると、json_decode、json_encodeを利用すると簡単にarray型に変換できる、と出てきます。試してみると、googleニュースで取得したデータは、階層が深いのか?うまく変換できませんでした。今回、紹介したSimpleXML拡張モジュールには、イテレータが用意されているので、それを使えばXMLオブジェクトのハンドリングは容易になりますね。
(結局、phpマニュアルサイトのコーディング例を参考にしちゃうんですが)

一覧表示 ▶︎ Webノウハウ, ブログ

Comments are currently closed.