個別記事
外部の RSS を PHP で取得
- この記事が属するカテゴリー
- web&blog
ありがたくも、拙記事なんぞをはてなブックマークや dei.icio.us などの ソーシャルブックマークでブックマークして頂いてもらっちゃったりしているわけで、なんとも恐縮に感じていたり、いなかったり。んでもって、どうせなら興味を持って頂いた記事を紹介するかっつうことで、そんなに Hot なわけじゃないのに Hot entry なるページを作っちまいました。ウヘ:-P
とりあえず今回は、はてなブックマークにブックマークされている当サイトのエントリー一覧の RSS を取り込んでみますた。外部の RSS を取り込むって場合、CGI や JavaScript を使ってゴニョったり、JavaScript を生成してくれるサービスなんかがあったりするんだけど、今回は MagpieRSS を使って PHP で取得してみた。参考にさせて頂いたのは、下記のサイト。
RSS を読み込むために用意するもの
MagpieRSS から magpierss-0.71.1.tar.gz をダウンロードして展開し、RSS を表示させたいファイル(当サイトの場合 hotentry.html)と同じディレクトリに下記をアップ。
- rss_cache.inc
- rss_fetch.inc
- rss_parse.inc
- rss_utils.inc
- extlib
さらに cache というディレクトリを同じ階層に作成。このままだと、2 バイトの文字が化けてしまったんだけど、magpierss-0.6 (旧バージョン)をダウンロードし、rss_parse.inc のみを上書きしたら大丈夫だった。コメントにて (o) さんより教えて頂き、ファイルを入れ替えなくてもdefine('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); を require_once 'rss_fetch.inc'; の後に追加することで解決。
コードを挿入
RSS を表示させたいファイル(当サイトの場合 hotentry.html)に以下のコードを挿入して完了。参考サイトでは、タイトルのみを ul で表示だったんで、dl を使って概要(description)も表示するようにした。
<?php
error_reporting(E_ERROR);
require_once 'rss_fetch.inc';
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
$url = 'http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fwww.lucky-bag.com';
$rss = fetch_rss($url);
$title = $rss->channel['title'];
echo "<h3>$title</h3>\n";
echo "<dl>\n";
foreach ($rss->items as $item ) {
$title = htmlspecialchars($item['title']);
$description = htmlspecialchars($item['description']);
$url = htmlspecialchars($item['link']);
echo "<dt><a href=\"$url\">$title</a></dt>\n";
echo "<dd>$description</dd>\n";
}
echo "</dl>\n";
?>
強調部分は取得したい RSS の URL を指定している。mb_convert_encodingdefine('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); 内の UTF-8 となっている部分は、RSS を表示させたいファイル(当サイトの場合 hotentry.html)の文字コードに合わせている。
(o) さんよりコメントにて教えて頂き、コードを手直ししました。
おまけ
Hot entry だけ拡張子が .php なのはアレだったんで、.htaccess に下記を追加し、.html でも PHP ファイルとして認識させるようにした。
AddType application/x-httpd-php .html
それと、xml 宣言部分の <? が php の省略タグだと認識されてエラーになっちゃうんで、同じく .htaccess に下記を追加して省略タグを無効にした。
php_flag short_open_tag Off
2005-05-18T22:34:45+09:00
| コメント (3)
| トラックバック (3)
|
関連性が高いエントリー 5 件
- はてなブックマークに概要が反映されなくなった
- del.icio.us にインポート機能が追加
- del.icio.us のブックマークを表示するスクリプト
- del.icio.us の for:username タグ
- del.icio.us のブックマークを export
トラックバック
- このエントリーのトラックバックURL:
- http://WWW.lucky-bag.com/cgi/mt/mt-tb.cgi/233
このリストは、次のエントリーを参照しています: 外部の RSS を PHP で取得:
- MT hxxks さんからのトラックバック
- Re: 外部の RSS を PHP で取得
- php_flag short_open_tag Off の方法でも間違いではありませんが、 .htaccess を使わない方法もあります。 [続きを読む]
- 2005年05月19日 00:17
- Trivial Tracks さんからのトラックバック
- PHP版多機能RSSリーダ 正式リリース
- 機能概要 サイト、ブログ上であらゆる他サイトRSSを読み込んで表示できる ネットワークのタイムアウト時間変更 文字コードの詳細設定 BlogPeopleの... [続きを読む]
- 2005年12月15日 04:10
- Craranの日記 さんからのトラックバック
- サイトURLからRSSのURLを取得する。PHPでヘッダーを見て…
- <? $url = $_GET[’url’]; $html = file_get_contents($... [続きを読む]
- 2005年12月20日 19:06
コメント
- (o) さんからのコメント
![[TypeKey Profile Page]](http://www.lucky-bag.com/nav-commenters.gif)
文字化け周りですけど、0.7系だとrequire_once 'rss_fetch.inc';の後に以下のように追加しておくだけでmb_convert_encoding相当のことを内部的にやってくれるようになっています。
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
ファイルを変更したり、置き換えたりする必要はないので簡単ですね。
あとですね、そのままだとRSSが取得できなかったときに、ページにエラーメッセージが表示されてしまいます。以下のように書いておくと、エラー表示を抑制できます。
error_reporting(E_ERROR);
- 2005年05月19日 00:58
- (o) さんからのコメント
![[TypeKey Profile Page]](http://www.lucky-bag.com/nav-commenters.gif)
以下のエントリーにMSN SearchのRSS出力をMagpieRSSを使って表示する例を示しています。
http://as-is.net/blog/archives/000958.html上記の例でも考慮していますが、$item[description]などをhtmlspecialcharsでエスケープしたほうがXSS対策的にはよいです。
- 2005年05月19日 01:19
コメントしてください
コメント内ではタグは一切使えません。コメント内にてタグを表記したい場合は、お手数ですが、文字実体参照を利用して < を < 、> を > とそれぞれ置き換えてください。