mixiのあしあとAPI発掘
mixiが新しく出したmixiステーションがすばらしいです。その裏側が。
mixiにログインした状態で http://mixi.jp/atom/tracks/r=2/member_id=myMixiID にアクセスするとatomで自分のページのあしあとがフィードされます。ちなみにmixiステーションが送っているリクエストは以下の通り。
GET /atom/tracks/r=2 HTTP/1.1
X-WSSE: UsernameToken Username="ku@example.com", PasswordDigest="passwordDigest8jrjEdO61Bx8c=", Nonce="Y0NonceLYj0=", Created="2007-06-29T03:04:30Z"
User-Agent: mixi station/v1.4 (by glucose)
Host: mixi.jp
Cache-Control: no-cache
こんなところにglucoseが。ためしていませんが、ふつうにWSSE認証であしあとが取得できそうです。
興味深いのは
http://mixi.jp/atom/tracks/r=2/にリクエストを送ると
<?xml version="1.0" encoding="utf-8"?>
<service xmlns="http://purl.org/atom/app#" xmlns:atom="http://www.w3.org/2005/Atom">
<workspace>
<atom:title>mixi tracks collection</atom:title>
<atom:author>
<atom:name>ku</atom:name>
</atom:author>
<atom:link rel="http://mixi.jp/add_diary.pl" href="http://mixi.jp/add_diary.pl?id=26756" title="日記を書く" type="text/html"/>
<atom:link rel="http://mixi.jp/show_profile.pl" href="http://mixi.jp/show_profile.pl?id=26756" title="プロフィール確認" type="text/html"/>
<atom:link rel="http://mixi.jp/list_friend_group.pl" href="http://mixi.jp/list_friend_group.pl" title="グループの追加と編集" type="text/html"/>
<collection href="http://mixi.jp/atom/tracks/r=2/member_id=26756">
<atom:title>mixi tracks</atom:title>
</collection>
</workspace>
</service>
というのが帰ってくるところ。もしかして日記もそのうちatomで書けるようになるんでしょうか。
自分のお目当てだったフォトアルバムは /atom/r=3 にマップされていました。http://photo.mixi.jp/atom/r=3 にGETを送ると以下の通り。
<?xml version="1.0" encoding="utf-8"?>
<service xmlns="http://purl.org/atom/app#" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:quota="http://mixi.jp/atom/ns#quota">
<workspace>
<atom:title>mixi photo upload api</atom:title>
<quota:storage used="1215187" limit="104857600"/>
<collection href="http://photo.mixi.jp/atom/r=3/member_id=26756">
<atom:title>photo album</atom:title>
</collection>
<collection href="http://photo.mixi.jp/atom/r=3/member_id=26756/album_id=1796477">
<atom:title>my first mixi photo album</atom:title>
<accept>image/jpeg</accept>
<quota:items used="25" limit="100"/>
</collection>
</workspace>
</service>
collectionのところは自分が持っているアルバムの一覧が入っています。
/atom/r=3 だけは最近作ったからなのかWSSEでないと認証されないようになっていました。ブラウザからだと
X-WSSE authentication required
と出てきます。
作るときは /atom/r=3/member_id=myMixiID に
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://purl.org/atom/app#" xmlns:permit="http://mixi.jp/atom/ns#permit">
<title>JPG</title>
<id>urn:uuid:34738eef-5515-4ee5-869e-378bcce203d5</id>
<author><name /></author>
<content />
<summary>jpeg album</summary>
<updated>2007-06-29T12:05:29+09:00</updated>
<app:control>
<permit:access>public</permit:access>
</app:control>
</entry>
こういうのを投げていて、アップロードするときは
/atom/r=3/member_id=myMixiID/album_id=1797272に
画像ファイルの中身だけをPOSTで送ってるっぽいです。
POST /atom/r=3/member_id=myMixiID/album_id=1797272 HTTP/1.1
X-WSSE: UsernameToken Username="ku@example.com", PasswordDigest="HPasswordDigestKSeJ/8JOcFFc=", Nonce="swNonceSPBU=", Created="2007-06-29T03:05:44Z"
Content-Type: image/jpeg
Slug: googleapi
Content-Length: 12304
Accept-Language: ja
User-Agent: mixi station/v1.4 (by glucose)
Host: photo.mixi.jp
Cache-Control: no-cache
Cookie: BF_SESSION=26756_000000000000000000000000000000000000_1; BF_STAMP=1d42d71000000000000000002bbd
アップロード後のレスポンスは
HTTP/1.1 201 Created
Date: Fri, 29 Jun 2007 03:05:44 GMT
Server: Apache
Location: http://photo.mixi.jp/atom/r=3/member_id=26756/album_id=1797272/photo_id=1125137947
Content-Length: 439
Content-Type: application/atom+xml;type=entry
Connection: close
X-Pad: avoid browser bug
です。
だれか実際にWSSEでリクエストつくって送ってみてください!
検証完了。ほんとにふつうにWSSEで認証してあげれば写真がアップロードできました。アルバムを作るところは面倒だったのでアップロードの部分だけ。実際はアルバムのIDを取得してくる必要あり。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Authen::Wsse;
use LWP::UserAgent;
use HTTP::Request::Common;
my $id = 'ku@example.com';
my $passwd = 'password';
my $ua = LWP::UserAgent->new;
$ua->credentials('photo.mixi.jp:80', '', $id, $passwd);
my $res = $ua->post(
'http://photo.mixi.jp/atom/r=3/member_id=myMixiID/album_id=1797272',
'Content-Type' => 'image/jpeg',
'content' => join "", <>
);
warn $res->content unless $res->code == 201;
exit;
あと mixi notifyにはAtomが使われている – F.Ko-Jiの「一秒後は未来」 で運営者からのお知らせが取れる話等が書かれてます。
URIからすると /atom/r=1 系のAPIもありそうですがmixiステーションをちょこっとみた限りでは不明。おそらくmixiステーションの聴いた曲を送信するためのAPIだと思われます。

5 Comments
Jump to comment form | comments rss [?] | trackback uri [?]