Help us understand the problem. What is going on with this article?

Node.jsでTwitterを自動化する

https://adventar.org/calendars/4650
OUCC(大阪大学コンピュータクラブ)のアドベントカレンダー12日目です。

Node.jsのtwitterモジュールでtwitterAPIを叩きました。
モジュールの更新が2017年で止まっており、一部機能が使えなくなっています。
先駆者の皆さんの記事のコードが動かないこともありました。

ツイートする

twitter APIを取得して、API key, API secret key, Access token, Access token secretを取得しました。これに関しても参照ページからほかの方の記事をご覧ください。

送信できる環境が整ったので、ひとまずtwitterモジュールからツイートしてみました。

//モジュールの読み込み
const twitter = require('twitter');

//ツイート内容
const text = 'test'

//上からAPI key, API secret key, Access token, Access token secret
const client = new twitter({
    consumer_key        : "-----------",
    consumer_secret     : "-----------",
    access_token_key    : "-----------",
    access_token_secret : "-----------"
});

client.post('statuses/update', {status: text}, function(error, tweet, response) {
  if (!error) {
    console.log(tweet);
  }
});

これでちゃんとツイートできました。定期的に実行すればbotが作れますね。

いいねを送信する

キーワードでツイートを検索して、いいねを送信していきます。
streamモジュールというものが以前は使えたらしいのですが、2019年春ごろから使えなくなっているようです。
モジュールの更新が2017年で止まっているので仕方ないですね。
そんなわけでstreamなしでやっていきます。

//モジュールの読み込み
const twitter = require('twitter');

//上からAPI key, API secret key, Access token, Access token secret
const client = new twitter({
    consumer_key        : "-----------",
    consumer_secret     : "-----------",
    access_token_key    : "-----------",
    access_token_secret : "-----------"
});

async function searchTweet(queryArg, nextResultsMaxIdArg = null) {
    client.get('search/tweets', { q: queryArg, count: 1, max_id: nextResultsMaxIdArg }, async (error, searchData, response) => {

      if (error) console.log(error);

      for (item in searchData.statuses) {
        const tweet = searchData.statuses[item];

      await client.post('https://api.twitter.com/1.1/friendships/create.json', {screen_name: tweet.user.screen_name}, () => {
        console.log(`\n${tweet.user.screen_name}さんをフォローしました。\n`);
      });

      //検索に失敗
      if (searchData.search_metadata == undefined) {
        console.log('no metadata');
      }

      else if (searchData.search_metadata.next_results) {
        let maxId = searchData.search_metadata.next_results.match(/\?max_id=(\d*)/);
        searchTweet(queryArg, maxId[1]);
      }
    }
  });
}

searchTweet('検索ワード');

postの内容を改変すればフォローもできます。

バージョン

Node.js : 12.13.1

モジュール

twitter : 6.13.1

参考ページ

twitterモジュール公式
https://www.npmjs.com/package/twitter

twitterAPIの解説
https://syncer.jp/Web/API/Twitter/REST_API/

bot作成の記事
https://yukimonkey.com/js-application/twitter-bot-2/

twitterモジュールの機能を一通り使った記事
https://tasoweb.hatenablog.com/entry/2018/06/01/002438

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away