LoginSignup
16
18

More than 5 years have passed since last update.

Node.jsでStreaming APIを使用したJSONの書き出し

Last updated at Posted at 2015-11-02

はじめに

本記事は,TwitterのStreaming APIを使用して,特定のワードが含まれたツイートを取得し,JSONで書き出すことを目的としています.
node.jsを用いてStreaming APIを利用したツイートの取得,.json形式で保存というところまでを行います.

使用モジュール

Twitter APIについて

ツイートを取得するためにTwitter APIを利用するにあたって,大きく分けて二種類のAPIがあります.
一つはREST APIで,もう一つはStreaming APIです.

REST API https://dev.twitter.com/rest/public
Streaming API https://dev.twitter.com/streaming/overview

REST APIが,こちらからリクエストを送ったタイミングで結果を返してくれるのに対して,Streaming APIは一度接続を行った後は,ほぼリアルタイムで結果を返し続けるAPIになっています.
また,REST APIは15分間のリクエスト数に制限(指定ツイートの取得は180回/15分)があるのに対し,Streaming APIは流れてくるツイートを無制限に取得し続けます.

今回は一定時間,特定のハッシュタグが含まれたツイートを取得し続けたかったため,Streaming APIを使用することにしました.

アプリケーションキーの取得

Streaming APIを使用するには,Twitterでアプリケーションの登録と,アクセストークンの発行をする必要があります.
登録手順はこちらがわかりやすいと思うので,参考にしてみてください.

Twitter APIの使い方まとめ https://syncer.jp/twitter-api-matome

実装

サンプルコードは以下です.

stream.js
var twit = require('twit');
var fs = require('fs');
var file = 'twitter.json';
var tweet= new twit({
  consumer_key: 'TWITTER_CONSUMER_KEY',
  consumer_secret: 'TWITTER_CONSUMER_SECRET',
  access_token: 'OAUTH_TOKEN',
  access_token_secret: 'OAUTH_SECRET'
});

var getStream = tweet.stream('statuses/filter', {track: '#NowPlaying'});
getStream.on('tweet', function(tw) {
  fs.writeFile(file, JSON.stringify(tw), null, null);
  fs.readFile(file, 'utf8', function (err, tw) {
    console.log(JSON.stringify(tw));
  });
});


node stream.js

で起動し,更新があるたびにツイートを取得し続けます.

本サンプルでは,#NowPlayingが含まれるツイートを取得しています.
Streaming APIで取得してきたツイートは,もともとJSON形式で返されるため,それをそのままtwitter.jsonというファイルにfsを使って保存するという形で,JSONの書き出しとしました.

また,JSONとして保存されるのは1ツイートのみなので,更新されるたびにJSONの内容は置き換わるため,取得してきたツイートをすべて保存しておくには,別途データベースに格納するなどの方法が必要となります.

おわりに

今回,特定のハッシュタグを含んだツイートをリアルタイムに取得し,それをopenFrameworksにJSON形式で受け渡すということで,以上の実装を行いました.
Streaming APIで取得されるものにはツイート内容,プロフィールやアイコンだけでなく,位置情報なども含まれるようなので,フィルタリングして特定の情報だけを保存しておくといったことも可能です.

ご意見などお待ちしております.

2015.11.3

16
18
0

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
  3. You can use dark theme
What you can do with signing up
16
18