node.jsのtwitterモジュールを使ってみた作業メモ (1)

**注意:** ここは作業メモ、大した情報は無いですょ。

なんとなく、node.jsの勉強会に参加してみたりしたので、何かつくろうかなぁと思い、
ひとまずTwitterをいじってみることにしました。
もっと丁寧な解説ページはいくらでもあると思うので、ここは完全に単なる自分の作業メモとして書いていきます。

## ひとまず動作させてみる

### Twitter developer credentialを取得する

まずは [Twitterのサイト](https://apps.twitter.com/) からクレデンシャルを取得する必要があるようで。
Create an applicationをつついて、出てきたフォームに必要事項を記入。

* Name
* Description
* Website
* Callback URL

Callback URL以外は必須みたいですが、Websiteについては、
まだ無ければ placeholder 書いとけってことなので、Qiita のURLでも書いてときます。
アプリ名は、てけとうにtwitter-testとでもしておきます。 **← 後程失敗の原因になります**

で、同意して Createもげもげ ってボタンを押したら怒られました。

    Error
    You must add your mobile phone to your Twitter profile before creating an application. Please read https://support.twitter.com/articles/110250-adding-your-mobile-number-to-your-account-via-web for more information.

ええええええ……。

まぁ、登録しないと何もできなさそうなので、
Twitterのサイトからプロフィールのモバイル登録して、先程のフォームでポチっとなっと…………。

    Error
    The client application failed validation: Twitter-test is already taken for Name.

うぎゃあああぁぁぁぁ…………。

しょーがないので、 "Rare's Twitter-test" としました……。
これで、無事に色々と生成できたようです。
あ、アプリ名は後で変更できるみたいですね……。

### Access Tokenの作成

クレデンシャルだけでなく、トークンも必要みたいです。
Application ManagementのサイトのKey and Access Tokensというタブをつつくと、
下の方に Create my access token というボタンがあるのでつつきます。


### node.jsのTwitterモジュール

npmでさくっとインストールします。
他にも色々モジュールあるとかいう話を読んだ気がしますが、漢らしくtwitterと名乗ってるヤツを使ってみます。

    $ npm install twitter

あ、なおバージョン的には、debから入れた以下な感じ。

    $ npm --version
    3.8.3
    $ nodejs --version
    v5.10.1


### テスト

ひとまず、 [twitterモジュールのページ][Twitter-nodejs] にあるサンプルコードを打ちこんでみます。
以下のようにコードを打ちました。

```js:twitter-test.js
var twitter = require('twitter');

var client = new twitter({
    consumer_key:        '先程取得したconsumer key',
    consumer_secret:     '先程取得したconsumer secret',
    access_token_key:    '先程取得したtoken key',
    access_token_secret: '先程取得したtoken secret',
});

var params = {screen_name: 'nodejs'};

client.get('statuses/user_timeline', params, function(error, tweets, response){
    if (!error) {
        console.log(tweets);
    }
});
```

で、以下のように実行。

    $ nodejs twitter-test.js

とすると、なんかベロベロと表示されました。
twitterのサイト経由でnodejsのツイートを見てみると、同じような内容があるので、ちゃんと取得できたもよう。

```json
[ { created_at: 'Wed Apr 20 13:41:47 +0000 2016',
    id: 722782317186392000,
    id_str: '722782317186392064',
    text: '@AfroJme @js_digest @sumithanathan strange... It works on desktop &amp; if you open it in your email. Working o
n how to fix this now.',
    entities: { hashtags: [], symbols: [], user_mentions: [Object], urls: [] },
    truncated: false,
    source: '<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>',
    in_reply_to_status_id: 722780639360106500,
    in_reply_to_status_id_str: '722780639360106496',
    in_reply_to_user_id: 44491207,
    in_reply_to_user_id_str: '44491207',
    in_reply_to_screen_name: 'AfroJme',
    user: 
     { id: 91985735,
       id_str: '91985735',
       name: 'Node.js',
       screen_name: 'nodejs',
       location: 'Earth',
       description: 'The Node.js JavaScript Runtime',
       url: 'https://t.co/X32n3a0B1h',
       entities: [Object],
       protected: false,
       followers_count: 337876,
       friends_count: 257,
       listed_count: 5214,
       created_at: 'Mon Nov 23 10:57:50 +0000 2009',
       favourites_count: 325,
       utc_offset: -25200,
       time_zone: 'Pacific Time (US & Canada)',
       geo_enabled: false,
       verified: false,
       statuses_count: 2447,
       lang: 'en',
       contributors_enabled: false,
...
```

コード中で使ってる "statuses/user_timeline" ってのについては、
[REST APIのマニュアル][REST-API-manual] の [GET statuses/user_timeline](https://dev.twitter.com/rest/reference/get/statuses/user_timeline) のところを読めばオプションやら色々と書いてあるようで。

色々と試してみよう……。

## 参考

* [Twitter API client library for node.js][Twitter-nodejs]
* [REST APIs reference][REST-API-manual]

[Twitter-nodejs]:https://www.npmjs.com/package/twitter
[Twitter-API-matome]:https://syncer.jp/twitter-api-matome
[REST-API-manual]:https://dev.twitter.com/rest/public