PHPでRSSを取得&表示
18 2 月 2008今回は、PHPでRSSを取得して、表示までしたいと思います。 さらに、前回(PHPで一覧ページ自動作成3)で作った「index.php」を利用して、 そのRSSのタイトルを一覧ページにて取得できるように改良したいと思います。 例によって、「 サンプルページ 」 を作っております。 まず、「 MagpieRSS: RSS for PHP 」こちらのページより、最新ヴァージョンの 「 magpierss-0.72.tar.gz 」をダウンロードします。 ※2008/2/17現在 それを解凍すると、中身はこんな感じになっていると思います。

その中で使うのは、 rss_cache.inc ← ファイル ① rss_fetch.inc ← ファイル ② rss_parse.inc ← ファイル ③ rss_utils.inc ← ファイル ④ extlib ← フォルダ ① Snoopy.class.inc ← extlib の中身の ファイル ⑤ と、cache というフォルダです。 ← フォルダ ② cache は新規作成です。 これを、下記で編集する 「 index2.php 」 と同じディレクトリにアップロードしてください。 で、RSSを表示するファイルを作成します。 名前は、何でもいいです。当サイトは、index2.php、index3.php、index4.php、という感じです。 ※面倒であれば、RSS-INDEX こちらをどうぞ。 ちなみに、「 RSSナビ 」ここに行けば、RSSのリンクがいろいろありますよ。
<?php $sname = $_SERVER['SERVER_NAME']; $https = $_SERVER['HTTPS']; $file = basename($_SERVER['SCRIPT_NAME']); $dir = dirname($_SERVER['SCRIPT_NAME']); if ($https != "on") { $protocol = "http://"; } else { $protocol = "https://"; } ///////////////////////////////////////////////////////////////// // // // 設定はここから // // // ///////////////////////////////////////////////////////////////// // // ↓RSSを配信しているところのRSSのURLを入力 $newsurl = 'http://www3.asahi.com/rss/national.rdf'; // // ↓サーバーから見た自分のトップディレクトリ 例(/~hogehoge/) // スラッシュで始まりスラッシュで終わる。 $topdir = "/"; $url = $protocol . $sname . $topdir; // // ディレクトリ用画像ファイルを指定 $img = "/img/folder.gif"; // // CSSファイルがあれば指定する。 $css = "sub.css"; // // 上のリストと、コピーライトのところに表示する名前 $back_site = "lunq.net"; // // コピーライトの表記① $copy[0] = "Copyright © 2008"; // // 上のリストと、コピーライトのところに表示する名前のURL $back_url = "http://www.lunq.net/"; // // コピーライトの表記② $copy[1] = "All Rights Reserved."; // // ↓表示したい件数 $kensuu = 20; // // これより下は、変更したければ変更する $cssurl = $url . $css; $dirimg = $url . $dirimg; $fileimg = $url . $fileimg; // ///////////////////////////////////////////////////////////////// // // // 設定はここまで // // // ///////////////////////////////////////////////////////////////// if($dir == "/") { $dirname = " トップディレクトリ"; $titleurl = $url; } else { $urlorg = substr($dir, 1); $dirname = str_replace("/", " > ", $urlorg); $urlencode = urlencode($dir); $urlencode = str_replace("+", "%20",$urlencode); $urlencode = str_replace("%2F", "/",$urlencode); $urlencode = substr($urlencode, 1); $titleurl = $url . $urlencode . "/"; } require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $rss = fetch_rss($newsurl); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "SJIS", "auto"); $count = count($rss->items); print("<!DOCTYPE html PUBLIC ¥"-//W3C//DTD XHTML 1.0 Transitional//EN¥""); print(" ¥"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd¥">"); ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <title><?php print($sname . " > " . $title); ?></title> <meta http-equiv="Content-Language" content="ja" /> <meta name="ROBOTS" content="noindex,nofollow" /> <meta name="Title" content="<?php print($sname . " > " . $title); ?>" /> <link rel="stylesheet" href="<?php print($cssurl); ?>" type="text/css" media="screen" /> </head> <body> <div id="header"> <h1><a id="top"></a><a href="<?php print($titleurl); ?>"><?php print($title); ?></a></h1> <h2><?php print($sname); ?></h2> </div> <div id="navigation"> <?php print("<a href=¥"" . $back_url . "¥">" . $back_site . " - Home</a>"); print(" > " . $sname . " > " . $dirname . "¥n"); ?> </div> <div class="main"> <?php print($dirname . "¥n > " . "¥n合計 : " . $count . " 件¥n<hr />¥n"); $value = urlencode($filename); $value = str_replace("+", "%20",$value); print("<h5><img src=¥"" . $img . "¥" alt=¥"" . $alt . "¥" /> "); print("<a href=¥"$value¥">このフォルダの上に行く</a></h5>¥n"); print(" <ul>¥n"); $p = $_GET["p"]; if ($p != 1) { $p = $p * $kensuu; } else { $p = 1; } $rss->items = array_slice($rss->items, $p, $kensuu); foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "SJIS", "auto"); $url = $item[link]; print(" <li><a href=¥"$url¥">$title</a></li>¥n"); } print(" </ul>¥n<hr />"); $ans = $count % $kensuu; $ant = $count / $kensuu; if($ans == 0) { $j = $ant - 1; } else { $j = floor($ant); } ?> <p>ページ切替 <?= $kensuu ?> 件単位<br /></p> <p><a href="./<?= $file ?>?p=0">0</a> <?php for($i=0 ;$i<$j-1; $i++){ ?> > <a href="./<?= $file ?>?p=<?= $i+1 ?>"><?= $i+1 ?></a> <?php } if ( $j > 0 ) { print(" > <a href=¥"./" . $file . "?p=" . $j . "¥">" . $j . "</a></p>"); } ?> <hr /> </div> <div class="footer"> <?php print("<p> " .$copy[0] . " <a href=¥"" . $back_url . "¥">" . $back_site . "</a> "); print($copy[1] . "</p>¥n"); ?> </div> </body> </html> |
上記で作ったファイルと、その前に解凍したファイル ① ~ ⑤ と、 フォルダ ① ② をアップロードすれば、表示されると思います。 一応、件数指定でページ切り替え機能を実装しています。 ちなみに、上記のファイルはそれだけで1つのページなのですが、 元々あるページに埋め込むこともできます。 その場合は、下記のようなファイルを作るか、 直接表示したい部分に貼り付けてください。 ファイルを作った場合、例えば名前を「 news.php 」 とした場合、 表示したいページの表示したい部分に <?php include('news.php'); ?> と記述すれば表示されると思います。 もちろん、ファイル ① ~ ⑤ と、フォルダ ① ② を忘れずにアップロードしてください。
<?php //表示したい件数を指定 $kensuu = 10; //これを表示するページの文字コードを指定 $encode = "SJIS"; //↓RSSを配信しているところのRSSのURLを入力 $newsurl = 'http://nikkeibp.jp/jp/flash/index.rdf'; // require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $rss = fetch_rss($newsurl); $title = $rss->channel['title']; $title = mb_convert_encoding($title, $encode, "auto"); print("<h1>$title</h1><br><br>\n"); $rss->items = array_slice($rss->items, 1, $kensuu); foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, $encode, "auto"); $url = $item[link]; print("<a href=\"$url\">$title</a><br>\n"); } print("<br>\n"); ?> |
次に、そのファイルをいっぱい作った時のために、それを表示する一覧用のページを作ります。 これは、あってもなくてもOKです。ただ単に一覧表示するだけなので。 内容は、前回(PHPで一覧ページ自動作成3)で作った「index.php」を改良します。 今回の追加項目は、 PHP の、title を読み込んで表示するようにしました。 なお、以下は編集の箇所しか記述しておりません。 コピーがウザかったら、こちらをどうぞ。
下記のリストに一緒にアップロードするファイル名を追加する // 一覧で表示させたくないものを記述 // たくさんあれば、追加をしても大丈夫です。 $b[0] = $file; // このファイルの変数名 表示したければ、"" にしてください。 $b[1] = $css; // CSSの変数名 表示したければ、"" にしてください。 $b[2] = "."; // このフォルダという意味 表示したければ、"" にしてください。 $b[3] = ".htaccess"; $b[4] = ".recycle"; $b[5] = "Thumbs.db"; $b[6] = "cache"; ← 追加 $b[7] = "extlib"; ← 追加 $b[8] = "rss_cache.inc"; ← 追加 $b[9] = "rss_fetch.inc"; ← 追加 $b[10] = "rss_parse.inc"; ← 追加 $b[11] = "rss_utils.inc"; ← 追加 218行目からの下記の行の下(226行目)にタイトルを抽出するために追加する。 if ($pathext == ('html') || $pathext == ('htm')) { $fp = fopen($filename,"r"); $ref_str = fread($fp, 1000); if (eregi("<title>(.*)</title>", $ref_str, $out)) { $title = strip_tags ($out[1]); } else { $title = $filename; } ← 225行目 以下、226行目から13行分追加する。 -------------------- ここから -------------------- } else if ($pathext == ('php')) { $fp = fopen($filename,"r"); $ref_str = fread($fp, 1000); if (eregi("$newsurl = '(.*)';", $ref_str, $out)) { $title = strip_tags ($out[1]); require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $rss = fetch_rss($title); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "SJIS", "auto"); } else { $title = $filename; } -------------------- ここまで -------------------- } else { $title = $filename; } |
上記のように編集をしたら、それも一緒にアップロードします。 すると、他のインデックスページよりRSSのタイトルを取得して、 リンクのタイトルとして表示されていると思います。 これで完了です。
No comments yet
