Home > PHP > [PHP]サイト内のページに外部のRSSを表示する

[PHP]サイト内のページに外部のRSSを表示する

前にwordpressでRSSを取得して表示という記事を書いたが、普通のWebサイトでもRSSの表示は出来る。
ヘッドラインとしてトップページにブログのRSS表示するもよし、ニュースリンクとしてランダム表示するもよし。
使うのはWordpressで使われてるのと同じRSSパーサーMagpieRSSです。

手っ取り早く動作を見てみる::

  1. magpierss-0.72ダウンロードして解凍
  2. 表示したいページと同じ階層にフォルダUP
  3. 表示したいページをPHPにする
  4. 表示したいページにrequire('magpierss-0.72/rss_fetch.inc');を書く
  5. $rss = fetch_rss($url);として、$urlに表示したいRSSのフルパスを書く
  6. print_r($rss);を書く

cacheディレクトリは自動的に作成される。(magpierssフォルダ内の不必要なものは削除してもいい)
ずらずらっとRSSが表示されると思います。が、多分文字化けしてるはず。

デフォルトの文字コードがISO-8859-1になってるので、
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');を追加する。
ほかの設定は前の記事に少し書いてあります。

ここまでのまとめソース

PHP:
  1. <?php
  2. define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
  3. require('magpierss-0.72/rss_fetch.inc');
  4. $rss = fetch_rss("http://tenderfeel.xsrv.jp/feed/");
  5. print "<pre>";
  6. print_r($rss);
  7. print "</pre>";
  8. ?>

出力形式はMagpieRSS Objectの中に、[items]として配列で各記事の情報が入っています。

このブログ(wordpress)の場合はこんな感じ

HTML:
  1. [items] => Array
  2.         (
  3.             [0] => Array
  4.                 (
  5.                     [title] => FireFox3正式版リリース(FireFox2との併用)
  6.                     [link] => http://tenderfeel.xsrv.jp/memo/185/
  7.                     [comments] => http://tenderfeel.xsrv.jp/memo/185/#comments
  8.                     [pubdate] => Wed, 18 Jun 2008 02:52:22 +0000
  9.                     [dc] => Array
  10.                         (
  11.                             [creator] => Tenderfeel
  12.                         )
  13. ....以下省略

FC2ブログの場合はこんな感じ

HTML:
  1. [items] => Array
  2.         (
  3.             [0] => Array
  4.                 (
  5.                     [about] => http://ex.blog.fc2.com/blog-entry-1.html
  6.                     [link] => http://ex.blog.fc2.com/blog-entry-1.html
  7.                     [title] => テスト
  8.                     [description] =>  ああああああ
  9.  
  10.                     [content] => Array
  11.                         (
  12.                             [encoded] =>
  13.  ああああああ
  14.                         )
  15.  
  16.                     [dc] => Array
  17.                         (
  18.                             [subject] => 未分類
  19.                             [date] => 2008-06-10T20:16:56+09:00
  20. ....以下省略

配列のkeyとか並び順が全然違うのが分かると思います。

各記事のRSS情報を処理するためにはforeachで。

PHP:
  1. foreach ($rss->items as $item ) {
  2. }

インスタンス$rssのitemsに入ってる配列を1つずつアレコレするよ、っていう繰り返し文。

タイトルに記事へのリンクを貼ってみる

PHP:
  1. foreach ($rss->items as $item ) {
  2.     $title = $item[title];
  3.     $url   = $item[link];
  4.     echo "<li><a href=$url>$title</a></li><br>";
  5. }

$itemは[0] => Array()の部分になるので、値を取り出すには配列のkeyを[]に入れて$itemの後につけます。
さらに配列になってる場合は、$item[dc][creator]のように書きます。

以下はFC2ブログ用に適当に書いてみたソース

PHP:
  1. foreach ($rss->items as $item){
  2.         $title = $item[title];
  3.         $url   = $item[link];
  4.         $times = strtotime($item[date]);
  5.         $time = date('Y/m/d', $times);
  6.            
  7.         print "<div class=\"blog\">";
  8.         echo "<h2><a href=\"$url\">$title</a></h2>";
  9.         echo "<p class=\"date\">".$time."</p>";
  10.  
  11.         $encoded = $item[content][encoded];
  12.         $summary = $item[summary];
  13.         preg_match("/<img[\w\d\W\s]+?\s\/>/i",$encoded, $matches);
  14.         print ($matches[0]);
  15.         print "<p>".$summary."</p>";
  16.         print "</div>";
  17. }

日時の整形

上のソースで言うと$item[pubdate]を2008/00/00の形にする

PHP:
  1. $times = strtotime($item[pubdate]);
  2. $time = date('Y/m/d', $times);
  3. //時間まで出すならこっち
  4. $time = date('Y/m/d H:i:s', $times);
  5. print $time;

経過時間で表示

WP-MakuPuppetでやってる、投稿日時からの経過時間を表示

PHP:
  1. $time = strtotime($item[pubdate]);
  2. if($time!=null){
  3.     if ( ( abs( time() - $time) ) <86400 ){
  4.         $h_time = sprintf( '%s 前', human_time_diff( $time ) );
  5.     }else{
  6.         $h_time = date('Y/m/d', $time);
  7.     }
  8.     $timestamp = sprintf( '%s','<a title="' . date('Y/m/d H:i:s', $time) . '" href="'.$link.'">(' . $h_time . ')</a>' );
  9.        
  10. }else{
  11.        
  12.     $timestamp='';
  13. }
  14. echo $timestamp;

ある条件に当てはまる記事だけ表示

たとえばカテゴリーがwordpressの記事だけとか

PHP:
  1. if(strpos($item[category],"wordpress")){
  2. }

記事内の画像を取得

RSSに画像タグが入ってれば抜き出せます。下記ソースはFC2ブログ用。
wordpressは全文配信なら出来る…?このブログは抜粋配信なのでタグ除去されてました。

PHP:
  1. $encoded = $item[content][encoded];
  2. preg_match("/<img[\w\d\W\s]+?\s\/>/i",$encoded, $matches);
  3. print ($matches[0]);

正規表現はだいぶ適当です。

for文

foreachの代わりにfor文使えば取得数とか決めれます。
若干書き方が変わるので次のソースを参考にしてください

PHP:
  1. for($i=0;$i<5;$i++){
  2.     $title = $rss->items[$i][title];
  3.     print $title."<br />";
  4. }
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Comments:0

Comment Form
Remember personal info

Trackbacks:1

Trackback URL for this entry
http://tenderfeel.xsrv.jp/php/233/trackback/
Listed below are links to weblogs that reference
[PHP]サイト内のページに外部のRSSを表示する from WebTecNote
pingback from トップページにdeliciousブックマーク+コメント表示成功!!! » みきょうやのぶろぐ 08-12-20 (土) 19:29

[...] まずWordPress でトップページ専用のテンプレートを作成する覚え書き | [k]idこちらのサイトでdeliciousブックマーク表示部を分離させてやるところから始めたんだけど現在使用しているテーマだと<?php~?>でくくってやらないと認識しないところでまずつまづいてそれが終わったらこちらを参考にして[WP]wordpressでRSSを取得して表示 - WebTecNoteみるもget_rssやwp_rssコマンドで収得したRSSがなぜか文字化けしてしまう問題にぶち当たり結局、用意された便利関数を使わず同じページの「yahooのITmediaニュースを表示するように変更してみた」を例にして打ち込んでやると文字化けの問題は解消ブックマーク時に書き込んだコメントも表示させたくていろいろ試すとecho $item['summary']でコメントが表示されることを確認(これは$item['description']でも表示できるかも)ここまででだいたいやりたいことはできあがったんだが現在サイドバーに表示させてるdeliciousのfeedだと日付が表示できるんですよね~ということで日付の表示の仕方を四苦八苦いったいどこに格納されてるんだ~とrss.phpのソースを開いてみたりしたものの見つからずんでdeliciousのfeedのソースを開いてみると日付にpubDateのデータ名が!これだーとばかりに早速適応してみるもそもそも構造自体をよくわかってなかったので肝心のデータの格納されている場所がわからず本当にデータとして取り込んでいるんだろうか?と悩みながらもようやく表示に成功!!そして同じくこちらの[PHP]サイト内のページに外部のRSSを表示する - WebTecNote日時の整形を参考にして年月日の形への表示も成功!やっと満足のゆく形にできたぞーーー!!! [...]

Home > PHP > [PHP]サイト内のページに外部のRSSを表示する

最近の投稿
最近の修正
  • そういえばまだMooToolsのフォームバリデーターについて書いてない 14 hrs回前
  • Chromeが早速赤さんのブログトップをキャプしなすった。まさに外道。 19 hrs回前
  • 月額98円てww http://www.quicca.com/ 19 hrs回前
  • 若いおなごにみつぐおやじたちの気持ち…今なら分かる!! 1 day回前
  • 誕生日プレゼントにヒャッホイする妹かわゆす 1 day回前
  • More updates...

Powered by Twitter Tools

Tag Cloud
Tool&AD
メタ情報

Return to page top