tetsunosukeのnotebook

tetsunosukeのメモです

MagpieRSSを使ってみた。(MagpieRSS+Smarty習作)

これだけ。
mb_internal_encoding(MAGPIE_OUTPUT_ENCODING) は、いらんかも。

<?php
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
mb_internal_encoding(MAGPIE_OUTPUT_ENCODING);
define('RSS_URL', 'http://d.hatena.ne.jp/kidd-number5/rss');
require_once 'rss_fetch.inc';
require_once 'Smarty.class.php';

$rss = fetch_rss(RSS_URL);

$smarty = new Smarty();
$smarty->template_dir = SMARTY_DIR . "/template";
$smarty->compile_dir = SMARTY_DIR . "/cache";

$smarty->assign("channel", $rss->channel);
$smarty->assign("items", $rss->items);
$smarty->display('index.tpl');

?>

テンプレート(index.tpl)はこんな感じでテキトウに。*1

<h1>{$channel.title}</h1>
<dl>
{foreach from=$items item=item}
<dt><a href="{$item.link}">{$item.title}</a></dt>
<dd>{$item.description}</dd>
{/foreach}
</ul>

これをこんな構成で動かす。(cacheディレクトリは最初はもちろん空。)

│  Config_File.class.php
│  index.php
│  rss_cache.inc
│  rss_fetch.inc
│  rss_parse.inc
│  rss_utils.inc
│  Smarty.class.php
│  Smarty_Compiler.class.php
│  
├─cache
│      %%45^45E^45E480CD%%index.tpl.php
│      7c1ad67cfb1960b93c7a79882cb8fa0e
│      
├─extlib
│      Snoopy.class.inc
│      
├─internals
(略)
│      
├─plugins
(略)
│      
└─template
        index.tpl

ポイントは

define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');

しておくことで、キャッシュとして保存するための文字コードを指定できること。ここでしておかないと、日本語が化けてしまう。

指定されているのはrss_fetch.incのここ。

    if ( !defined('MAGPIE_OUTPUT_ENCODING') ) {
        define('MAGPIE_OUTPUT_ENCODING', 'ISO-8859-1');
    }

ちなみにUTF-8ではなくてEUC-JPにしようとしても、rss_parse.incの

    var $_KNOWN_ENCODINGS    = array('UTF-8', 'US-ASCII', 'ISO-8859-1');

に入ってないのでアウト。

Snoopy.class.incでプロキシ設定

プロキシがある場合はextlibのSnoopy.class.incにて設定する。
ここらへんはSmartyもそうだけど、独自のextendするクラスを作ったほうがいいかもしれない。

あれ?

こちらのブログで、defineしている位置が変な気がする。
http://www.lucky-bag.com/archives/2005/05/hot_entry.html

*1:は良いのだけど、もしかしたらちゃんとエスケープ処理とか必要なのではないかと・・・。RSSのdescriptionってコメントとか入った気がするし・・・