感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

PHPのMagpieRSSというRSS読み込むモジュールを使って、はてなブックマークのホットエントリーのタイトルを取得するサンプル。

<スポンサーリンク>

RSSとは

RSSはReally Simple Syndicationとか、RDF Site Summaryの略と言われる。
Webサイトの見出しや要約などを配信するXMLである。

RSSは互換性がないバージョンが混在しているのが問題となっていたため、RSSを進化させたAtomというXMLフォーマットも使われるようになった。
はてなブログもAtom Publishing Protocolで操作することができる。
http://developer.hatena.ne.jp/ja/documents/blog/apis/atom

PHPRSSを読み込むモジュールには、MagpieRSSというものがある。
RSS0.9,RSS1.0,RSS2.0,Atomに対応している。

モジュールは以下からダウンロードすることができる。
http://sourceforge.net/projects/magpierss/files/magpierss/
これをダウンロードして解答→フォルダ名をバージョン番号を取ったものに変更→PEARディレクトリに配置する。
PEARディレクトリとは、php.iniのinclude_pathに記載されているディレクトリのこと。
Windowsに入れたXAMPPでいうと、C:\xampp\php\pearのフォルダの中にmagpierssというフォルダをつっこめばいい。

それでは、MagpieRSSを使って、はてなブックマークのホットエントリを取得するサンプルを作ってみよう。
サンプルは以下の通り。
連想配列の追加とか、その辺の基本的な部分で躓いたけど、結果としていい勉強になった。

<?php

header('Content-Type: text/html; charset=UTF-8');
require_once('magpierss/rss_fetch.inc');

define('MAGPIE_CACHE_AGE', 60 * 5);
define('MAGPIE_CACHE_DIR', 'cache/');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');

class Hatebu {
	const HOTENTRY_URL = "http://b.hatena.ne.jp/hotentry?mode=rss";
	public function getHotEntryTitleArray() {
		$titleArray = array();
		$rss = fetch_rss(Hatebu::HOTENTRY_URL);
		foreach ($rss->items as $item) {
			array_push($titleArray, $item['title']);
		}
		return $titleArray;
	}

	public function getHotEntryLinkArray() {
		$linkArray = array();
		$rss = fetch_rss(Hatebu::HOTENTRY_URL);	
		foreach ($rss->items as $item) {
			array_push($linkArray, $item['link']);
		}
		return $linkArray;
	}

	public function getHotEntryTitleAndLinkArray() {
		$tmpArray = array();
		$titleAndLinkArray = array();
		$rss = fetch_rss(Hatebu::HOTENTRY_URL);	
		foreach ($rss->items as $item) {
			$tmpArray = array($item['title'] => $item['link']);
			$titleAndLinkArray = $titleAndLinkArray + $tmpArray;
		}
		return $titleAndLinkArray;
	}
}

$hatebu = new Hatebu();
$titles = $hatebu->getHotEntryTitleArray();
$links = $hatebu->getHotEntryLinkArray();
$titleAndLinks = $hatebu->getHotEntryTitleAndLinkArray();

foreach ($titleAndLinks as $title => $link) {
	$title = mb_convert_encoding($title, 'UTF-8','auto');
	$link = mb_convert_encoding($link, 'UTF-8', 'auto');
	echo "<li><a href=$link target='_blank'>$title</a></li>";
}

?>

結果はブラウザでこう表示される。
f:id:sho322:20131201233705j:plain

はてブのホットエントリのタイトルと、そのリンクが表示されている。

参考にした本

PHPによるWebアプリケーションスーパーサンプル活用編 第3版

PHPによるWebアプリケーションスーパーサンプル活用編 第3版

この本のサンプルではクラスとかは使ってなかったけど、サンプルを真似するだけではちょっと寂しかったので、Hatebuクラスを作ってみた。
このクラスにカテゴリごとに情報を取得するメソッドなんかを足していけば、PHPはてブ開発用SDKみたいのができそう(笑)
しかし、PHPは配列に追加するのもなんかやりづらいし、やっぱりちょっと苦手かもしれない。
MapをArrayList#pushすればいいじゃん、とJavaをやってる人なら思いそうだけど、うーーん。この不便さを愛せるかどうかが、12月のPHP月間を楽しく過ごせるかの鍵になりそう。