私が仕事で運営してるサービスで、自分が登録したサービスをまとめてプロフィール表示させる仕組みを作っているのですが、最近、ユーザーから画像表示させたい!とかブログ記事を引っ張りたい!といった要望があったので仕組みを考えていたら、「RSS」がいいんじゃね?っていう話になって作ってみた。

ある程度自社用なので結構抜粋だけど雰囲気だけ伝わってもらえれば。
ループで回して、各種サービスのRSS先URLを作成してやるとこうなる。

// $profile['services']に各種サービスの名称を入れておきます foreach($profile['services'] as $service_name => $v){
    $rss_url = ""; $method = ""; switch($service_name){ case 'hatena_bookmark': $rss_url = "http://b.hatena.ne.jp/".$v."/rss"; $method = 'getHatenaBookmarkRSS'; break; case 'livedoor_clip': $rss_url = "http://clip.livedoor.com/rss/clips/".$v; $method = 'getLivedoorClipRSS'; break; case 'youtube': $rss_url = "http://gdata.youtube.com/feeds/base/users/".$v.
"/uploads?alt=rss&v=2&orderby=published&client=ytapi-youtube-profile"; $method = 'getYoutubeRSS'; break; case 'delicious': $rss_url = "http://feeds.delicious.com/v2/rss/".$v."?count=15"; $method = 'getDeliciousRSS'; break; case 'picasa': $rss_url = "https://picasaweb.google.com/data/feed/base/user/".$v.
"?alt=rss&kind=album&hl=en_US&access=public"; $method = 'getPicasaRSS'; break; case 'tumblr': $rss_url = "http://".$v.".tumblr.com/rss"; $method = 'getTumblrRSS'; break; case 'photozo': $rss_url = "http://photozou.jp/feed/photo_list/".$v."/all.xml"; $method = 'getPhotozoRSS'; break; case 'flickr': // まずはフリッカーIDを取得 $flickr_id = $this->getFlickrID($v); // ID取得失敗した場合 if(!$flickr_id) continue; $rss_url = "http://api.flickr.com/services/feeds/photos_public.gne?id=".
$flickr_id."&lang=en-us&format=rss_200"; $method = 'getFlickrRSS'; break; case 'twitter': $rss_url = "http://twitter.com/statuses/user_timeline/".$v.".rss"; $method = 'getTwitterRSS'; break; }
// サービスごとの配列を作成 $services_feed_data[$service_name] = array(); if($rss_url){ // file_get_contents $rss_data = @file_get_contents($rss_url); if(!$rss_data){ $error = array(); $error[$service_name] = $rss_data; $this->log($error,'services_error'); continue; } // 取得したXMLをパース if($rss_data){ $xml = $this->getXml($rss_data); // 個別メソッドで処理 $services_feed_data[$service_name] = $this->{$method}($xml); } }
}

途中に出てくるgetXML()は独自に作ったxml処理メソッド。
たいしたことしてないし、XML処理は別途探してくださいw

で、個別メソッドの一例だけどこんな感じ。

	// はてなブックマーク
	public function getHatenaBookmarkRSS($xml){
		$data = array();
		$i = 0;
		// $xml['item']内に配列で格納されている
		if(count($xml['item']) > 0 && $xml){
			foreach($xml['item'] as $num => $rdf){
				// とりあえず最新の5件
				if($i < 5){
					$data[] = array(
//						'link' 			=> $rdf['link'],
						'link'			=> $rdf['rdf:about'],
						'title'			=> $rdf['title'],
						'description'	=> $rdf['description'],
						'date'			=> date('Y年m月d日 H:i:s', strtotime($rdf['dc:date'])),
					);
				}else{
					break;
				}
				$i++;
			}
		}

		return $data;
	}

はてなブックマークを例にしたけど、他のもだいたい一緒。
統一された規格というか、綺麗な形式で戻ってくるRSS(xml,json)って素晴らしい!!
各社の独自がたまーにあるけどw

あとで知ったけど、XMLの要素すら綺麗に返してくれるライブラリーがあるっぽいww
XML_RSSだっけなー
 PEAR:XML_RSS
まぁ、細かく自分で取得したかったからいいんだっ!
中身をvar_dumpして頑張ったからいいんだorz

で、Flickrについてはちょっと特殊で、ユーザーIDが名前じゃなくて変な形式に変換してやらないと
いけないらしいので少しだけ苦労したけどまぁ3時間程度ですぐ出来た。
別途エントリーいれようw

これでRSSで情報取得して、画面に出せるぜー!
APIと違って、アクセス制限もないし取得漏れの可能性以外は素晴らしい技術だと思うんだけどなぁ。
file_get_contentsがちとカッコ悪い気もするけどまぁいいや~\(^o^)/

ソーシャルサービスのRSSまとめてくれたカイさん感謝!