RSSを表示するツール(PHP)

感想おまちしてます!

(言い訳)すいません。休み中どこにもいってないので、思い出し笑えません。
はてなアンテナを表示することに成功したのだが、
インデックステンプレートに入れると若干めんどくさい。
できれば、再構築せずにPHPファイルをUpするだけでできんもんかな。
というわけで、PHPを書いてみた。
参考にさせていただいたのがレッツPHP!さんだ。
このサイトは専門学校の卒業制作以来訪れていなかったが、PHPの入門としては最適だ。
PHPのリファレンスを見ながら書けるようになるまでは、
人の書いたものを見て改良することで、かなりの勉強になるな。
僕と同じようなこと思った人のため、情報は公開しておこう。
僕もさんざん助けてもらってるからね。
あと、最近こういうTipsを書いているのは、
僕が一応「えんじにあ」であり、バオバブとかを育て名前をつけている痛い26歳という
イメージを払拭するためでもある。(なんてね)
処理の速さや変数名とかイケてないのが、まだまだ未熟っす!
改良後のソースは以下の通り。

rssreader.php
<?php
require “RSS.php”;
// URL指定
$rdf = $_GET[‘u’];
// 表示件数
$num =$_GET[‘n’];
// 表示文字数
$cutto = $_GET[‘c’];
// WEBサイトのタイトル表示
$site = $_GET[‘site’];
// ■NEW画像のパス
$newimg = “http://daipresents.com/weblog/new.gif”;
// 現在時間
$nowtime = time();
// ■NEWを付加する場合のレンジ(現在からの秒)
$newtime = 60 * 60 * 12; //12時間以内
$r =& new XML_RSS($rdf);
$r->parse();
if (!$ch = $r->getChannelInfo()) continue;
$site_title = mb_convert_encoding($ch[‘title’], “UTF-8”, “auto”);
$site_title = htmlspecialchars($site_title);
$site_link = $ch[‘link’];
if($site == “on”){
echo(‘<h2>’ . $site_title . ‘ &gt;&gt;<a href=”‘ . $site_link . ‘” target=”_blank”>link</a></h2>’);
}
echo(“<ul>”);
if($num > count($r->getItems())){
$num = count($r->getItems());
}
for($i=0; $i < $num; $i++){
$val = $r->getItems();
$title = strip_tags($val[$i][‘title’]);
$title = mb_substr($title, 0, $cutto);
$title = mb_convert_encoding($title, “UTF-8”, “auto”);
$link = htmlspecialchars($val[$i][‘link’]);
$strdate = $val[$i][‘dc:date’];
$tdate = substr($strdate, 0, 10);
$ttime = substr($strdate, 11, 8);
$datatime = strtotime($tdate . ” ” . $ttime);
echo(‘<li><a href=’ . $link . ‘ target=”_blank”>’ . $title . ‘</a>’);
if($datatime > ($nowtime – $newtime)){
echo(‘<img src=”‘ . $newimg . ‘” alt=”new” />’);
}
echo(‘<br />(‘ . date(“m/d H:i”, $datatime) . ‘)</li>’);
echo(“\n”);
}
echo(“</ul>”);
?>

競艇ダメダス.NETさんのソースも参考にさせていただき、
New画像の表示なども行っている。
画像のパスと、新着の範囲は個人で設定すればいい。
使用するパラメタは
・u・・・RSSのURL
・n・・・表示件数
・c・・・タイトルの文字数
・site・・・サイト名を表示するかどうか(on or off)
RSS自体はrss.jp.netさんや、読兎さんを参考にすればいい。
表示件数やタイトルの文字数もお好み。
サイトのタイトルの表示については、
長いサイト名に対するトリミング(文字列のカット)は行っていない。
僕仕様の為、このようにしたのだが、そのかわりにh2タグでタイトルを
表示するかどうかのスイッチをパラメタに入れている。(あとめんどかった)
呼び出すページでは

<?php include(“http://■/rssreader.php?u=http://■.xml&n=10&c=20&site=on”); ?>

と書いてファイルを読み込む。(読み込むページはPHPじゃなきゃだめね。)
これによってRSSのリストを返してくれるという簡単なものだ。
注意としては、ソース上で読み込んでいるRSS.phpというRSSパーサファイル?も必要となるので、
レッツPHP!さんPEARさんからもらってくるとよい。
苦労したのが、表示する文字列を表示文字数で短くするところだ。
マルチバイトの関数を使っても文字化けした。
で、RSSを一応UTF-8にエンコードしているのだが、どうやらここがくさい。
(数年前も日本語の文字化けは苦労したのを思い出した。)
で、取得したタイトルをまずカットし、そしてエンコードという順番にしたら大成功。
なぞじゃ。
このエンコードはくさいな。いらないかもしれない。

$title = mb_substr($title, 0, $cutto);
$title = mb_convert_encoding($title, “UTF-8”, “auto”);

あと、XMLの日付の書式から、タイムスタンプを作るところがわからなかったので、
強引なドリブルをしている。(日付文字列のカット!)
また、RSS2.0では日付部分の要素名がちがうっぽい。
日付の表示がうまくいかないかもしれないので、そんときは日付を取得するところで、
要素名をかえるといいかも。
これをつくったことにより、簡単なポータルサイトを作れた。
画像イメージ

コメント

  1. 萬福庵 より:

    だいさん、はじめまして!
    RSSをサイトで表示する方法を色々調べていて、貴サイトに辿りつきました♪
    早速導入させていただきました!
    ありがとうございました。
    ねんざ。。。お大事になさってくださいね。
    また遊びに来させていただきます。

  2. だい より:

    萬福庵さんはじめまして?。お気遣いありがとうございます?。サイトを拝見させていただきましたが、すごいよい感じだと思います。私はニュースの表示メインだったのですが、Googleニュースがでてきて微妙になったので、萬福庵さんのアイデアは勉強になりました。