YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

mixi APIで遊んでみた

動機

Macにはmixiフォトアップローダが無かったり、mixi stationの調子が悪かったりして頭に来たので、スクリプトで同様のアプリケーションを作ってみようと思った。

できた物

使い方

一通りの使い方はこんな感じ。

mc = MixiClient('username','password')
tracks = mc.getTracks() # 足あとの取得(10件)
notify = mc.getNotify() # お知らせの取得
friends = mc.getFriends() # マイミク一覧の取得
update = mc.getUpdates() # 更新情報一覧の取得
albumurl = mc.createAlbum(u'旅行', u'旅行の写真') # 新規フォトアルバムの作成
mc.postPicsToAlbum(['photo1.jpg','photo2.jpg','photo3.jpg'], albumurl) # 写真はファイル名のリストで 
mc.postDiary(u'にっき',u'いきてます','photo4.jpg') # 写真付き日記の投稿

まだ修正中だったりしますので動作が不安定だったりコードが汚かったりします。すみません。

mixi API

参考

APIとしてはこの辺が参考になりました。

mixi APIは正式に公開されている物ではなく、有志の方々がWiresharkなどを用いてmixi stationmixiツールバーなどの通信データを見て書いたとのことですが、ありがたい限りです。
公開されている物をみるとmixiもWSSE認証を用いていますが、通常のWSSE認証を用いたAtomAPIとは違って、ルートエンドポントがないなど、まだまだ正式リリースをするには整っていないことが伺えます。

データの送信

前回のエントリにも書きましたが、実際にデータを送信するとなるときに必要になったのは、

  • HTTPレスポンスの本文のXMLデータの解析
  • HTTPリクエストの本文として送るXMLデータの作成方法

でした。
前者に関しては先日のエントリで触れたのでここでは省略いたします。
後者に関しては同じくminidomを用いているのですが、その辺のコードはこんな感じ。

def __createSenderXML(self, elem_dict):
    impl = minidom.getDOMImplementation() # Python2.1では動かない
    doc = impl.createDocument(None, 'entry', None)

    header = doc.documentElement
    header.attributes['xmlns'] = 'http://www.w3.org/2005/Atom'
    header.attributes['xmlns:app'] = 'http://www.w3.org/2005/app#'

    for k, v in elem_dict.iteritems():
        elem = doc.createElement(k)
        elem.appendChild(doc.createTextNode(v))
        header.appendChild(elem)

    body = doc.toxml(encoding='UTF-8')
    doc.unlink()
        
    return body

毎度おなじみのライブラリリファレンスが役立ちます。

追記

途中ファイルを更新したのに、リンク先を更新しないでいました。すみません。今は直接レポジトリのソースにアクセスするようにしています。