ブログ  前の記事  次の記事  2007-07-01 

たけまる / mixi station API


2007-07-01

_ mixi station API [mixi][atompub]

mixi が "mixi station" をリリースしましたが,mixi サーバとのやりと
りに Atom Publishing Protocol (APP) を使っているようです.仕様は公
開されていませんが,調べたのでまとめておきます.ついでに,APP につ
いても説明します.最後に,API を利用したクライアントの作り方も紹介
します (Perl APP モジュールの一部のメンテナでもあるので).


■ APP の概要

APP とは,Atom という XML 文書を用いてブログなどの更新情報をやりと
りするためのプロトコルです.Atom については詳しく述べませんが,な
じみのない人は RSS の親戚だと思ってください.

APP では,サービス文書とフィードを使い分けます.従来 Atom と呼ばれ
ていたのは "フィード" になります."サービス文書" は APP で新たに追
加されました.

APP クライアントは,まずサーバに HTTP GET を送り,サービス文書を取
得します.サービス文書には,フィードを取得したりエントリを追加する
ための URI が書かれています.その URI に対して HTTP GET を送信する
とフィードを取得できます (フィードが提供されていれば).あるいは,
その URI に対して HTTP POST を送信すると,エントリを追加できます
(エントリの追加が許されていれば).

APP を利用するためにはサービス文書を取得するための URI (以下,
Service URI) が必要になります.また,認証を要求されることもありま
す.

■ mixi station API

mixi station API の Service URI は以下のようになっています.ついで
にフィードを取得するための URI (Feed URI) と,エントリを追加するた
めの URI (Album URI, Photo URI) も紹介します.

認証方法は Cookie と WSSE が使われています.Cookie の場合は,mixi
にログインしていれば,ブラウザでサービス文書やフィードをみることも
できます.

足あと
- URI
名称 HTTP Method URI
Service URI GET http://mixi.jp/atom/tracks
Feed URI GET http://mixi.jp/atom/tracks/r=2/member_id=<mixi-id>
- 認証
方式 認証データ
Cookie Session ID
WSSE ID + Password

新着お知らせ
- URI
名称 HTTP Method URI
Service URI GET http://mixi.jp/atom/notify
Feed URI GET http://mixi.jp/atom/notify/r=2/member_id=<mixi-id>
- 認証
方式 認証データ
Cookie Session ID
WSSE ID + Password

フォト
- URI
名称 HTTP Method URI
Service URI GET http://photo.mixi.jp/atom
Album URI POST http://photo.mixi.jp/atom/r=3/member_id=<mixi-id>
Photo URI POST http://photo.mixi.jp/atom/r=3/member_id=<mixi-id>/album_id=<album-id>
- 認証
方式 認証データ
WSSE ID + Password

フォトについては Feed URI がないようです.エントリを追加することは
できますが,取得することはできません (普通どおり,ブラウザで
mixi.jp にログインしてみてくださいということでしょう).

URI に含まれる "r=<数値>" という部分は意味がないようです.数値がな
んであっても,あるいはこの部分がなくても,動作します.

■ mixi station API を利用したクライアントの実装例

足あとの一覧を表示するクライアントのサンプルコードを紹介します.

クライアントオブジェクトには XML::Atom::Client を使います.
XML::Atom::Client は,WSSE をサポートしています.また,取得した
XML を適切なオブジェクト (XML::Atom::Service, XML::Atom::Feed) に
自動的に変換してくれます.

サービス文書を取得し,//collection/@href (collection 要素の href
属性) から Feed URI を取得します.その URI からフィードを取得しま
す.フィードにはいくつかのエントリが含まれており,それが足あとデー
タになります.

use HTTP::Date qw( str2time time2iso );
use XML::Atom::Client;
use XML::Atom::Feed;
use XML::Atom::Service 0.15.0;

my $ID   = 'foo@example.com';
my $PASS = 'password';
my $URI  = 'http://mixi.jp/atom/tracks';

# クライアントを設定
my $client = XML::Atom::Client->new;
$client->username( $ID );
$client->password( $PASS );

# サービス文書を取得
my $service = $client->getService( $URI );

for my $collection ( $service->workspace->collections ) {
    # Feed URI を取得
    my $feed_uri = $collection->href;

    # フィードを取得
    my $feed = $client->getFeed( $feed_uri );
    
    # 足あとを順に表示
    for my $entry ( $feed->entries ) {
        # 日本時間に変換
        my $datetime = time2iso( str2time( $entry->updated ) ); 

        my ( $link ) = $entry->links;

        # 表示 (日時,訪問者,訪問者の URI)
	print $datetime, ' ', $entry->title, ' ', $link->href, "\n";
    }
}

$URI を変更すれば,「新着お知らせ」を表示するクライアントも作れま
す.

フォトをアップロードするクライアントについては,以下のページによい
例があるので,省略します.
blog.8-p.info : mixi に写真をアップロードする

なお,XML::Atom::Service モジュールのメンテナは私なので [2007-02-13-1]
バグなどありましたら私 (takemaru _ teahut.sakura.ne.jp) まで御連絡
ください.

■ 参考サイト
mixiのあしあとAPI発掘
mixi notifyにはAtomが使われている - F.Ko-Jiの「一秒後は未来」
blog.8-p.info : mixi に写真をアップロードする
using API; mixiの非公開あしあとAPI
[mixi] mitさん - mixi stationとAtom

■ 2007-07-02 追記
サービス文書の名前空間は,APP 新仕様に合わせて変更される可能性があ
ります.そのときの対応方法をサンプルコードに追加しました.

■ 2007-09-10 追記
サービス文書の名前空間が,AtomPub 新仕様に合わせて変更されているよ
うです.XML::Atom::Service のデフォルト名前空間も新仕様に合わせま
した (v0.15.0).これに合わせて,上のソースコードを XML::Atom::Service
のバージョンを指定するように修正しました.

一言メッセージをこっそり送信できます (非公開)
 今年の西暦→
Referrer (Inside): [2007-09-10-1] [2007-07-02-1]