RSSを利用する

1.RSSの内容(例)

 RSS(Rich Site Summary)とは
   ウェブサイトやブログの更新情報を配信する仕組み

 以下は河内長野市役所が「新着更新情報」として公開している内容

新着情報(例)
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xml:lang="ja">
<channel rdf:about="">
<title>河内長野市役所RSS(新着更新情報)</title>
<link/>
<description>河内長野市役所からの情報をRSSで配信</description>
<dc:date>2024-04-07 00:00:00+09:00</dc:date>
<dc:creator/>
<dc:subject/>
<dc:rights>Copyright c Kawachinagano City. All Rights Reserved.</dc:rights>
<sy:updatePeriod>weekly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<items>
<rdf:Seq>
<rdf:li rdf:resource="https://www.city.kawachinagano.lg.jp/soshiki/47/96528.html"/>

  (途中省略)

</rdf:Seq>
</items>
</channel>
<!--  ENTRIES  -->
<item rdf:about="https://www.city.kawachinagano.lg.jp/soshiki/47/96528.html">
<title>ミニバスケットボールで活躍</title>
<link>https://www.city.kawachinagano.lg.jp/soshiki/47/96528.html</link>
<description>ミニバスケットボールで活躍</description>
<dc:date>2024-04-07T00:00:00+09:00</dc:date>
<dc:subject>市民スポーツ課</dc:subject>
</item>

  (途中省略)

<!--  /ENTRIES  -->
</rdf:RDF>

2.RSSの読み込み(例)

 XMLで構成されているので読み込んで10件だけ表示する
   「SimpleXML」という拡張機能を使ってPHPで読み込む

<?php
  	 $url = "http://www.city.kawachinagano.lg.jp/feed.xml?type=rss_2.0";  
	 $data = "";
	 $cp = curl_init();
	 curl_setopt($cp, CURLOPT_RETURNTRANSFER, 1);
	 curl_setopt($cp, CURLOPT_URL, $url);
	 curl_setopt($cp, CURLOPT_TIMEOUT, 60);
	 $data = curl_exec($cp);
	 curl_close($cp);

	 $rss = simplexml_load_string($data);  

	 $i = 0;

if ($rss)
  {
	 foreach ($rss->channel->item as $item)
		 {
/*		
		  print_r ($item);		 
*/
		  $title	= $item->title;
		  $link 	= $item->link;
		  $desc 	= $item->description;	
		  $date 	= date("Y年n月j日(D)",strtotime($item->pubDate));
		  if (strlen($item->description) == 0)
		    {
		      $desc = " ";
		    }	  	  
		  $rsslines = "<a href=$link target='_blank' title=$title>$title</a>";
		  echo "<li>{$rsslines}</li><dd>        {$desc}</dd><dd>        {$date}</dd>\n<br>";
		  $i = $i +1;		  
		  if ($i >= 10)
		    {
		      break;
		    }
		 }		 
  }
else
  {
 	echo "<dt>市役所の更新結果を取得できていません<br />長引く場合には連絡をください:<br />$url</dt>\n";
  }
?>
行番号説明
4〜9指定したURLの情報を取得する
 curl_init()  セッションを初期化
 curl_setopt 転送用オプションを指定する
         実行結果を返す、取得するURL、制限時間
 curl_exec  転送の実行
 curl_close  セッションの終了
11simplexml_load_string
 XML 文字列をオブジェクトに代入する
17〜$rss->channel->item
 階層に従って項目(item)を$itemに取り出す
20print_r ($item)
 デバッグ用(項目の内容を確認する)
22〜25$item->
 各々項目名で取り出す
   タイトル、リンク先URL、説明文、作成年月日
26〜29description
 説明文が省略された場合への対処(後日判明)
30〜31出力用HTMLを用意する
 リンク先へLinkを張る、説明文を添える
32〜3610件表示したら終了
39〜読み込み時の例外処理への対応