LoginSignup
0
0

More than 1 year has passed since last update.

twitter stream apiで遊ぶ

Last updated at Posted at 2022-11-27

概要

 twitter stream apiでワールドカップのtweetをpostgreに格納してみた。

準備

 nodeは必須。
npm i twitter-api-sdk
npm i pg
で、postgresqlは11だが、これは設定してあるのが前提
 table名はtweetで設定、id[serial],created_at[timestamp],author_id[varchar],text[varchar]
 ここまであれば、以下のファイルを次のコマンドで動かすだけ
 node pgst.js

source

pgst.js
Tw = require('twitter-api-sdk');
client = new Tw.Client(process.env.twitter_bearer_TOKEN);
const pg = require('pg');
pgclient = new pg.Client({database: 'yourdbname'});

async function main() {
  await client.tweets.addOrDeleteRules(
    {
      delete: {
         ids: ['1595343805821358081' ,
              '1595372533401866241' ]
      }
    }
  );
  const rules = await client.tweets.getRules();
  console.log(rules);
  const stream = client.tweets.searchStream({
    "tweet.fields": ["author_id", "geo","created_at"],
  });
    let cc = 0;
    const sql ="INSERT INTO tweet (created_at, author_id, text) VALUES ($1, $2, $3)"
    await pgclient.connect();
  for await (const tweet of stream) {

      msg = tweet.data.text.replace(/\n/g,"");
      tm = tweet.data.created_at;
      aid = tweet.data.author_id;
      let values = [tm,aid,msg];
      //console.log("----- insert start--")
      const res =await pgclient.query(sql,values);
      process.stdout.write("count="+cc+" "+msg.substring(0,80)+"\r");
      cc = cc+1;
  }
}

main();

動作に関する条件

 最初にclient.tweets.addOrDeleteRulesでルールを設定してあると、2回目に実行する場合はそれを再利用する。このため、上のコマンドではdeleteしているが最初は
 add:[
{ value:'ワールドカップ -is:retweet'},
{ value:'コスタリカ戦 -is:retweet'}
]
で、設定してその後はそのまま使うということだ。

 数分で1000tweetを集めたが、そんなに集めても仕方がないので、時々走らせて様子をみるが、
ABEMAと思われるauthor_idが山ほどtweetを出していて、これを削除するruleはどうするのかなあ?と思っているところ。author_idからscreen_nameを取得するのはまたapiで確認するよていだが、これを取得するように設定することもできるはずである。

0
0
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
0
0