doublenegativeの日記 このページをアンテナに追加 RSSフィード

2007-11-13

[] Services_MixiAPI を使ってみた 16:27  Services_MixiAPI を使ってみたを含むブックマーク

via. mixiステーション2.2.1で追加されたAPIの発掘

やば。。。もう1ヶ月半も前のネタなので、既出かも知れません。

とはいえ、なんか色々追加されてるみたいで面白そうなので試してみました。基本的にはWSSE認証+XMLということで、mixiのあしあとAPIを使って「あしあと一覧」を作ってみた - Do You PHP はてなでやっていることと変わりありません。

mixiのAPIが増えていたので、Services_MixiAPI作ってみた - Do You PHP はてな

更に遅れること、二ヶ月弱、どれだけ波に乗り遅れてるんだ、という感じですが…

実行環境 Windows XPxampp-win32-1.6.3a (Apache 2.2.4, PHP 5.2.3) で、サンプルコードをほとんどそのまま使わせて頂きました。

特に問題なく利用できました。有難う御座います。

使ってみて、細かい部分で気づいた点を、以下に挙げておきます…

    • AbstractAPI.php の buildWSSEAuth 内で利用している posix_getpid() が windows 上では使えない(POSIX自体がね)
    • サンプルのマイミクへのリンクは $entry->author->url ではなくて $entry->author->uri ではないかと…(typoっぽい)
    • サンプルのあしあと表示のリンクは $entry->link->href ではなくて $entry->link['href'] ではないかと…(typoっぽい)
    • 最新アルバムを表示するための author->uri が空で返ってくる(Mixi側の仕様っぽい。。。なんでだろ?)
    • $updated に代入する値を substr( $updated_iso8601, x, y ) しているけど、私だったら date( 'Y/m/d H:i:s', strtotime( $entry->updated ) ) にする

実際に、テスト表示に使ったコード。

<?php
/**
 * Services_MixiAPI を利用したテストスクリプト
 * 
 * $Id: sampleServicesMixiApi.php 7989 2007-11-13 16:04:22Z doublenegative $
 * 
 * -------------------------------------------------------------------------------------------------
 * 以下の内容を表示する
 * 直近のあしあと、全マイミク、マイミク日記やコミュニティなどの最新更新一覧
**/

error_reporting( E_ALL );


{
	
	require_once 'HTTP/Request.php';
	require_once 'Services/MixiAPI/Factory.php';
	
	$user = '********';
	$pass = '********';
	$id   = '********';
	
	$service = Services_MixiAPI_Factory::getInstance( 
	               Services_MixiAPI_Factory::API_MODE_FOOTPRINT, 
	               $user, $pass, $id );
	$service->execute();
	$xml = new SimpleXMLElement( $service->get() );
	
	echo "<div>FootPrint</div>\n<ul>\n";
	foreach ( $xml->entry as $entry ) {
		
		printf( 
			'<li><a href="%1$s" title="%2$sさん">%2$s</a>さん (%3$s)</li>' . "\n", 
			$entry->link[ 'href' ], 
			$entry->author->name, 
			date( 'Y/m/d H:i:s', strtotime( $entry->updated ) ) 
		);
		
	}
	echo "</ul><br />\n<hr size=1 /><br />\n";
	
	
	/**
	 * マイミク一覧
	 */
	$service = Services_MixiAPI_Factory::getInstance( 
					Services_MixiAPI_Factory::API_MODE_MYMIXI, 
					$user, $pass, $id );
	$service->execute();
	$xml = new SimpleXMLElement( $service->get() );
	
	echo "<div>MyMixi</div>\n<ul>\n";
	foreach ( $xml->entry as $entry ) {
		
		printf( 
			'<li><a href="%1$s" title="%2$sさん%3$s">%2$s</a>さん%3$s</li>' . "\n", 
			$entry->link[0][ 'href' ], 
			$entry->title, 
			isset( $entry->category[ 'label' ] ) ? ' (' . $entry->category[ 'label' ] . ')' : '' 
		);
		
	}
	echo "</ul><br />\n<hr size=1 /><br />\n";
	
	
	/**
	 * マイミク日記、コミュニティなど最新更新一覧
	 */
	$service = Services_MixiAPI_Factory::getInstance( 
				Services_MixiAPI_Factory::API_MODE_WHATSNEW, 
				$user, $pass, $id );
	$service->execute();
	$xml = new SimpleXMLElement( $service->get() );
	
	
	foreach ( $xml->entry as $entry ) {
		${$entry->category[ 'term' ]}[] = $entry;
	#	echo "<pre>\n"; var_dump( $entry ); echo "</pre><br />\n<hr width=80% size=1 /><br />\n";
	}
	
	$terms = array( 'diary', 'comment', 'album', 'video', 'bbs' );
	
	
	foreach( $terms as $num => $term ) {
		
		if ( isset( ${$term} ) ) {
			
			echo '<div>' . $term . "</div>\n<ul>\n";
			foreach ( ${$term} as $line ) {
				switch ( $term ) {
					case 'diary':
						printf( "<li>%s %s</li>\n", $line->content, date( 'Y/m/d H:i:s', strtotime( $line->updated ) ) );
						break;
					case 'comment':
					case 'album':
					case 'video':
						printf(
							'<li><a href="%1$s" title="%2$s">%2$s</a> (<a href="%3$s" title="%4$s">%4$s</a>さんの%5$s)</li>' . "\n", 
							$line->link[ 'href' ], 
							$line->title, 
							$line->author->uri, 
							$line->author->name, 
							$line->category[ 'label' ] 
						);
						break;
					case 'bbs':
						printf(
							'<li><a href="%1$s" title="%2$s">%2$s</a> (「<a href="%3$s" title="%4$s">%4$s</a>」の%5$s)</li>', 
							$line->link[ 'href' ], 
							$line->title, 
							$line->author->uri, 
							$line->author->name, 
							$line->category[ 'label' ] 
						);
						break;
					default:
				}
			}
		#	if ( $term === 'album' ) { echo "<pre>\n"; var_dump( $line ); echo "</pre><br />\n"; }
			echo "</ul><br />\n<hr size=1 /><br />\n";
			
		}
		
	}
	
}