Webサイト制作におけるPHPを用いたRSSの設置の仕方

Webサイト制作において、RSSを設置することで、チェックしているブログの更新状況をすぐに確認できたり、コンテンツを充実したように見せることができる。

今回は、PHPを用いたRSSの設置の仕方をまとめておく。

今回のコードで必要となる基礎知識は以下の通り。

strtotime関数

英文形式の日付をUnixタイムスタンプ(1970年1月1日00:00:00 UTCからの経過秒数)へ変換する関数。
書き方は下記の通り。

strtotime($変数);
date関数

指定のタイムスタンプ値(時刻)を、指定したフォーマットで整形する関数。
書き方は下記の通り。

date(フォーマット形式, タイムスタンプ値);
「->」について

下記の書き方で、指定した変数(オブジェクト変数)の、指定プロパティの値を取得することができる。

$変数 -> プロパティ名;

従って、このプロパティ値を変数に格納したい場合は下記のように書くことになる。

$格納変数 = $変数 -> プロパティ名;
simplexmlモジュール

XML文書を手軽に処理することができるモジュール。
書き方は下記の通り。

$rss = simplexml_load_file('xmlファイル名');

これらのことを確認した上で、PHPRSSを設置するコードを検証していく。

以下、RSS設置のサンプルコード。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>外部RSSを取得・表示する</title>
<style>
li {
 font-size: 0.875em;
 line-height: 1.4;
 margin-bottom: 4px;		
}
</style>
</head>
<body>
<ul>
<?php
 $rss = simplexml_load_file('http://d.hatena.ne.jp/porco_webangya/rss');
 $i = 1;
 foreach($rss -> item as $item){ // $rssの「item」プロパティ値を仮変数$itemへ格納する
  if(++$i > 2) break; //ここで表示する個数を設定。今回は1個だけにしておく。
  $dc = $item -> children('http://purl.org/dc/elements/1.1/'); //$itemの指定した子ノードを$dcに格納する
  $link = $item -> link; //$itemのlinkプロパティ値を$linkに格納する
  $title = $item -> title; //$itemのtitleプロパティ値を$titleに格納する
  $date = date('Y/m/d', strtotime($dc -> date)); //$dcのdateプロパティ値をunixタイムスタンプに変換して指定のフォーマット(Y/m/d)で表示する
  //$desc = $item -> description; //$itemのdescriptionプロパティ値を$descに格納する
  print '<li><a href="'.$link.'" title="'.$title.'" target="_blank">'.$title.'</a><span>('.$date.')</span></li>'."\n";
 }
?>
</ul>
</body>
</html>

以下、表示結果。

記事一つ分が表示されていることが分かる。
実際にページ内にRSSを設置する際にはこれにCSSを指定して見た目を調整していく。

サンプルコード中にコメントでその行の意味(役割)を書いたが、プロパティ名などがどこから来たのか不明だったので、指定変数の中身を確認することができる「var_dump」を用いて、各処理を確認してみる。

「var_dump」の書き方は下記の通り。

var_dump(変数名);

まずは、下記のようにコードに「var_dump」を加え、$rssの中身を確認してみる。
以下、変更部のコード。

$rss = simplexml_load_file('http://d.hatena.ne.jp/porco_webangya/rss');
var_dump($rss).'<br>';

$rss部の表示結果を整理したもの(表示結果は改行がなく見難いので)は以下のようになった。

object(SimpleXMLElement)#1 (2) {
 ["channel"]=> object(SimpleXMLElement)#2 (4) {
  ["title"]=> string(52) "Webサイトデザイン制作Tips|Webあんぎゃ"
  ["link"]=> string(37) "http://d.hatena.ne.jp/porco_webangya/"
  ["description"]=> string(52) "Webサイトデザイン制作Tips|Webあんぎゃ"
  ["items"]=> object(SimpleXMLElement)#8 (0) {
  } 
 }
 ["item"]=> array(5) { 
  [0]=> object(SimpleXMLElement)#3 (3) {
   ["title"]=> string(110) "[PHP][HTML]Webサイト制作におけるPHPでのフォーム作成(その1.5:$_POSTを追いかける)" 
   ["link"]=> string(56) "http://d.hatena.ne.jp/porco_webangya/20130911/1378925011"
   ["description"]=> string(379) " Webサイト制作において、問い合わせフォームなどを作る際に、ユーザーからの入力データを、ページを跨いで使いたい場合がある。入力データを保持するスパーグローバル変数として、今後習うセッションというものがあるようだが、セッションを使わずにページを跨いでデータを"
  }
  [1]=> object(SimpleXMLElement)#4 (3) {
   ["title"]=> string(134) "[PHP][HTML]Webサイト制作におけるPHPでのフォーム作成(その1:送信方法とスーパーグローバル変数)"
   ["link"]=> string(56) "http://d.hatena.ne.jp/porco_webangya/20130909/1378751246"
   ["description"]=> string(373) " Webサイト制作において、ユーザーからの入力を受け取る部分をPHPで作ることにより、データの送受信を行うことができるようになる。今回はWebサイト内の問い合わせページなどで用いられることが多いフォーム作成の基本についてまとめておく。 formタグ フォーム部分は必ず全"
  }
  [2]=> object(SimpleXMLElement)#5 (3) {
   ["title"]=> string(90) "[PHP]Webサイト制作におけるPHPの基本(その6:foreach文、連想配列)"
   ["link"]=> string(56) "http://d.hatena.ne.jp/porco_webangya/20130907/1378578508"
   ["description"]=> string(368) " Webサイト制作において、PHPで名簿などを作る際に、配列と一緒に用いると便利なループ(繰り返し)構文「foreach文」についてまとめておく。また、キーとなるデータに紐づけて複数の関連データを扱いたい場合に便利な「連想配列」についてもまとめておく。 foreach文 foreac"
  }
  [3]=> object(SimpleXMLElement)#6 (3) {
   ["title"]=> string(85) "[PHP]Webサイト制作におけるPHPの基本(その5:配列、count関数)"
   ["link"]=> string(56) "http://d.hatena.ne.jp/porco_webangya/20130906/1378431792"
   ["description"]=> string(378) " Webサイト制作において、PHPで名簿などを作成する際に必要となる配列についてまとめておく。 配列 配列とは、関連する複数のデータを一つのまとまりとして扱えるようにしたもの。通常の変数では、1つの変数に1つのデータ(値)しか入れられなかったが、配列というのは一緒"
  }
  [4]=> object(SimpleXMLElement)#7 (3) {
   ["title"]=> string(95) "[PHP]Webサイト制作におけるPHPの基本(その4:エスケープシーケンス)"
   ["link"]=> string(56) "http://d.hatena.ne.jp/porco_webangya/20130905/1378405887"
   ["description"]=> string(379) " Webサイト制作でのPHPのコーディングにおいて、ソース中の改行を意味する「¥n」(¥n)などの特別な意味(役割)を持った文字とクォート(シングルorダブル)との関係は、意図した結果を得るために、しっかり理解して、使い分けられるようになっておく必要がある。既に過去の記"
  }
 }
} 

これを見ると、以下のことが分かる。

  • このブログの場合は5つ分の記事が取得できている。
  • プロパティは大きく分けて["channel"]、["item"]があり、その下に["title"]、["link"]、["description"]などがある。

続いて、foreach文でitemプロパティ値を代入した変数$itemの中身を確認してみる。
以下、変更部のコード。

foreach($rss -> item as $item){// $rssの「item」プロパティ値を仮変数$itemへ格納する
  if(++$i > 2) break;
 var_dump($item).'<br>';

以下、整理した表示結果。

object(SimpleXMLElement)#4 (3) {
 ["title"]=> string(110) "[PHP][HTML]Webサイト制作におけるPHPでのフォーム作成(その1.5:$_POSTを追いかける)" 
 ["link"]=> string(56) "http://d.hatena.ne.jp/porco_webangya/20130911/1378925011" 
 ["description"]=> string(379) " Webサイト制作において、問い合わせフォームなどを作る際に、ユーザーからの入力データを、ページを跨いで使いたい場合がある。入力データを保持するスパーグローバル変数として、今後習うセッションというものがあるようだが、セッションを使わずにページを跨いでデータを" 
} 

結果から、itemプロパティの1つ目の中身(["title"]、["link"]、["description"])を取得していることが分かる。

続いて、$itemの指定した子ノードを格納した$dcの中身を確認してみる。
以下、変更部のコード。

 $dc = $item -> children('http://purl.org/dc/elements/1.1/');//$itemの指定した子ノードを$dcに格納する
 var_dump($dc).'<br>';

※childrenの括弧内の部分は、現段階ではこのように書くと理解しておけばよいとのことだったので、ここでは深くは触れない

以下、整理した表示結果。

object(SimpleXMLElement)#5 (3) {
 ["creator"]=> string(14) "porco_webangya" 
 ["date"]=> string(25) "2013-09-12T03:43:31+09:00" 
 ["subject"]=> array(2) {
  [0]=> string(3) "PHP"
  [1]=> string(4) "HTML" 
 }
} 

結果から["creator"]、["date"]、["subject"]の3つのプロパティを取得できていることが分かる。

同様にして、$link、$title、$dateの結果も確認できるが、サンプルコードの表示結果でprint文を用いて出力されているので割愛する。

注意点として、いくつかのWebサイトのRSSについて調べると分かるが、プロパティは今回登場したものですべてというわけではない。

また、ここに書いたコードですべてのRSSの設置に対応できるというわけではないようである。

以上の検証から、一般的なRSSとして表示する項目(日時やタイトル、リンクなど)はある程度決まっていると思われるが、RSSを設置する際には、XML構文の確認が必要になる場合があると考えられる。

※参照