intime o'

アル。ダメヨ、ソンナ子供ノママジャ (辻仁成著「ミラクル」より)
node.js ntwitter 2012/04/30(Mon.)
node.js と それのプラグイン(追加モジュール?) を使ってみての感想.

ntwitterはあんまり使い方が説明されてない.
そもそもサイトがないし、ただgithubとnpmレポジトリの上にあるだけだし.
ソースを見たらoauthにtwitterのフォーマットで投げているだけだった.
使い方をまとめよう.

その前に、XMLHttpRequestがnode.jsには標準には無いんですね.
ググったら全く同じ使い方ができるようなモジュールがgithubにあった.
https://github.com/driverdan/node-XMLHttpRequest

実際、中身ではurlモジュールとかを使ってるだけなんだけど、
矢張り使い慣れたオブジェクトが使えないなら、それはもはや違う言語だよねって.

まずはコンストラクタの生成
(このくらいならreadmeにも書いてある)
var twitter = require('ntwitter');
var twit = new twitter({
    consumer_key: '6EurwJ9hznhlohvJHlemA',
    consumer_secret: 'ePJ0KSEHskh1kZyZUab6F3lcgEgOkNYFN8tGHCIRY',
    access_token_key: '342800325-4sLzrnDcaO8kJf6Cj9kGEUytC2ZO610ANzwEKouM',
    access_token_secret: 'jd1e27LuGHvlv2ldA5vaBErygVLq0u2hFDam5lcsSa4'
});
consumerkey, consumersecretはdev.twitter.comでcreate appしたらそのappに
固有なもの.access token key, token secretはユーザーとそのappを
結びつけるものであるが、開発者ならdev.twitter.comでページの上で
自分用のそれを生成できる.それを利用した.(じゃあ第三者に使わせる
アプリは作れないの?)

例えば書き込みは
// 文字列msgをツイート
var msg = "test!";
twit.post(
    "http://api.twitter.com/1/statuses/update.json",
    {status : msg},
    function(er, data){console.log(data.text);}
);
これがドコにも書いてなくて、で結局ソース見たんだけど
そんなに量が多くなくて勉強になりそうだ.

#postの引数は
(url, content, content-type, callback)
でcontent, content-typeは省略可能.callbackで詰められる.
ていうかcontent-typeってなんなのか分からないから
(url, content, callback)
でいいでしょ.

callbackに渡される引数は
(error, data)
errorは真偽値としてエラーチェックに使えばいいかもしれない.
dataは書き込む場合なら書き込みに成功した場合は
そのツイートの情報を含むようなオブジェクト.
data.text
data.user.screen_name
しょっちゅう使うのはこの2つくらいでしょう.
たぶんほとんど全部の情報が入ってるから何でもできる.

別のurlにpostかgetすればほかもできる.
https://dev.twitter.com/docs/api

GETの場合は
twit.get(
    "http://api.twitter.com/1/statuses/mentions.json",
    null,
    function(er, data) {
        console.log(data);
    }
);
例えばこれで自分へのリプライが20件読み込まれる.

一応書いたけどこれだけだったらあんまり嬉しくはない.

UserStreamが使える
ずいぶんと長く書いたけれど、今まで書いたヤツだけなら別にnode.jsじゃなくても
なんでもあるし、あんまりありがたくもない. UserStreamを簡単に使えて、
こちらが大事であって、 むしろ今までのは書かなくてもいいくらいだった.

twit.stream()関数
引数は
(method, params, callback)
であって、paramsは省略可能.

methodというのは以下のような文字列である.つまり、Stream APIとして
https://stream.twitter.com/1/{method}.json
ここに接続しようとする.{method}が引数として渡されたmethod(をescapeしたもの)である.

ただし、"user", "site"の場合は
https://stream.twitter.com/2/user.json
https://stream.twitter.com/2b/site.json
に接続する.とにかく使う側としては、数字、スラッシュ、の後から.jsonの直前までの
文字列を覚えておいてそれを書けばいいのだろう.

https://dev.twitter.com/docs/streaming-api/methods
ここを参考にすればいい. "statuses/filter" だとかそういうのだろう.

 twit.stream('user',  function(stream) {
     stream.on('data', function (data) {
         //console.log(data);
         if (data && data.user && data.text) console.log(data.user.screen_name, data.text);
         //console.log(data.user.description);
     });
     stream.on('end', function (response) {
         // 切断
     });
     stream.on('destroy', function (response) {
         // 接続の破棄
     });
     //setTimeout(stream.destroy, 30000);
 });

おおよそ、下のソースをパクった.
node.js + socket.ioでTwitterのStreaming APIを使ってみる - 大人になったら肺呼吸
 / http://d.hatena.ne.jp/replication/20120318/1332044327

 stream()でコールバック関数を渡すけどコールバック関数の中にはイベントハンドラみたいなのを
 一杯書くみたいな…?
とりあえず上のコードをシェルから起動したら延々と自分のタイムラインをリアルタイムに更新
するから面白い.まあ今更珍しくないけど.

コメ(0) | トラ(0)