PHPでRSS、AtomのFeedを作成する方法

PHPでRSS、AtomのFeedを作成する方法

ワードプレスやレンタルブログだったら、はじめからRSS、Atomフィードを作成する機能が備わっていますが、独自のプラットフォームでブログやニュースなどのシステムを開発する場合は、自分でRSS、Atomなどのファイルを作成する必要があります。今回はPHPを使って、RSS、Atomを作成する方法を解説します。

フィードのサンプル

この記事で作成する予定のフィード・ファイルです。RSS1.0、RSS2.0、Atom、それぞれのサンプルをご確認下さい。

ATOM

<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Syncer</title>
<link href="http://syncer.jp/"></link>
<updated>2015-01-19T03:30:12+09:00</updated>
<id>urn:uuid:330bf42e-c715-a264-ee7b-f56f3c1e3618</id>
<entry>
<title>PHPでRSS、AtomのFeedを作成する方法</title>
<link href="http://syncer.jp/how-to-make-feed-by-php"></link>
<id>urn:uuid:a2539b3e-a515-9066-34ef-3381c5858b76</id>
<updated>2014-11-23T18:30:00+09:00</updated>
<author><name>あらゆ</name>
</author>
<summary type="html"><![CDATA[PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。]]></summary>
</entry>
</feed>

RSS1

<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://syncer.jp/about"><title>Syncer</title>
<link>http://syncer.jp/</link>
<description><![CDATA[知識と感動を同期(Sync)するブログ]]></description>
<items>
<rdf:Seq>
<rdf:li resource="http://syncer.jp/how-to-make-feed-by-php"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://syncer.jp/how-to-make-feed-by-php">
<title>PHPでRSS、AtomのFeedを作成する方法</title>
<link>http://syncer.jp/how-to-make-feed-by-php</link>
<dc:date>2014-11-23</dc:date>
<description><![CDATA[PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。]]></description>
<dc:subject>ここの値を指定</dc:subject>
</item>
</rdf:RDF>

RSS2

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>Syncer</title>
<link>http://syncer.jp</link>
<description><![CDATA[知識と感動を同期(Sync)するブログ]]></description>
<image><title>Syncer</title>
<link>http://syncer.jp</link>
<url>http://syncer.jp/images/DHFgXv5Rfe4d1Lej1lnQfuffZtzsj/assets/logo/490x196.png</url>
</image>
<lastBuildDate>Sat, 17 Jan 2015 12:36:27 +0900</lastBuildDate>
<language>ja-JP</language>
<pubDate>Sun, 23 Nov 2014 15:30:00 +0900</pubDate>
<category>Blog</category>
<item>
<title>PHPでRSS、AtomのFeedを作成する方法</title>
<link>http://syncer.jp/how-to-make-feed-by-php</link>
<description><![CDATA[PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。]]></description>
<pubDate>Sun, 23 Nov 2014 18:30:00 +0900</pubDate>
<author>info@syncer.jp (あらゆ)</author>
<guid isPermaLink="true">http://syncer.jp/how-to-make-feed-by-php</guid>
</item>
</channel>
</rss>

ライブラリの入手

「RSSやAtomの仕様を勉強して1からプログラミングする」という選択肢もありますが、世の中には既に数々のライブラリが用意されているので、今回はそれに頼ることにしましょう。中でも、RSS1.0、RSS2.0、AtomをサポートするPHP Universal Feed Generatorを使ってみましょう。ライブラリをGitHubからダウンロードして下さい。

下記の5ファイルを利用します。

FeedWriter-master.zip

  • FeedWriter-master
    • Feed.php
    • Item.php
    • RSS1.php
    • Atom.php
    • RSS2.php

プログラミング

Atom

ここからは、それぞれの種類別に、フィードを作成していく方法を紹介します。Atomから、いきましょう。まずは、Atom Feed用のライブラリを読み込み、インスタンスを作成します。

PHP

<?php
	// ライブラリの読み込み
	require_once "./Item.php" ;
	require_once "./Feed.php" ;
	require_once "./ATOM.php" ;

	// デフォルトのタイムゾーンをセット
	date_default_timezone_set( "Asia/Tokyo" ) ;

	use \FeedWriter\ATOM ;	// エイリアスの作成
	$feed = new ATOM ;

準備が完了したら、まずはチャンネル情報を下記メソッドを利用して登録します。

PHP

// チャンネル情報の登録
$feed->setTitle( "SYNCER" ) ;			// チャンネル名
$feed->setLink( "https://syncer.jp" ) ;		// URLアドレス
$feed->setDate( new DateTime() ) ;			// 日付 (変更不要)

続いて、記事の分だけ、フィードのアイテムを登録していきます。1つのアイテムを登録する手順は下記の通りです。この一連の手順を、ループ処理して下さい。

PHP

// インスタンスの作成
$item = $feed->createNewItem() ;

// アイテムの情報
$item->setTitle( "PHPでRSS、AtomのFeedを作成する方法" ) ;	// タイトル
$item->setLink( "https://syncer.jp/how-to-make-feed-by-php" ) ;	// リンク
$item->setDate( strtotime( "2014-11-23 18:30" ) ) ;	// 更新日時
$item->setAuthor( "Yuta Arai" ) ;	// 著者名
$item->setDescription( "PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。" ) ;	//紹介テキスト
// $item->setContent( "<h1>PHPでRSS、AtomのFeedを作成する方法</h1><p>PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。</p>" ) ;	// HTMLコンテンツ
// $item->setEnclosure( "...ogg" , 11779 , "audio/ogg" ) ;	// 添付ファイル

// アイテムの追加
$feed->addItem( $item ) ;

全ての記事の登録が終わったら、最後に、ファイルを作成しましょう。これで、フィードのファイルを作成することができました。

PHP

// コードの生成
$xml = $feed->generateFeed() ;

// ファイルの保存場所を設定
$file = "/var/www/syncer.jp/feed/atom.xml" ;

// ファイルの保存を実行
@file_put_contents( $file , $xml ) ;

RSS1.0

続いて、RSS1.0のフィードを作成していきましょう。作成方法は基本的にAtomの時と同じですが、登録する項目に違いがあります。まずはライブラリを読み込みます。

PHP

<?php
	// ライブラリの読み込み
	require_once "./Item.php" ;
	require_once "./Feed.php" ;
	require_once "./RSS1.php" ;

	// デフォルトのタイムゾーンをセット
	date_default_timezone_set( "Asia/Tokyo" ) ;

	use \FeedWriter\RSS1 ;	// エイリアスの作成
	$feed = new RSS1 ;		// インスタンスの作成

続いて、チャンネル情報を設定します。RSS1.0では、ウェブサイトの紹介ページへのリンクを指定する必要があります。

PHP

// チャンネル情報の登録
$feed->setTitle( "SYNCER" ) ;			// チャンネル名
$feed->setLink( "https://syncer.jp" ) ;		// URLアドレス
$feed->setDescription( "知識と感動を同期(Sync)するブログ" ) ;	// チャンネル紹介テキスト
$feed->setChannelAbout( "https://syncer.jp/about" ) ;	// ブログのアバウト・ページ

続いて、アイテムを登録していきます。基本的に登録する項目は4種類ですが、addElement()メソッドを利用することで、オプションとなる項目を追加することができます。第1引数に項目、第2引数に値を指定して下さい。この処理を、アイテムの数だけ繰り返します。RSS1.0では15記事までくらいがいいとされています。

PHP

// インスタンスの作成
$item = $feed->createNewItem() ;

// アイテムの情報
$item->setTitle( "PHPでRSS、AtomのFeedを作成する方法" ) ;	// タイトル
$item->setLink( "https://syncer.jp/how-to-make-feed-by-php" ) ;	// リンク
$item->setDate( strtotime( "2014-11-23 18:30" ) ) ;	// 更新日時
$item->setDescription( "PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。" ) ;	// 紹介テキスト
// $item->addElement( "dc:subject" , "ここの値を指定" ) ;	// オプションとなる項目

// アイテムの追加
$feed->addItem( $item ) ;

アイテムの追加処理が完了したら、一番最後に、ファイルを作成します。

PHP

// コードの生成
$xml = $feed->generateFeed() ;

// ファイルの保存場所を設定
$file = "/var/www/syncer.jp/feed/rss1.xml" ;

// ファイルの保存を実行
@file_put_contents( $file , $xml ) ;

RSS2.0

最後に、RSS2.0の仕様に従ったフィードを作成してみましょう。準備となる処理は下記の通りです。

PHP

<?php
	// ライブラリの読み込み
	require_once "./Item.php" ;
	require_once "./Feed.php" ;
	require_once "./RSS2.php" ;

	// デフォルトのタイムゾーンをセット
	date_default_timezone_set( "Asia/Tokyo" ) ;

	use \FeedWriter\RSS2 ;	// エイリアスの作成
	$feed = new RSS2 ;

続いて、チャンネル情報を設定します。RSS2.0では、チャンネル情報に様々な項目を指定することができます。setChannelElement()メソッドを利用して、第1引数に項目、第2引数に値を指定することができます。

PHP

// チャンネル情報の登録
$feed->setTitle( "SYNCER" ) ;			// チャンネル名
$feed->setLink( "https://syncer.jp" ) ;		// URLアドレス
$feed->setDescription( "知識と感動を同期(Sync)するブログ" ) ;	// チャンネル紹介テキスト
$feed->setImage( "Syncer" , "https://syncer.jp" , "https://syncer.jp/images/DHFgXv5Rfe4d1Lej1lnQfuffZtzsj/assets/logo/490x196.png" ) ;	// ロゴなどの画像
$feed->setDate( date( DATE_RSS , time() ) ) ;	// フィードの更新時刻
$feed->setChannelElement( "language" , "ja-JP" ) ;	// 言語
$feed->setChannelElement( "pubDate" , date( \DATE_RSS , strtotime("2014-11-23 15:30") ) ) ;	// フィードの変更時刻
$feed->setChannelElement( "category" , "Blog" ) ;	// カテゴリー

続いて、アイテムを登録していきます。基本的に登録する項目は4種類ですが、addElement()メソッドを利用することで、オプションとなる項目を追加することができます。第1引数に項目、第2引数に値を指定して下さい。この処理を、アイテムの数だけ繰り返します。RSS1.0では15記事までくらいがいいとされています。

PHP

// インスタンスの作成
$item = $feed->createNewItem() ;

// アイテムの情報
$item->setTitle( "PHPでRSS、AtomのFeedを作成する方法" ) ;	// タイトル
$item->setLink( "https://syncer.jp/how-to-make-feed-by-php" ) ;	// リンク
$item->setDescription( "PHPを使って、RSS、Atomのフィード・ファイルを作成する方法を解説します。" ) ;	// 紹介テキスト
$item->setDate( strtotime("2014-11-23 18:30") ) ;	// 更新日時
//$item->setAuthor( "あらゆ" , "info@syncer.jp" ) ;	// 著者の連絡先(E-mail)
$item->setId( "https://syncer.jp/how-to-make-feed-by-php" , true ) ;	// 一意のID(第1引数にURLアドレス、第2引数にtrueで通常は大丈夫)

// アイテムの追加
$feed->addItem( $item ) ;

アイテムの追加処理が完了したら、一番最後に、ファイルを作成します。

PHP

// コードの生成
$xml = $feed->generateFeed() ;

// ファイルの保存場所を設定
$file = "/var/www/syncer.jp/feed/rss2.xml" ;

// ファイルの保存を実行
@file_put_contents( $file , $xml ) ;

ダウンロード

ファイル一覧

SYNCER00183
ATOM.php
Feed.php
Item.php
RSS1.php
RSS2.php
make-atom-feed.php Download
make-rss1-feed.php Download
make-rss2-feed.php Download

ファイル名をクリックすると内容を確認できます。「Download Zip」をクリックするとファイル一式をダウンロードできます。

ATOM.phpFeed.phpItem.phpRSS1.phpRSS2.phpはzipファイルの中に含まれていません。

Download Zip