Twitter Api リムられチェック node.js
March 01, 2020

DEVELOPMENT

web
Twitter

今更ながら、Twitterを頑張っているのですが、フォロワーを増やすのに相互フォローをよくすると思いますが、

中にはフォローされたらすぐフォローを外す悪質なユーザーがいます。

そんなの無視してもいいのですが、なんとなくイラッとするので、スクリプトを書いて(とりあえず)チェックするようにしてみました。

よくwebでログインしてチェックできるようなサービスがありますが、 なんとなく怪しいので、自分でやることにします。


非エンジニアでも、Twitter APIのトークン等だけ発行すればできなくも無い気がします、

実装はNode環境でJavascriptです。

応用すれば、このままスクリプトでアンフォローも可能そうですが、今回はフォロワーとフォローをチェックし、 自分がフォローしているユーザーの一覧を表示する実装となります。


必要なもの

  • mac or unix環境
  • node環境
  • Javascriptの知識(なくてもいいかコピペで)
  • やる気

準備

Twitter Developerに登録し、APP登録を行いますが、審査が入ります(ちゃんと記入すればだいたい通ると思います)。

Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報でしっかりまとめていただいているので

割愛致しますので、上記を参考にしてください。 ※今後余裕があったら自分で記事書きます。

そして、必要な

  • api key
  • secret
  • access token
  • access token secret

この4つをメモしておきましょう。


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

プロジェクトフォルダ作成

$ mkdir twitter-bot
$ cd twitter-bot

初期化

$ yarn init

twitter クライアントインストール

$ yarn add twitter

キーなどの処理にdotenvインストール

$ yarn add dotenv

.env ファイルを作成し、

API_KEY=xxxxxxxxxxx
API_SECRET_KEY=xxxxxxxxxxxx
ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ACCESS_TOKEN_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxx

こんな感じで、先程メモした内容を記載します


この辺までは以前のTwitter Api で検索したツイートを「いいね」する node.jsと同様です。


コード

index.js を作成(ファイル名はなんでも良し)

require('dotenv').config();

var Twitter = require('twitter');

// 初期化
var client = new Twitter({
  consumer_key: process.env.API_KEY,
  consumer_secret: process.env.API_SECRET_KEY,
  access_token_key: process.env.ACCESS_TOKEN,
  access_token_secret: process.env.ACCESS_TOKEN_SECRET
})

// 最大取得件数を指定。200がMAXだそうです
const count = 200

// Twitter API 実行
function fetchUser(url, params) {
  return new Promise((resolve, reject) => {
    client.get(url, params)
      .then(list => {
        // 連打すると制限に引っかかりレスポンスがかえってこなくなるので、3秒待つことにした
        setTimeout(() => {
          resolve(list)
        }, 3000)
      })
      .catch(error => {
        reject(error)
      })
  })
}


// 最高200件までしかとれないので、cursorを使って先のデータがなくなるまで
// Promise で 繰り返しデータを取得する
async function getUser(url) {
  var users = []
  var next_cursor = 1
  var params = {count: count}

  while(next_cursor != 0) {
    const list = await fetchUser(url, params)

    for (user of list.users) {
      users.push(user.name)
    }
    next_cursor = list.next_cursor
    params = {count: count, cursor: next_cursor}
    console.log(next_cursor)
  }

  return users
}

// フォローとフォロワーの配列の差分を返す
function getDiff(x, y, ope){
  x.forEach(item =>{
    if(!y.includes(item)){
      ope(item);
    }
  })
}

// promiseで実装
async function diff() {
  var friends = []
  var followers = []

  await getUser('friends/list').then((r) => {
    friends = r
  })
  await getUser('followers/list').then((r) => {
    followers = r
  })

  getDiff(friends, followers, item => console.log('friends include and followers do not inclode :' +item));
}

// 実行
diff()

process.on('unhandledRejection', console.dir);

実行

$ node index.js
> friends include and followers do not inclode :Newton Faulkner
> friends include and followers do not inclode :John Butler Trio
> friends include and followers do not inclode :Dropbox
> friends include and followers do not inclode :ARATA ISHIKAWA
> friends include and followers do not inclode :孫正義
> friends include and followers do not inclode :Google Devs Japan
> friends include and followers do not inclode :Lotus
> friends include and followers do not inclode :STS9

こんな感じで、自分がフォローのみしているユーザーの一覧が帰ってきますので、 あとは、Twitter上等で名前で検索し、どうするか考えましょうw

有名人は相互フォローではないですよね。さすがに

※注意 連続でやりすぎると、APIの制限等にかかり、停止、バンされる可能性があるので、自己責任でお願いします。ご注意下さい。

[ { message: 'Rate limit exceeded', code: 88 } ]

こんな結果が帰ってくるときは、数分待ってから実行しましょう


まとめ

自分的にもこんなチェックスクリプトを実装するなんて、なんてねちっこいんだろうっと思いますが、 きっと同じ境遇の方もいらっしゃるだろうと思い、

Twitter APIのお試しがてら、実装してみました。

Token等の審査が少々手間ですが、 インスタのGraphAPIと違い、Twitter APIは、叩けるようになれば色々できそうで楽しいですよ。

是非試してみて下さい。

うかい / 株式会社UKAI
うかい@代表取締役兼エンジニア株式会社UKAI
Nobuyuki Ukai

株式会社UKAI 代表取締役CEO。建築を専攻していたが、新卒でYahoo!Japanにエンジニアとして入社。その後、転職、脱サラ、フリーランスエンジニアを経て、田舎へ移住し、ゲストハウスの開業、法人成り。ゲストハウス2軒、焼肉店、カフェ、食品製造業を運営しています。詳細はこちらから

🙏よかったらシェアお願いします🙏
WRITTEN BY
うかい / 株式会社UKAI
うかい@代表取締役兼エンジニア株式会社UKAI

Nobuyuki Ukai

株式会社UKAI 代表取締役CEO。建築を専攻していたが、新卒でYahoo!Japanにエンジニアとして入社。その後、転職、脱サラ、フリーランスエンジニアを経て、田舎へ移住し、ゲストハウスの開業、法人成り。ゲストハウス2軒、焼肉店、カフェ、食品製造業を運営しています。詳細はこちらから

CONACT
入力して下さい
Slack からもどうぞ

※お気軽にどうぞ!(6月20日まで有効!お早めに)

COPYRIGHT © 2020 UKAI CO., LTD. ALL RIGHTS RESERVED.