2007-11-13
■[PHP] Services_MixiAPI を使ってみた 
via. mixiステーション2.2.1で追加されたAPIの発掘
やば。。。もう1ヶ月半も前のネタなので、既出かも知れません。
とはいえ、なんか色々追加されてるみたいで面白そうなので試してみました。基本的にはWSSE認証+XMLということで、mixiのあしあとAPIを使って「あしあと一覧」を作ってみた - Do You PHP はてなでやっていることと変わりありません。
mixiのAPIが増えていたので、Services_MixiAPI作ってみた - Do You PHP はてな
更に遅れること、二ヶ月弱、どれだけ波に乗り遅れてるんだ、という感じですが…
実行環境 Windows XP の xampp-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"; } } }
コメントを書く
