mixiのあしあとAPIを使って「あしあと一覧」を作ってみた
via. http://p0t.jp/mt/archives/2007/06/mixi-stationwss.html、http://ido.nu/kuma/2007/06/29/mixi%e3%81%ae%e3%81%82%e3%81%97%e3%81%82%e3%81%a8api%e7%99%ba%e6%8e%98/
mixiも裏で色々と用意しているみたいですね。
「あしあと」がatom+WSSE認証で配信されているようなので、試してみました。WSSE認証については以下を参照ということで。
- Web Services Security UsernameToken Profile 1.0(pdf)
- はてなブックマークAtomAPIだのWSSEだの (2006-02-02)
- はてなフォトライフatomapiとは - はてなキーワード
以下サンプルですが、X-WSSEリクエストヘッダの内容を作っている部分は、PEAR::Services_HatenaとServices_Hatena - PHPの挑戦 (ハズレ日記)を参考にさせてもらいました。
つーか、ほとんどそのままですね ;-)
<?php error_reporting(E_ALL); require_once 'HTTP/Request.php'; $user = '[mixiのログインID]'; $pass = '[mixiのパスワード]'; $id = '[mixiのユーザーID]'; $url = 'http://mixi.jp/atom/tracks/r=2/member_id=' . $id; $nonce = pack('H*', sha1(md5(time().rand().posix_getpid()))); $created = date('Y-m-d\TH:i:s\Z'); $digest = base64_encode(pack('H*', sha1($nonce . $created . $pass))); $wsse_header = sprintf('UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"', $user, $digest, base64_encode($nonce), $created); $request = new HTTP_Request($url); $request->addHeader('X-WSSE', $wsse_header); if (PEAR::isError($request->sendRequest())) { die('request failed'); } $xml = new SimpleXMLElement($request->getResponseBody()); echo '<ul>'; foreach ($xml->entry as $entry) { $updated_iso8601 = $entry->updated; $updated = date('Y/m/d H:i:s', mktime(substr($updated_iso8601, 11, 2), substr($updated_iso8601, 14, 2), substr($updated_iso8601, 17, 2), substr($updated_iso8601, 5, 2), substr($updated_iso8601, 8, 2), substr($updated_iso8601, 0, 4) )); printf( '<li><a href="%s" title="%sさん">%s</a>さん (%s)</li>', $entry->link->href, htmlspecialchars($entry->author->name, ENT_QUOTES, 'utf-8'), htmlspecialchars($entry->author->name, ENT_QUOTES, 'utf-8'), $updated ); } echo '</ul>';
mixiも色々APIが出てくると面白そうなんだけどなぁ。。。
追記(2007/07/04 18:31)
PHP5の場合、digest作成のところは以下のようにも書けます。
<?php : $digest = base64_encode(sha1($nonce . $created . $pass, true));