スポンサーリンク

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 = “//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. airmash.life より:

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

    賢者の贈り物: RSSを表示するツール(PHP)…

  2. seek より:

    PHP初心者です、挑戦したのですが、どうしても、表示が文字化けしてしてしまいます。
    サーバーの設定などが必要なのでしょうか?

  3. だい より:

    ばんわ。私も久々に書いてみました。
    $site_title = mb_convert_encoding($ch[‘title’], “UTF-8”, “auto”);
    というところで、文字をエンコードしているのですが、僕が取り入れようとしたRSSは大体UTF-8という文字だったので、”auto”で文字コードを自動判定>UTF-8に変換としております。これはMobavleTypeで出力するページUTF-8で書かれているので、表示するページ(このページのソースを見ればわかるとおもいますが)にあわせてそうしました。
    お使いのサーバがどうなっているのかわかりませんが、たしかPHPのインストール時に、エンコーディングを指定するところがあったと思います。(PHPインストールで検索すればでてくるでしょう)
    それに合わせ、エンコーディング部分を改良すればうまくいくと思いますが。。。文字化けした部分が、何コードになっているか、調べてみるといいです。ブラウザの表示>エンコードで色々試してみれば、文字コードはわかると思います。

  4. だい より:

    追記です。文字をカットしているところが、マルチバイトの場合はうまくいかないことがあるみたいです。
    これは、2バイト、1バイトの混在した文字列「aあ」などの場合、2バイトでカットすると、「a+あの半分」となってしまうからです。
    #これでかなり苦労しました。
    「mb_?」で始まる関数は、マルチバイト対応なので、文字数カットしてから、エンコードしました。エンコードの順番は考えないといけませんね。
    #ただ、読み込むRSSがUTF-8なので、エンコードの必要は
    #必要ないと思います。ただ、他の文字コードの場合を
    #考えてこうしておきました。
    また、このソースでは、半角の文字だけの場合も、短くなってしまうので、改良したら僕に教えてください。(笑)
    文字コードは日本語を使う民族としてはつらいところですね。私もエンジニアのはしくれなので、精進いたします。
    また、何かございましたら、情報共有しましょう。

  5. PHPでRSSで取得した新着記事をサイトに表示

    私が持っている、chii2.comのドメインのトップページ改装の際、自分が運営中…

タイトルとURLをコピーしました