search
LoginSignup
28

More than 5 years have passed since last update.

posted at

updated at

Node.js+ExpressでTwitter APIをさわる

使うもの

基本の型をつくる

パッケージのインストール

1.package.jsonをつくる

""にしてるので最新が落ちる。
バージョンしてしたければ、"express": "3.2.
"のようにする。

package.json
{
    "name": "node-sns",
    "version": "0.0.1",
    "private": true,
    "dependencies":{
        "express": "*",
        "twitter": "*"
    }
}

2.インストール

npm install

本体

ルーティングファイルを指定しているところだけ注意。
ルーティングファイルを別ファイルにしていて同じディレクトリのroutes.jsということ。

app.js
'use strict';
var http = require('http');
var express = require('express');
// ルーティングファイルを指定
var routes = require('./routes');
var app = express();
var server = http.createServer(app);

routes.configRoutes(app, server);

server.listen(3000);
console.log('Listening on port %d in %s mode', server.address().port, app.settings.env);

ルーティング

app.allapi/*というurlでアクセスされたときの共通処理を記述している。

/api/twitter/searchというurlでアクセスされたときにtwitter.searchを呼んで結果を返している。
このtwittervar twitter = require('./twitter');のとおり、別ファイルのtwitter.jsを指している。

routes.js
'use strict';
var configRoutes;
var url = require('url');
var twitter = require('./twitter');
var urlInfo;

configRoutes = function(app, server) {
    app.get('/', function(request, response) {
        response.redirect('/index.html');
    });

    app.all('/api/*', function(request, response, next){
        // クエリー文字列を含めてurl情報を取得(trueオプションでクエリ文字列も取得)
        urlInfo = url.parse(request.url, true);
        // jsonでレスポンス(外部の人もアクセスできるようにAccess-Control-Allow-Originを設定)
        response.contentType('json');
        response.header('Access-Control-Allow-Origin', '*');
        next();
    });
    app.get('/api/twitter/search', function(request, response) {
        twitter.search(urlInfo,
            function(result){
                response.send(result);
            }
        );
    });
}

module.exports = {configRoutes: configRoutes};

Twitter API処理

Twitter APIのアカウント作成

以下にアクセスしてログインする。

[Create New App]する。

API KEYSタブで次の作業をする。
[Cange App Permissions]
[Create my access token]

で、以下をメモ。
API key
API secret
Access token
Access token secret

環境変数設定

node-twitterのサイトをみると、Twitterのキーは環境変数に設定するといいよとあるのでそうする。
Macだったら.bash_profileとかで以下のように書いて、source ~/.bash_profileするかターミナルを再起動する。

export TWITTER_CONSUMER_KEY="YOURS"
export TWITTER_CONSUMER_SECRET="YOURS"
export TWITTER_ACCESS_TOKEN_KEY="YOURS"
export TWITTER_ACCESS_TOKEN_SECRET="YOURS"

Twitter API処理

とりあえず、検索だけ。
リクエストのクエリ文字列をそのままTwitter APIのオプションにする。
とりあえず、qとcountだけ。

search以外のメソッドを追加したときは、最後のexportsに追加するのを忘れないように。

twitter.js
var Twitter = require('twitter');

var client = new Twitter({
  consumer_key: process.env.TWITTER_CONSUMER_KEY,
  consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
  access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY,
  access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET,
});

//キーワードで検索
function search(urlInfo, callback){
    var options = {};
    if( urlInfo.query.q ) {
        options.q = urlInfo.query.q
    }
    if( urlInfo.query.count ) {
        options.count = urlInfo.query.count
    }
    client.get('search/tweets', options, function(error, tweets, response){
        callback(tweets);
    });
}

module.exports = {
    search: search
}

動かす

1.server起動

node app.js

2.アクセス

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
28