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;
}
コメントで追記してましたが(汗)
■楽しみながら、攻めつづけたい・・・(ヤフーブログ攻略?) 更新情報■
↓記事からのトラックバック(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
自サイト(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