LoginSignup
36
34

More than 3 years have passed since last update.

Twitterの特定のハッシュタグでつぶやかれたツイートを収集する

Posted at

概要

node.jsで特定のハッシュダグでつぶやかれたツイートを収集して、csvファイルに保存します。

Twitter Developer Platformにアプリを登録

1.登録画面右上の「Create an app」をクリック

アプリ登録画面

twitter01.png

2.用途の選択

今回は「Making a bot」にしています。
image.png

3.ツイッターアカウントの確認

現在、ログインしているツイッターのアカウントで問題ないか聞いてきます。
どこに住んでいるか、名前を聞かれるので記入
twitter02.png

4.使用用途を細かく聞かれる

以前はそんなに聞かれなかったのに、現在は色々聞かれます。
下記の2つだけ入力してそれ以外は「No」にしています。

・In English, please describe how you plan to use Twitter data and/or APIs. The more detailed the response, the easier it is to review and approve.

・Please describe how you will analyze Twitter data including any analysis of Tweets or Twitter users.

image.png

入力した内容はグーグル翻訳で適当に翻訳しました。

In order to investigate the client's products and reputation, I want to collect tweets posted with a specific hashtag, aggregate them, and make suggestions for improving their products and websites to the client.

5.規約などに同意する

規約に同意、送信されたメールアドレスから確認画面へ
遷移すると開発者アカウントの審査に入ります・・・・・・・

・・・・・ってここまで、アカウント審査の画面やったんかい!!
どうやら色々と仕様が変わったようです。昔はもっと簡単だったのに・・・

審査はいつ通るかわからないので(審査落ちるかも)既存のアプリがある場合はそちらをお使いください。

6.API key取得

「Keys and tokens」の「API key」「API secret key」「Access token」「Access token secret」をメモっておく

2020年1月20日に、また何かが変わるようです。

twitter03.png

開発ソース

package.json

{
  "name": "twitter_test",
  "version": "0.0.1",
  "dependencies": {},
  "devDependencies": {
    "dotenv": "^8.2.0",
    "fs": "0.0.1-security",
    "twitter": "^1.7.1"
  }
}

.env

consumer_key = 'ここにAPI keyを入力する'
consumer_secret = 'ここにAPI secret keyを入力する'
access_token_key =  'ここにAccess tokenを入力する'
access_token_secret = 'ここにAccess token secretを入力する'

Githubの「.env_sample」は「.env」にファイル名を変更してください。

twitter.js

今回は比較的ツイートが多そうな「#ダイエット」で収集しています。

const fs = require("fs");
let Twitter = require('twitter');
require('dotenv').config();

let client = new Twitter({
    consumer_key: process.env.consumer_key,
    consumer_secret: process.env.consumer_secret,
    access_token_key: process.env.access_token_key,
    access_token_secret: process.env.access_token_secret
});


const main = async () => {
    const stream = await client.stream('statuses/filter', {'track':'#ダイエット'});
    stream.on('data', async data => {
        try {
            fs.appendFile("tweet/tweet.csv", JSON.stringify(data) + "\n", (err) => {
                if (err) throw err;
                console.log("正常に書き込みが完了しました");
            });

        } catch (error) {
            console.log(error);
        }
    });
};

main();

ソース(Github)

解説

「#ダイエット」でつぶやかれた時に帰ってきたJSONをtweet.csvに保存します。
※パースせずにJSONを文字列にしてそのまま保存しています。

収集方法

コマンドラインで下記を入力してenter

node twitter.js

そのままほっておいて、ツイートされると「正常に書き込みが完了しました」と表示され、どんどん溜め込んでいきます。

収集をやめる場合は「Control + c」で終了

最後に

Twitter APIの仕様も色々変わっていくので、いつまで使えるかはわかりません。
収集する場合はずっとプログラムを動かしておく必要があります。
ツイートが多すぎると、リクエスト回数の制限に引っかかると思います。

仕事中バックグランドで動かしていましたが、
2100ツイートぐらい収集出来ました。

36
34
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
36
34