自前で構築中のサイトの記事作成時にRSS2.0とAtomのフィードを生成する機能を追加してみました。
使ったのはPHP Universal Feed Generatorというライブラリ
記事データ
実際はデータベース等から取得して連想配列に格納します
<?php $item1 = array(); $item2 = array(); $item1["title"] = "タイトル2"; $item1["link"] = "http://otaku.kansai-fan.com/content/20170502"; $item1["date"] = strtotime(date('Y-m-d G:i:s', time())); $item1["author"] = "投稿者2"; $item1["description"] = "投稿内容2"; $item2["title"] = "タイトル1"; $item2["link"] = "http://otaku.kansai-fan.com/content/20170501"; $item2["date"] = strtotime(date('Y-m-d G:i:s', time())); $item2["author"] = "投稿者1"; $item2["description"] = "投稿内容1"; $list = array(); $list["20170502100000"] = $item1; $list["20170502090000"] = $item2; ?>
RSS2.0
<?php // ライブラリの読み込み use \FeedWriter\RSS2; // チャンネル情報の登録 $feed = new RSS2; $feed->setTitle("とあるオタクの備忘録"); $feed->setLink("http://otaku.kansai-fan.com/"); $feed->setDate(new DateTime()); $feed->setDescription("プレイ中のゲームのプレイ日記等"); $feed->setImage("http://otaku.kansai-fan.com/" , "とあるオタクの備忘録", "http://otaku.kansai-fan.com/image/logo.png" ); $feed->setChannelElement( "language" , "ja-JP" ); $feed->setChannelElement( "pubDate" , date(\DATE_RSS , time())); $feed->setChannelElement( "category" , "Blog" ); // 記事の分だけ、フィードのアイテムを追加する foreach ($list as $key => $value){ $data = $value; $item = $feed->createNewItem(); $item->setTitle($data["title"]); $item->setLink($data["link"]); $item->setDate($data["date"]); $item->setAuthor($data["author"]); $item->setDescription($data["description"]); $item->setId($data["link"], true) ; $feed->addItem($item); } // xml形式の文字列を出力 $xml = $feed->generateFeed(); // ファイルの保存場所を設定 $file = "/home/aaa/bbb/rss2.xml"; // ファイルの保存を実行 @file_put_contents($file, $xml); ?>
<?php // ライブラリの読み込み use \FeedWriter\ATOM; // チャンネル情報を登録 $feed = new ATOM; $feed->setTitle("とあるオタクの備忘録"); $feed->setLink("http://otaku.kansai-fan.com/"); $feed->setDate(new DateTime()); // 記事の分だけ、フィードのアイテムを追加する foreach ($list as $key => $value){ $data = $value; $item = $feed->createNewItem(); $item->setTitle($data["title"]); $item->setLink($data["link"]); $item->setDate($data["date"]); $item->setAuthor($data["author"]); $item->setDescription($data["description"]); $feed->addItem($item); } // xml形式の文字列を出力 $xml = $feed->generateFeed(); // ファイルの保存場所を設定 $file = "/home/aaa/bbb/atom.xml"; // ファイルの保存を実行 @file_put_contents($file, $xml) ; ?>
RSS2.0とAtomで設定する項目が少し異なるくらいで処理はほぼ変わりません。
RSS1.0は今回作成してませんが、ほぼ同じ流れで簡単に作成できそうです。
気を付けないといけないのは日付関連の項目
値が不正だとgenerateFeedメソッドでエラーが発生します
実際に出力したものがこちら