ホーム > ブログ [果報は寝て待て] > PHPとSmartyでRSSを自動生成

ブログ [果報は寝て待て]|Blog

PHPとSmartyでRSSを自動生成

2008年10月15日 19:37

こんばんは。
最近、ActionScript2.0&3.0の勉強に必死な掛尾です。

冒頭にActionScriptとか書いておきながら、今回はPHPとSmartyでRSSを自動生成させる方法について書いてみようと思います。

何はともあれ、RSSの元になるデータがないと話にならないので、例によってデータを取得してきた所から始めます。
RSSの生成には、「サイト(ブログ)タイトル」「サイト(ブログ)URL」「サイト(ブログ)概要」「管理者メールアドレス」「記事タイトル」「記事URL」「記事概要」「登録日時」程度の情報を用意します。
なくても大丈夫なものも含まれていますが、今回はこの8つの情報からRSS2.0用のファイルを作ります。

まず、PHPのスクリプトを以下のような感じで書きます。
変数には、DBもしくはデータファイルから取得したデータが10件程度(あまり多すぎるのもどうかと思いますし・汗)入っているものとします。

<?php
/*
$rss_master配列に含まれる情報(例:$rss_master['site_title'])
site_title      : サイトタイトル;
site_url        : サイトURL;
site_description: サイト概要;
admin_mail_addr : 管理者メールアドレス;
 
$rss_data配列に含まれる情報(例:$rss_data[0]['topic_title'])
topic_title      : 記事タイトル;
topic_url        : 記事URL;
topic_description: 記事概要;
post_datetime    : 登録日時;
 
$smarty: Smartyインスタンス
*/
 
// 取得したデータをSmarty変数へ割り当てる
$smarty->assign( 'rss_master', $rss_master );
$smarty->assign( 'rss_data' , $rss_data );
 
// RSS生成用のSmartyテンプレートを取得
$template = $smarty->fetch( 'rss.tpl' );
 
// 生成されたSmartyテンプレートをファイルとして書き出し
$filePath = '/rss/rss.xml';
$handle = fopen( $filePath, 'w' );
if( $handle ){
// テンプレートを丸ごとUTF-8に変換(自作のクラスです)
fputs( $handle, $conversion->convert2utf8( $template ) );
fclose( $handle );
}
?>

PHPスクリプトは以上です。
Smartyは単に表示させるだけでなく、テンプレートをデータとして取得する事もできます。
[余談]
「$smarty->display」は、Smartyエンジンの内部的には「fetch→echo」となってるんだそうです。(ネタ元忘・汗)
(2008-12-31追記)Smarty.class.phpのdisplayメソッドはfetchメソッドをラップしているだけなのを確認しました。
[/余談]

次に、肝心のRSS用のテンプレートファイルを作成します。
RSSファイルは他の文字コードに対応していないRSSリーダーがないとは限らないので、可能な限りUTF-8にしておきます。
また、HTMLタグは取ってしまうか、エスケープしておきます。

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>{$rss_master.site_title}</title>
    <link>{$rss_master.site_url}</link>
    <description>{$rss_master.site_description}</description>
    <language>ja</language>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <copyright>{$rss_master.site_title}</copyright>
    <webMaster>{$rss_master.master_mail_addr}</webMaster>
    
    {foreach item="item_list" from=$rss_data name="item_list"}
    <item>
      <title>{$item_list.topic_title|strip_tags:false}</title>
      <link>{$item_list.topic_url}</link>
      <description>{$item_list.topic_description|strip_tags:false|jp_truncate:"200"|escape:"html"}</description>
      <pubDate>{$item_list.post_datetime|my_date_format:"r"}</pubDate>
    </item>
    {/foreach}
  </channel>
</rss>

以上を実行すると、rssディレクトリ内にrss.xmlというRSSファイルが出来上がります。
後は、サイトの好きなところに、<a href="rss/rss.xml">RSS購読</a>のように書けば、RSSリーダーへ登録ができます。

RSS1.0や、Atomも情報を送るテンプレートを変えれば作成する事ができます。
ブログ以外にも、メールマガジンのようにインフォメーションや、新着情報を作ったりする事もできますね(*^_^*)
一般の方には、RSSという物自体がなんだかよく知らないって方もまだまだ少なくないと小耳に挟んだりしますが・・・そこら辺は気にせずに(^-^;

では、今回はこの辺で。

※参考URL:www.kanzaki.com: RSS(RDF Site Summary)によるサイト情報の要約と公開
※このスクリプトにおいて、動作の検証は行っていませんので、責任は一切負いません。

shape DESIGN - シェイプデザイン, 徳島県徳島市名東町, tel/fax 088-635-5859, 営業時間 平日10:00〜18:00

まずはお気軽にお問い合わせください
お問い合わせ・お見積り・ご相談はこちら
お気軽にご相談ください

徳島県徳島市名東町
tel/fax 088-635-5859
営業時間 平日 10:00〜18:00

※打ち合わせ等で不在の場合は、お電話でのお問い合わせに対応できない場合がありますので、ご了承ください。

フォームからのお問い合わせ

徳島・香川・愛媛・高知および大阪・京都を中心にご依頼を承ります。その他の地域でも、メール・お電話・FAX・Skype等での作業が可能であれば柔軟に対応いたします。

  • Become our fan on Facebook, facebook.com/shape.design