node.js で mixi Graph API を扱うライブラリの紹介

だいぶ前にnode.jsで遊んでいて、そうだ mixiAPIをnode.jsから叩いてみよう!と思って書いたライブラリを思い出したのでそれの紹介。

利用の流れ

READMEそのままだけど。

var api = require('./mixi/graphapi/client');
var client = api.createClient({
    'consumerKey' : 'your consumer key.',
    'secret'            : 'your consumer secret. ',
    'redirectUri'     : 'you setting redirect uri',
    'device'            : 'pc'
});

// 認可画面のURLを取得する
var authPageURL = client.authPageUrl(['r_profile', 'r_profile_status']);

// アクセストークンとリフレッシュトークンを取得
var tokens;
client.getTokens('authCode', function (response) {tokens = response;});

// アクセストークンを再発行
client.refresh(tokens.refresh_token, function (response) {
    tokens = response;
});

// APIへアクセスする
var result;
client.request({
    'accessToken' : tokens.access_token,
     'target'      : 'people/@me/@friends'
 }, function (response) {
     result = response;
});

このコードと、サンプルコードを見れば認証認可まわりは何となくわかると思うので他に必要なAPIを使用したい場合は公式のドキュメントを参考にする。

実際にサンプルを実行して動きを確認する

node.jsをインストール

まあ、OS毎のインストール方法はいろんなところで紹介されていると思うのでここでは簡単に、githubから落として来る方法を紹介

$ git clone https://github.com/joyent/node.git node && cd node
$ ./configure
$ make && make install
$ ./node
> console.log('hello node.');

動いたらOK

mixi Graph APIを利用するサービスを登録する

↓ここの新規サービス追加から。
https://sap.mixi.jp/connect_consumer.pl

リダイレクトURLはとりあえず動くものを見るために http://localhost:8080/callback を指定。

確認→登録まですると確認メールが送信されてくるので、記載されているURLからmixiに移動。
あとは、管理サービス一覧に移動するとさっき登録したサービスが増えているのでタイトルをクリックして詳細へ。

クレデンシャル情報にある Consumer KeyとConsumer SecretがAPIを利用する際に必要になる。

mixi Graph API のクライアントライブラリを使ったサンプルを実行

まずgit cloneする。

$ git clone https://github.com/hayaishi/mixi-graph-api-node.js.git graphapi && cd graphapi

あとは、sampleディレクトリに移動してサンプルコード(friend_list.js)を開いて先ほど発行されたConsumer KeyとConsumer Secretを埋め込む。

埋め込んだら、サンプルコードを実行する。
サンプルコードはport番号8080で起動するのですでに動かしているものがある場合は注意。

$ ../../node/node friend_list.js

無事に起動すればOK
http://localhost:8080にアクセスすると次の画面が表示される。

authって書いてあるリンクを押すとmixiに遷移するので、「同意する」を押す。

無事にマイミクの一覧が表示されていたら成功。
ちなみにマイミクは親密度の順にソートできるオプションがあったのでそれを使って並べ替えてみた。

画面に表示させているニックネームがエスケープされていなかったりするのはとりあえず最小の環境で動くサンプルを用意したかったから。そのうち気が向いたら修正する。