PHPでMagpieRSSを使ってRSSリーダ作成し、トップページに埋め込みました! | 楽しみながら、飲みつづける!(おうちカクテルの作り方とレシピ)

PHPでMagpieRSSを使ってRSSリーダ作成し、トップページに埋め込みました!

嫁はん妊娠から出産~育児っと、、、NSR活動を自主規制してるので (∀`*ゞ)エヘヘ
自サイト(http://www.yamasita.info/ )の更新ネタもあまりなく ヽ(´Д`;)ノアゥア...
 
Web上に分散してるNSRに関する情報を、もっと有効活用できるように情報共有したいなー
なんて漠然と思いつつ、、、ブログの更新情報(RSS配信)を更新日で並べて表示とかどうかな?
んっと、自サイトにRSSリーダー機能を追加してみるか!?っと思いつき (゚з゚)イインデネーノ?
 
…で、RSS(XML)ファイルの読込みなどをWebで検索して情報収集して下調べ o(゚Д゚ = ゚Д゚)o キョロキョロ
 
要求事項(僕のニーズ)は… ( ゚д゚)ホスィ…
 1.複数のRSSファイルを読み込んで、トップページに5件ほど、あとは全件表示したい!
 2.複数のブログ記事を、日付で逆ソートして最新記事を上にして表示したい!
 3.できればPHPスクリプトで作成できれば、後々メンテナンスが楽かも?(Perlはシンドイ…)
 
後輩F嶋くんが、「XMLパーサーを利用すればXML読込みできますよー」だそうで調べてみたけど・・・
RSSファイルに特化したMagpieRSS(RSSパーサー)の方が簡単そうだったので使ってみましたよ!
 
MagpieRSS - PHP で使える RSS パーサー。  ←このページを参考に作業しました!
 
まずは、MagpieRSS(RSSパーサー)の最新版をダウンロード⇒ http://magpierss.sourceforge.net/
2006年10月18日時点では、magpierss-0.72.tar.gzが最新のダウンロードファイルでした。
 
すぐにダウンロードして、解凍して、さくらのレンタルサーバ にFTPでアップロード作業!!!
 
 【ディレクトリ構成】
  www/(トップページがあるディレクトリ)
   │
   └ magpierss/ rss.php(※作成するPHPファイル…さくらのレンタルサーバ では属性:755で動作)
      │     rss_cache.inc
      │     rss_fetch.inc
      │     rss_parse.inc
      │     rss_utils.inc
      │
      ├ extlib/ Snoopy.class.inc
      │
      └ cache (※ディレクトリは自分で作成、属性:777で書き込み可に!)
まぁ、基本的には、解凍後の*.incファイルextlib/ディレクトリを利用しますよ♪ φ(`д´)メモメモ...
 
作成するRSSリーダー(rss.php)の仕様を考えてみると… (´ε`;)ウーン…
 1.表示件数を指定できる(引数で表示件数を渡す)
 2.複数のRSSファイルを指定して読み込み、更新日付でソートしてまとめて表示する
 3.新しい情報(何週間以内とか)には、NEW!マークとか付けて区別を付けたい
 4.自分のブログ以外のRSSファイルは、表示部分をちょっと変えて表示できたり …くらいかな
 
仕様もまとまったし、PHPファイルを秀丸エディタで、ガリガリ作成・・・ φ(`д´)カキカキ
【rss.php】
 
※2008年11月18日追記…プログラムソース表示が改変される為、画像で貼り付けました↓


 
↑せっかくブログで公開するので、PHP作成の参考になれば…っと思いコメント多めに入れてます。
まぁ、簡単に注意点と、解説でも?なんちゃってプログラマなのでアテにならんかも~?苦笑)
 
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); //文字コード化け対策
↑ですが、デフォルトだと文字コードがISO-8859-1に指定されて文字化けするんでUTF-8に指定
 
  //1週間以内の記事なら「NEW!」画像を表示
  $week_timestamp = mktime(date(G), date(i), date(s), date("m"), date("d")-7, date("Y"));
  if ($date_timestamp > $week_timestamp) {
    $linkstr .= "~(略:NEW!画像のタグ)~";
  }

  ↑現在時刻を取得して1週間前のタイムスタンプ形式にして、比較して1週間以内にはNEW!追加
 
  //記事更新日時(UNIXのタイムスタンプ型⇒年月日)
  $date_timestamp = $item[date_timestamp];
  ↑MagpieRSSの7.0~だと、タイムスタンプ形式で日付を取得できるようでソート用キーで利用
  //ソート用の配列に挿入(配列のキーはタイムスタンプ型の更新日時)
  $rssarray["{$date_timestamp}"] = $linkstr;
  ↑タイムスタンプ形式をキーに、リンク用の文字列を値として連想配列で各ブログ情報をまとめる
krsort($rssarray); //連想配列をキー(記事更新日時:タイムスタンプ型)で降順にソート
↑全てのブログ情報を取得したら、タイムスタンプ形式のキーで最新頭にくるようにソート
 
あとは、SSIを使えるようにしてるので、トップページ には、表組とインクルード文を追加更新
 <!-- ■ブログ最新情報 5件 -->
 <table summary=" " border="0" cellpadding="0" cellspacing="0" width="100%">
  <!--#include virtual="magpierss/rss.php?maxnum=5" -->
 </table>
 
?maxnum=5 ←この部分で最新5件を表示するように引数で指定してますよ
 
 
実際の表示は↓みたいな感じになりました♪ (*´σー`)エヘヘ
 

 
 
全件表示をする別ページ にも、同じように表組とインクルード文で作成してます。
 <table border="0" cellpadding="0" cellspacing="5" width="100%" summary="Links">
  <!--#include virtual="../magpierss/rss.php" -->
 </table>
 
こっちは引数を指定してないので、全件表示しますよ! (*´σー`)エヘヘ
 
このやり方だと、1つのPHPファイル2つのHTMLページに違う表示で対応できるので
RSSファイルを追加したり、PHPファイルを修正したりは、1ファイル修正なので、メンテが楽なんです♪
 
久しぶりに、自サイトの機能強化したような気が…RSSリーダー機能便利かも? いい(≧∇≦)b
 
 
えっと、ブログの登録数が増えてきて「全てのブログ最新情報」で表示すると、かなり古い情報も
各ブログサービスによって、RSSファイル内の記事量が違うみたいだ アワワ ヽ(´Д`;≡;´Д`)丿 アワワ
 
なので、過去1ヶ月分の記事を表示するように早速修正作業が入りましたよ(汗)
 
  //ソート用の配列に挿入(配列のキーはタイムスタンプ型の更新日時)
  $rssarray["{$date_timestamp}"] = $linkstr;
  
  ↓1ヶ月以内の記事か?を比較して、1ヶ月以内なら配列に追加するように変更

  //1ヶ月以内の記事なら…ソート用の配列に挿入(配列のキーはタイムスタンプ型の更新日時)
  $monthly_timestamp = mktime(date(G), date(i), date(s), date("m")-1, date("d"), date("Y"));
  if ($date_timestamp > $monthly_timestamp) {
    
$rssarray["{$date_timestamp}"] = $linkstr;
  }

 
コメントで追記してましたが(汗)

 

 ・ライブドアブログのRSSファイル対応(rss_utils.inc 内の一部の処理を変更)

 ・「twitterでつぶやく」機能を追加(RSSで表示してるブログ記事をtwitterで簡単につぶやける機能)
 
の部分を画像で追加しておきます(ソースが変になるので画像で表示…汗)↓
 


 
 
 
■楽しみながら、攻めつづけたい・・・(ヤフーブログ攻略?) 更新情報■
 ↓記事からのトラックバック(TB返し含む)のやり方教えるばい!!〔2006/10/18(水) 午後 0:46〕
 http://blogs.yahoo.co.jp/yamasita_94nsr/41152972.html
 
 
 
---
楽しみながら、攻めつづける!
http://www.yamasita.info/
楽しみながら、攻めつづけたい・・・(ヤフーブログ攻略?)
http://blogs.yahoo.co.jp/yamasita_94nsr