PHPで「rss-php」ライブラリを利用してRSSリーダ機能をリプレース

10年以上前に、自サイト用にちゃちゃっと作ってたRSSリーダー機能↓
⇒PHPでMagpieRSSを使ってRSSリーダ作成し、トップページに埋め込みました!

が…ヤフーブログがhttps化された事でヤフーブログのrssを読み込みできない問題が発生!

当時使った古い「MagpieRSS」ライブラリが更新されてなくhttps対応がそのまま無理だったので
https対応でキャッシュ機能もある「rss-php」ライブラリを利用しプログラムを書き換えました

基本的な処理はそのままで、変更点は

require_once './Feed.php';

まず「rss-php」ライブラリの読み込み

// キャッシュの設定
Feed::$cacheDir = './cache';
Feed::$cacheExpire = '1 hours';

キャッシュの設定を追加

$feed = new Feed ;
$rss = $feed->load($rssurl[$i]);

フィードの読み込みを変更

上記程度で、変数や処理はそのまま再利用できて30分程度で無事にリプレースできましたよ
今度ヤフーブログを更新して、自サイトのトップページに表示される事を確認しますかね~

参考までに↓ソースも公開しとくか…10年以上前に作った処理で結構てきとうですが(汗)

<?php
//=======================================================================
// システム名    楽しみながら攻めつづける!
// プログラムID  rss.php
// 作成者        山下 アキラ
// 作成日        2006/10/18
// 処理概要      複数RSSファイル対応でまとめて更新順表示するRSSリーダー
//
// 修正履歴      2006/10/19 ソート用配列には過去1ヵ月分の記事を対象
//               2006/10/20 全件表示の際に、登録済のブログ一覧も表示
//               2007/01/24 トップページ表示には、インテリ更新情報を表示
//               2008/08/24 アメブロのRSSに広告が入ったので非表示対策
//               2017/07/07 ヤフーブログがhttps化されMAGPIE→rss-phpへ
//=======================================================================

if (!ini_get('date.timezone')) {
date_default_timezone_set('Asia/Tokyo');
}

require_once './Feed.php';

// キャッシュの設定
Feed::$cacheDir = './cache';
Feed::$cacheExpire = '1 hours';

$maxnum = $_GET["maxnum"];	//指定された場合の表示数

//RSSファイルのURL(複数可)
$rssurl = array() ;    //初期化
//$rssurl[] = "http://rssblog.ameba.jp/yamasita-94nsr/rss.html";		//楽しみながら、飲みつづける!
$rssurl[] = "https://blogs.yahoo.co.jp/yamasita_94nsr/rss.xml";			//楽しみながら、攻めつづけたい・・・
$rssurl[] = "https://blogs.yahoo.co.jp/mimikaki2000/rss.xml";			//mimikaki監督の部屋 Ⅱ
$rssurl[] = "https://blogs.yahoo.co.jp/nistking/rss.xml";				//blogs.yahoo.co.jp/nistking
$rssurl[] = "https://blogs.yahoo.co.jp/amasadanobu/rss.xml";			//チュンピー日記
$rssurl[] = "https://blogs.yahoo.co.jp/wainsr/rss.xml";					//バイク小屋-NSR250R他!-NSR野朗
$rssurl[] = "http://moto-eng2.seesaa.net/index20.rdf";					//湘南藤沢のバイクショップ日記2 別館
$rssurl[] = "http://shochan88nsr.blog120.fc2.com/?xml";					//正ちゃんミュージアム別館

$rssurl[] = "http://blog.livedoor.jp/yamaharacing/index.rdf";			//MotoGPニュース紹介と雑感
$rssurl[] = "http://www.honda.co.jp/rss/motor.xml";						//【バイク】Hondaウェブサイト新着情報
$rssurl[] = "http://www.honda.co.jp/motorsports/rss/motorsports.rdf";	//【モータースポーツ】Hondaウェブサイト新着情報
$rssurl[] = "http://bphkkokura.exblog.jp/index.xml";					//「08CBR楽しすぎる!の山下店長ブログ」の更新情報

$myblog = 1;	//RSSファイル内の自分のブログ数(上から~何個)
$bikenews = 4;	//RSSファイル内のバイクニュース数(下から~何個)

//複数のブログ情報をまとめる配列
$blogarray = array() ;    //初期化

//複数のRSS情報をまとめる配列
$rssarray = array() ;    //初期化

//表示件数指定の場合は、NSRオーナーブログのみ
if ($maxnum != "") {
$rss_num = count($rssurl);
} else {
$rss_num = count($rssurl) - $bikenews;
}

for ($i=0;$i<$rss_num;$i++) {

$feed = new Feed ;
$rss = $feed->load($rssurl[$i]);

//ブログタイトル(文字コード:UTF-8⇒EUC)
$blogtitle = htmlSpecialChars($rss->title);
$blogtitle = mb_convert_encoding($blogtitle, "EUC-JP", "auto");

//ブログURL
$blogurl = htmlSpecialChars($rss->link);

//ブログへのリンクした文字列作成
$bloglink = "<a href=\"{$blogurl}\" target=\"blog\">{$blogtitle}</a>";

//ブログ用の配列に挿入
$blogarray[] = $bloglink;

foreach ($rss->item as $item) {
//記事タイトル(文字コード:UTF-8⇒EUC)
$title = htmlSpecialChars($item->title);
$title = mb_convert_encoding($title, "EUC-JP", "auto");

//記事URL
$url   = htmlSpecialChars($item->link);

//記事更新日時(UNIXのタイムスタンプ型⇒年月日)
$date_timestamp   = (int) $item->timestamp;
$date = Date("〔Y年n月j日 H:i〕",$date_timestamp);

//記事へのリンクした文字列作成
if ($i < $myblog) {	//自分のブログの場合は「~更新しました!」
$linkstr = "<a href=\"$url\" target=\"blognew\"><b>{$blogtitle}</b>を更新しました! {$title}</a> {$date}";
} else {				//他オーナーさんの場合は「~更新されてます」
$linkstr = "<a href=\"$url\" target=\"blognew\"><b>{$blogtitle}</b>が更新されてます! {$title}</a> {$date}";
}

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

}

krsort($rssarray);	//連想配列をキー(記事更新日時:タイムスタンプ型)で降順にソート

if ($maxnum != "") {
$newnum = $maxnum;	//ページへの表示件数(引数での指定数)
} else {
$newnum = count($rssarray);	//ページへの表示件数(配列数)
}
$count = 0;		//カウント用 初期化

//ページに表組として表示
for(reset($rssarray); $key=key($rssarray); next($rssarray)){
print "
<tr>
<td valign=\"top\"><font color=\"#FF9966\" size=\"2\" class=\"font2\">●</font></td>
<td><font size=\"2\" class=\"font2\">$rssarray[$key]</font></td>
</tr>
";

$count++;
if ($count == $newnum) {	//表示件数になったらループから抜ける
break;
}

print "
<tr><td colspan=\"2\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" summary=\" \">
<tr><td><img border=\"0\" src=\"/img/dum.gif\" width=\"1\" height=\"5\" alt=\"\"></td></tr>
<tr><td bgcolor=\"#C0C0C0\"><img border=\"0\" src=\"/img/dum.gif\" width=\"1\" height=\"1\" alt=\"\"></td></tr>
<tr><td><img border=\"0\" src=\"/img/dum.gif\" width=\"1\" height=\"5\" alt=\"\"></td></tr>
</table></td></tr>
";
}

//登録済のブログ数
$blognum = count($rssurl) - $bikenews;

//表示件数指定の場合は、全件へのリンク
if ($maxnum != "") {
/*
print "
<tr>
<td valign=\"top\"></td>
<td align=\"right\"><font size=\"2\" class=\"font2\"><a href=\"link/blognew.html\">⇒過去1ヶ月分のNSRオーナーブログ更新情報を見る!(登録ブログ数:{$blognum}件)</a></font></td>
</tr>
";
*/
//表示件数指定が無い場合には、登録済のブログを表示
} else {
print "
<tr><td colspan=\"2\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" summary=\" \">
<tr><td><img border=\"0\" src=\"/img/dum.gif\" width=\"1\" height=\"5\" alt=\"\"></td></tr>
<tr><td bgcolor=\"#C0C0C0\"><img border=\"0\" src=\"/img/dum.gif\" width=\"1\" height=\"1\" alt=\"\"></td></tr>
<tr><td><img border=\"0\" src=\"/img/dum.gif\" width=\"1\" height=\"5\" alt=\"\"></td></tr>
</table></td></tr>
<tr>
<td valign=\"top\"><font color=\"#FF9966\" size=\"2\" class=\"font2\"><b>※</b></font></td>
<td><font size=\"2\" class=\"font2\"><b>更新情報を表示しているNSRオーナーブログ数は現在{$blognum}件です。</b><br>
";

for($i=0; $i<$blognum; $i++){
$j = $i+1;
print " {$j}:{$blogarray[$i]}<br>\n";
}

print "
</font></td>
</tr>
";
}

?>

「情報セキュリティマネジメント試験」に無事に合格!ほっ

去年(平成28年度春試験)から、情報処理技術者試験に「情報セキュリティマネジメント試験」という新試験が追加されたので、今年に入ってぼちぼちマイペースに試験勉強をして4月に受験

↑無事に合格証書が届き、合格できてました。久しぶりの情報技術者試験だったので…ドキドキでしたよ。

↑参考書はamazonでレビュー良かった「出るとこだけ! 情報セキュリティマネジメント 2017年版」を利用しましたよ

今回で情報処理技術者試験は4区分(初級システムアドミニストレーター試験、基本情報技術者試験、ソフトウェア開発技術者試験、情報セキュリティマネジメント試験)の合格になりました。

秋試験まで、3ヶ月くらいなのでまた情報処理技術者試験を受けるか?検討しますかね~
昔の「ソフトウェア開発技術者試験」に合格してて、今は「応用情報技術者試験」に変わってるからチャレンジする手もあるかな?
それとも、まったく違う試験に挑戦するか!?