« Special dealsなiPod mini買っちゃった | メイン | marimekko unikko iPod miniケース »

2005年03月09日

Magpie RSS

仕事で作っているサイトでRSS配信を始めた、と数日前のエントリーに書きましたが、それとは反対に、今度はRSSからHTML表示するプログラムを作成してみました。

流れとしては以下のような感じ。

1.更新情報は全てMySQLに入れてしまって、情報追加毎にRSSを作成。
2.上記で作成したRSSを読み込み更新情報ページを表示

普通なら、自分のサイトなのにわざわざRSSを読み込まずにMySQLから直接更新情報を取得すればいいのですが、あえて、RSSから読み込むことにしました。それはRSSを表示する環境を作っておくと後々便利だなと思ったからもありますが、それ以上に、BlogPeopleのようなものを自分でやってみたいという好奇心の方が強いかも。

RSSからHTML化するには全て自分でプログラムを書くこともそれほど難しくはありませんが、通常はXMLパーサやRSSパーサといった汎用的なプログラムを使います。

で、今回使ったのがPHPのRSSパーサとしてはおそらく一番有名なMagpie RSS
簡単です。はっきり言って、これ使えばPHPの知識など無くても他サイトのRSSを取得して表示することが可能です。
ブログでサイドバーに任意のRSSを表示させるのも、BlogPeople等を使わずに手軽に表示させることができます。

MagpieRSS - PHP で使える RSS パーサー。

という日本語のわかりやすいページがあってワタクシごときがあんまり説明することもないので、実際にMYCOM PC WEBのRSSを取得して表示するサンプルスクリプトなどを書いてみます。

/*サンプルここから*/
<?php
  require_once 'rss_fetch.incへのパス';
  $url = 'http://pcweb.mycom.co.jp/haishin/rss/index.rdf';
  $rss = fetch_rss($url);
  $title = $rss->channel['title'];
  $title = mb_convert_encoding($title, "euc", "auto");
  $link = $rss->channel['link'];
  print "<h2><a href=\"${link}\">$title</a></h2>\n";
  print "<dl>\n";
  foreach ($rss->items as $item ) {
    $title = $item['title'];
    $title = mb_convert_encoding($title, "euc", "auto");
    $url = $item['link'];
    $itemday = date('Y/n/j',strtotime(substr($item['dc']['date'],0,10)));
    $youbi = array(0 => '(日)', 1 => '(月)', 2 => '(火)', 3 => '(水)', 4 => '(木)', 5 => '(金)', 6 => '(土)');
    $mday = date('w',strtotime(substr($item['dc']['date'],0,10)));
    $itemtime = date('G:i',strtotime(substr($item['dc']['date'],11,8)));
    print "<div class=\"part\"><dt>${itemday} $youbi[$mday] ${itemtime}</dt><dd><a href=\"$url\">$title</a></dd></div>\n";
  }
  print "</dl>\n"
?>
/*サンプルここまで*/

これだけ。チョー簡単ですね。
前述MagpieRSS - PHP で使える RSS パーサーで書かれていたサンプルスクリプトに多少追記しています。
W3CDTFを変換するのをどうしようかちょっと悩みましたが、とりあえず、日付と時間を文字位置で取得するようにしました。

これを実際に組み込んだものがこれです。

注意点としてはMagpieRSS - PHP で使える RSS パーサーのコメントにも書かれていますが、現在最新版である0.71では日本語が文字化けします。回避策として古い0.61のrss_parse.incを上書きインストールします。

投稿者 Utayume : 2005年03月09日 13:22| 04 Blog /05 Work(Perl, PHP, etc)

AD

ベルメゾンネット ニッセン セシール ムトウ IMAGEnet DHCオンラインショップ 白鳩/京都発インナーショップ

トラックバック

このエントリーのトラックバックURL:
http://ondes-martenot.info/MT/mt-tb.cgi/364

このリストは、次のエントリーを参照しています: Magpie RSS:

» MagpieRSS を応用すると色々出来る from nJOY BLOG
4月11日の記事に引き続き「MagpieRSS」について。 nJOY のトップページに表示させるだけなら前回のスクリプトで満足していますが、応用すればこんな事... [続きを読む]

トラックバック時刻: 2005年04月21日 18:44

» エラってる、エラってる! from からまんブログ
からまんのトップページには、ここのブログの最新投稿が5件表示されるようになっておるのですが、コレにはMagpie RSSなるものを使っておりますです。RSSパー... [続きを読む]

トラックバック時刻: 2005年08月04日 23:54

» MagpieRSS from ひな。小屋:にっき
本家の「ひな。小屋」のトップに、この日記の最新情報を載せるにあたって、 以下のサイトを参考にさせていただきました。 やっと思い通りの表示になりました。... [続きを読む]

トラックバック時刻: 2006年01月19日 11:02

» 音ログを埋め込みRSSリストで表示する from MILKrepes
このサイトに切り替えてから、音ログを利用して、管理人が現在視聴している音楽情報を... [続きを読む]

トラックバック時刻: 2006年08月06日 11:46

» Magpieを導入してみる from 俺様パンチは書くことがあるのか!?
常々から思っていた「MTの新着情報をTopPegeに表示させる」を決行してみる。... [続きを読む]

トラックバック時刻: 2009年03月22日 21:00

コメント

MagpieRSS を検索していて訪れました。
RSS2で使用されている、RFC822形式の$pubdateはどのように加工してMysqlDBに挿入していますか?

おしえてください。

投稿者 カイドウ : 2005年08月05日 15:55

カイドウさん、コメントありがとうございます。

ここで書いたプログラムでは、MySQLへインサートする日付データはRSSのものではなく、PHPのdate関数を使い「date('Y-m-d H:i:s')」として取得した日時です。
もしRSSの日時をデータベースにインサートするならば、時差を統一する必要がありますね。日本国内のRSSしか扱わないのであれば、JSTで決め撃ちしてしまっても良いと思います。具体的な方法は実際にやったことがないので即答はできませんが、難しくはないと思います。

あまり回答になっていなくてすいません。

投稿者 うた夢 [TypeKey Profile Page] : 2005年08月06日 01:10

恐れ入ります。サンプルで書かれていますスクリプトをお借りして商用利用での使用は可能でしょうか?

投稿者 ゆめゆめ : 2009年05月10日 01:05

ゆめゆめ様

著作権を主張できるスクリプトでもないので、当方としてはご自由にお使いになって構いません。
ご要望があればご希望の機能も追加できるかもしれません。
ただし、MagpieRSSの使用許諾についてはマニュアル等をお読みください。

投稿者 うた夢 : 2009年05月11日 02:19

ご返信ありがとうございます。
また、スクリプトの使用許可ありがとうございます。
今後も楽しみにブログ拝見させていただきます。
ありがとうございました。

投稿者 ゆめゆめ : 2009年05月12日 21:45

はじめまして。

上記のレスを読みましてお尋ねしたいのですが、こちらのソースで
タイトル、日付が出力されていますが、これにプラスして本文も
出力する事は可能でしょうか。
特に文字制限などは必要なく、本文が出力できるソースを探しているのですが、
中々見つからなくて困っております。

お手数ですがソース書いていただけましたらよろしくお願いします。

投稿者 ametyoko : 2009年08月11日 18:01

ametyokoさま

MagpieRSSのソースを見てみますと、各エントリーの本文(というかRSSの本来の目的としては「概要」)は「description」で取得できるようです。

以下のようなソースで実現可能です。
http://ondes-martenot.info/blog/archives/rss_sample2.txt
出力してみると以下のようになります。
http://ondes-martenot.info/blog/archives/rss_sample2.php

もちろん、元のRSSにdescriptionが入っていなければ表示できません。
ご参考になれば幸いです。

投稿者 うた夢 : 2009年08月11日 18:54

すいません、確認遅くなりました。

早速の返信・回答ありがとうございました!
試してみたいと思いますので、またできましたら書き込みさせていただきます。

投稿者 ametyoko : 2009年08月17日 09:47

休みを挟んでしまったので検証遅くなっていまいました。

問題なく表示できました。ありがとうございました!
ただ直下にあるのは構文的に具合悪いので
そこだけ修正させていただきました。

投稿者 ametyoko : 2009年08月20日 11:12

ametyokoさま
お返事恐れ入ります。
htmlに関しては適当に書いておりますので、もちろんご自身の使用方法により変更してください。
今後ともよろしくお願いいたします。

投稿者 うた夢 : 2009年08月20日 11:21

AD

Mac ソフトのことなら act2.com デル株式会社 ioPLAZA【アイ・オー・データ直販サイト】 Just MyShop(ジャストシステム)