kamenokoki.com

RSS.xml(version2.0)をPHPで自作する方法

Posted:  Last Update:

自作サイトにRSS version2.0を作りたい!でも、どこから手をつけていいのか分からない…。そんな方に向けて、この記事では「RSS version2.0」をPHPで作成する方法を詳しく紹介します。これさえ読めば、「RSS version2.0」をPHPで自作できるようになります!

RSS Version2.0とは

こんにちは、HTMLとPHPだけでサイトを自作している「亀の子」です。実際にRSSを作成する前に、RSSについて簡単な説明をしておきましょう。

RSSはサイトの概要を書き留めたファイル

「RSS」とは「Really Simple Syndication」または「Rich Site Summary」の略です。簡単に言ってしまえば、サイトの概要を書き留めたファイルのこと。RSSには、サイトのごく簡単な概要や、サイト内各ページへのリンクが記載されています。

一昔前は「RSSフィード」というものが流行しました。サイトの更新情報はRSSで取得するのが当たり前だったのですが…。最近はこの使い方はあまりされていません。今では、ランキングサイトなどに最新情報を送信するために広く用いられています。対「人」から対「アプリケーション」に用途が変わったのですね。

RSSバージョン1.0とRSSバージョン2.0の違い

そんなRSSにはVersion1.0とVersion2.0があります。RSSを開発する過程で2派に別れて二つのバージョンができました。2.0は1.0の上位ではなく、異なる様式のファイルです。

ブログランキングサイトにはRSS Version1.0を受け付けているものや、RSS Version2.0を受け付けているものがあります。Version 2.0の方が広く使われているようなので、最初に作成するRSSはversion2.0がおススメです。時間ができたらVersion1.0にも取り組んでもいいかもしれません。

RSS Version2.0の様式

RSS Version2.0をPHPで作成する前に、RSS Version2.0の様式を確認しておきましょう。RSS Version2.0の様式はW3CのRSS様式に詳しくまとめられています。

RSS v2.0のコード

RSS Version2.0には必須項目と任意項目があります。ここでは最低限の項目のみをピックアップしてみました。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel> ※※サイト情報の書き出し
<title>必須項目 / サイトの名称</title>
<link>必須項目 / サイトのURL </link>
<description>必須項目 / サイトの説明</description>
<lastBuildDate>rss.xmlの更新日</lastBuildDate>
<item> ※※ここから各ページを入れ込みますと言うタグ。ページの数だけ「item」を繰り返す
<title>ページのタイトル</title>
<link>ページのURL</link>
<guid>ページのURL</guid>
<pubDate>ページの投稿日</pubDate>
</item>
</channel>

</rss>

今回ご紹介するPHPは、最終的にこのようなファイルを作成することを目的としています。

RSS v2.0のサンプル

実際のRSS v2.0をご覧になりたい方は当サイトのRSS 2.0をご確認ください。こちらのRSSも次の章でご紹介するPHPを使って作成しています。

RSS v2.0を作成するPHP全文紹介

では、早速RSS V2.0をPHPで作成してみましょう。こここではPHP全文を紹介し、次の章から詳細をご説明します。

<?php
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$myname = "サイトの名称";
$mydescription = "サイトの説明文";
$folders = array("フォルダー1","フォルダー2");

$files = array();
foreach($folders as $folder){
array_push($files, glob("$mypath/$folder/*.html"));
}
foreach($files as $file){
foreach ($file as $value){
$filepath[filemtime($value)][] = $value;
}
}
krsort($filepath);

$fp = fopen("$mypath/rss2.xml", "w");
fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>'
.$myname.'</title>
<link>'
.$myurl.'</link>
<description>'
.$mydescription.'</description>
<lastBuildDate>'
.gmdate("D, d M Y H:i:s T").'</lastBuildDate>
<atom:link href="'
.$myurl.'/rss2.xml" rel="self" type="application/rss+xml" />
'
);

foreach($filepath as $filename){
preg_match('/<title>(.*?)<\/title>/i', file_get_contents($filename[0]), $findvalue);
$title = str_replace('<title>', '', $findvalue[0]);
$title = str_replace('</title>', '', $title);
$filetime = gmdate("D, d M Y H:i:s T", filemtime($filename[0]));
$filename = str_replace($mypath, $myurl, $filename[0]);
fwrite($fp, '<item><title>'.$title.'</title><link>'.$filename.'</link><guid>'.$filename.'</guid><pubDate>'.$filetime.'</pubDate></item>'."\n");
}

fwrite($fp, '</channel></rss>');
fclose($fp);
?>

RSS v2.0を作成するPHPの詳細

この章では、上記で紹介したPHPを項目ごとに分けて内容を詳しく紹介します。RSS v2.0を作成してみたい方は、上記PHPをコピーして、一緒に作業してみてください。各サイトに合わせて変更が必要な部分は、各項目で詳しく紹介しています。

一緒に作業してみたい方は…
  • 上記PHPをコピーしてメモ帳などに貼り付け「createrss2.php」などの名前でホームディレクトリに保存してください
  • ※このPHPはホームディレクトリに保存することを前提に作成されています。
  • ※このPHPで作成したRSS Version2.0は「rss2.xml」というファイル名でホームディレクトリに保存されます。

PHPの開始と終了を宣言する

PHPを動作させるには、PHPの開始を宣言する必要があります。また、ファイルの最後にはPHPの終了も宣言しましょう。開始と終了の宣言は、最初と最後の列です。

<?php
...
?>

サイトの基本情報をPHPの変数に代入する

次に、ご自分のサイトの情報を変数に代入します。ご紹したPHPでは2列目以降の部分です。ご自分のサイトに合わせて、内容を変更してください。

...
$myurl = "https://example.com";
$mypath = dirname(__FILE__);
$myname = "サイトの名称";
$mydescription = "サイトの説明文";
$folders = array("フォルダー1","フォルダー2");
...

$myurl = "https://example.com";

「$myurl」というPHPの変数に、サイトのURLを代入します。「https://example.com」の部分をご自分のURLに変更してください。URLは「""」で囲います。

$mypath = dirname(__FILE__);

この部分は変更不要です。「$mypath」には、フォルダのパスを代入します。ここではPHPの構文「dirname(__FILE__)」を利用して、自動でファイルのパスを取得しています。

$myname = "サイトの名称";

PHP変数「$myname」には、サイトのサービス名称を代入します。「サイトの名称」に記入するサービス名とは、「ウィキペディア」や「フェイスブック」などの閲覧者向けの名称です。設定していない方は「example.com」など、ドメインを記載してもいいかもしれません。

$mydescription = "サイトの説明文";

「$mydescription」には、ご自身のサイトの説明を記入します。100字~150字程度が目安です

$folders = array("フォルダー1","フォルダー2");

$folders = array("フォルダー1","フォルダー2");」には、各記事のファイルが置かれているフォルダ名を記入します。「フォルダー1」「フォルダー2」は、記事が置いてあるフォルダ名に変更してください。

ここでは、必ずルートディレクトリからのファイルパスを入力してください。フォルダ名は「""」で囲い、「,」で区切ります。フォルダが1つしかない方は「array("フォルダー1")」、3つ以上ある方は「array("フォルダー1","フォルダー2","フォルダー3")」の形で記載します。

RSSに書き込む各記事のリンクを取得し、新しい順に並べ替える

次に、RSS2.0に書き出す各記事のファイルを取得します。該当のPHPは下記の部分。

...
$files = array();
foreach($folders as $folder){
array_push($files, glob("$mypath/$folder/*.html"));
}
foreach($files as $file){
foreach ($file as $value){
$filepath[filemtime($value)][] = $value;
}
}
krsort($filepath);
...

$files = array();

まずは準備として、PHP変数「$files」が配列型であることを宣言します。「array()」で変数を配列として指定できます。

foreach($folders as $folder){}

一つ前の章で「$folders」に記事の置かれているフォルダを指定しました。ここでは、「foreach」を使って、指定した各フォルダについて処理を行っていきます。

array_push($files, glob("$mypath/$folder/*.html"));

「array_push($files, 内容))」で、配列「$files」に「内容」を追加していきます。

内容「glob("$mypath/$folder/*.html")」では、各フォルダ($folder)内のHTMLファイルを取得しています。拡張子が異なるファイルを取得したい場合は、この部分を「.php」「.xml」などに適宜変更してください。 }

foreach($files as $file){…}

ここでは2回「foreach」が出てきます。PHPの多重配列を使用していますので、それぞれの配列を展開して作業するのに2度のforeachが必要です。

「$filepath[filemtime($value)][] = $value;」で、変数「$filepath」に、ファイル名とファイルの最終更新時刻を代入します。「filemtime」はファイルの最終更新時刻を取得するPHP構文です。

krsort($filepath);

PHP構文「krsort」は、配列のキーを基準に配列を降順に並べ替えます。一つ前の作業で、キーにファイルの最終更新日を指定しました。「krsort($filepath);」の一文でファイルを全て降順に並べ替えています。

rss.xmlを開く、書き込む、閉じる

ここまででRSS 2.0作成の準備が整いました。ここからは、rss.xmlというRSSファイルに実際に書き込む作業を行います。

最初に、rss.xmlを開き、書き込み、閉じるPHPを見てみましょう。下記は該当部分のみを抜き出しています。

...
$fp = fopen("$mypath/rss2.xml", "w");
fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>
...
'
);
...
fwrite($fp, '<item><title>'.$articletitle.'</title><link>'.$filename.'</link><guid>'.$filename.'</guid><pubDate>'.$filetime.'</pubDate></item>'."\n");
...
fwrite($fp, '</channel></rss>');
fclose($fp);
...

$fp = fopen("$mypath/rss2.xml", "w");

「fopen」はファイルを開くPHPの構文です。開く対象のファイルはルートディレクトリにある「rss2.xml」です。「$mypath」には2つ前の章でルートディレクトリを代入しました。ここでは「"w"」と指定することにより、既存の内容を削除して新たに上書きしています。「rss2.xml」というファイルが存在しない場合には、新たに作成します。

「$fp = fopen…」と書くことにより、変数「$fp」にファイル名を代入しました。この「$fp」は、この後のファイルへの書き込みと、ファイルを閉じる際に利用します。

fwrite($fp, ...);

「fwrite」はファイルへの書き込みを行うPHPの構文です。「$fp」で、先に開いた「rss2.xml」に書き込むようにしています。今回のPHPでは「fwrite」が2か所あります。書き込んでいる内容はのちほど詳しくご紹介します。

fclose($fp);

最後に「fclose($fp)」で、「rss2.xml」を閉じています。ファイルを開きっぱなしにしないよう、この記述も忘れずに。

サイトの基本情報をRSSに書き込む

では、さっそくRSSファイルにサイト情報を書き込んでいきましょう。最初に、ドメインやサービス名など、サイトの基本情報をかき込みます。RSSファイルの下記の部分です。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel> ※※サイト情報の書き出し
<title>必須項目 / サイトの名称</title>
<link>必須項目 / サイトのURL </link>
<description>必須項目 / サイトの説明</description>
<lastBuildDate>rss.xmlの更新日</lastBuildDate>
...
</channel>

</rss>

PHPの該当部分は「fwrite」の1つ目と3つ目です。「fwrite」は一つ前の小見出しで見ましたね、ファイルに書き込むためのPHP構文です。サイト名称等は既に変数で指定してあるので、この部分は変更せずそのまま利用できます。

...
fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>'
.$myname.'</title>
<link>'
.$myurl.'</link>
<description>'
.$mydescription.'</description>
<lastBuildDate>'
.gmdate("D, d M Y H:i:s T").'</lastBuildDate>
<atom:link href="'
.$myurl.'/rss2.xml" rel="self" type="application/rss+xml" />
'
);
...
fwrite($fp, '</channel></rss>');

各記事のリンクや作成日をRSSに書き込む

PHPの作業はこれで最後です。各記事の内容をRSSファイルに書き込んでいきましょう。該当のPHPの部分がこちら。

...
foreach($filepath as $filename){
preg_match('/<title>(.*?)<\/title>/i', file_get_contents($filename[0]), $findvalue);
$title = str_replace('<title>', '', $findvalue[0]);
$title = str_replace('</title>', '', $title);
$filetime = gmdate("D, d M Y H:i:s T", filemtime($filename[0]));
$filename = str_replace($mypath, $myurl, $filename[0]);
fwrite($fp, '<item><title>'.$title.'</title><link>'.$filename.'</link><guid>'.$filename.'</guid><pubDate>'.$filetime.'</pubDate></item>'."\n");
}

各要素について詳しく見てみましょう。

foreach($filepath as $filename){}

3つ前の章で、RSSに書き出す記事を取得し、新しい順に並び変えました。「$filepath」は記事のファイル名が書かれている変数です。ここでは「foreach」を使い、各記事について一つずつ処理をしていきます。記事名はPHP変数「$filename」に代入されます。

preg_match()~3列

ここでは、ファイルに書かれている記事のタイトルを取得しています。PHP構文「preg_match(検索内容, 検索文字列, 検索結果)」で、ファイル内から「<title></title>」で書かれている記事のタイトルを探し、検索結果($findvalue)に代入しています。

「preg_match()」で検索しているのは「<title></title>」も含んだ文字列です。後の2文で「str_replace」を使い、「<title>」と「</title>」を削除します。これで「$findvalue」に入っているのは、記事のタイトルだけになります。

$filetime = gmdate(…);

「filemtime」は、ファイルの最終更新日を取得するためのPHP構文です。ここでは「$filepath」に代入されているファイルの作成日時を取得しています。さらに「gmdate」を使い、RSS Version2.0に必要な「D, d M Y H:i:s T」という形式の日時に日付を置き換えています。取得したファイルの作成日時はPHP変数「$filetime」に代入されます。

$filename = str_replace(…);

現在「$filename」に代入されているのは、ファイルのパスがついたファイル名です。RSSに書き出したいのはURLなので、ファイルパスをURLに置き換える必要がありますね。ここでは「str_replace」を使って、ファイルのパスをURLに置き換える作業をしています。

fwrite($fp, …);

最後に、rss.xmlにURLを書き出していく作業を行います。ここで書き出しているのは、RSS Version2.0の下記の部分です。


<title>ページのタイトル</title>
<link>ページのURL</link>
<guid>ページのURL</guid>
<pubDate>ページの投稿日</pubDate>
</item>

ページのタイトル、URL、投稿日は既に変数に代入していますので、この部分は変更せず、そのまま利用してください。記事の数だけ繰り返し記入されます。

RSS 2.0で利用する日付形式に関しては下の記事に詳しくまとめていますので、気になる方はチェックしてみてくださいね!

PHPを作動させる

PHPの作成お疲れさまでした。これでRSS2.0の作成準備は完了です。「createrss2.php」というファイルをブラウザで開くとPHPが走り、RSS2.0を作成することができます。

なお、PHPをローカル(自分のPC)で動かしたいときにはPHPのダウンロードや仮想サーバーが必要になります。

ただし、今のままでは空白のページが画面上に開くだけです。「createrss2.php」にHTMLを足して、ブラウザでも見やすいページにしてみましょう。ここでは、作成したRSS2.0をすぐに確認できるようにリンクも入れてみました。

「ここに作成したPHPを入力する」の部分に、作成したPHPを入れてください。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html><html>
<head></head>
<body>
<h1>RSS version2.0 の作成</h1>

ここに作成したPHPを入力する

<p><a href="/rss.xml" target="_blank">rss.xml</a>の作成が完了しました。</p>
</body></html>

これで画面上にはタイトル「RSS version2.0 の作成」と、rss.xmlのリンクが表示されます。このページをブラウザで開くと自動敵にRSS2.0が作成されますので、リンクから内容を確認してみましょう。

作成したのはタイトルとリンクだけの単純なページなので、必要に応じてHTMLやスタイルシートで装飾をつけてみてくださいね。

作成したRSSを検証する

最後に、作成したRSS Version2.0が正しく作成されているか、リリース前に確認しておきましょう。W3CのFeed Validation Serviceを使えば正しく作成できているかどうかを簡単に確認することができます。

作成したRSS 2.0を既にサーバーにアップしている場合には「Validate by URI」を使用します。「Address:」にrss 2.0のURLを入力して「Check」をクリックします。「Valid」と表示されれば問題なく作成できています。

リリース前に確認したい場合には、「Validate by direct input」を使いましょう。作成したRSS 2.0の内容を空欄にコピペして利用します。「Valid」と表示されれば問題なく作成できています。

編集後記

この記事ではRSS Version 2.0をPHPで作成する方法を紹介しました。やり方が分かってしまえば意外と簡単に作成できますのでぜひ挑戦してみてください。この記事がサイトを自作されている同志の方の一助になれば幸いです。

記事をシェアする

亀の子に連絡

ランキング参加中!ぽちっとしてね

F2cランキングアイコン 人気ブログランキング ブログランキング・にほんブログ村へ

RELATED

サイトパーツ作成方法 ・サーチエンジン対策 ・PHPの小技集 

広告