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