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