Twitterのアカウント新規開設時にフォロワー数を増やすためには、カテゴリのアカウント層からのフォローが効果的です。しかしフォローバック等を手作業でやると手間がかかってしまいます。
自動フォローのサービスやアプリもありますが、無料版では会員登録が必要だったり、利用制限なども。また自動フォローの注意するべき点として、スマホアプリのレビュー欄を確認すると「不正ログインされた」ことを書きこむ投稿が何件も見られ、不安に思う方もいると思います。
仮に無作為に自動フォローを行っても、外国語アカウントや鍵付きアカウント、非アクティブなアカウントまでフォローしてしまい、こうしたノイズを取り除いていくのは最終的に手作業です。
そこで今回はPythonで日本語のアカウント・鍵なし・アクティブなアカウントを自動フォローするプログラミングを作ってみたいと思います。
事前準備(API)
今回はTwitter APIを利用するプログラムです。実行の前に以下のページ等を参考にTwitter Developerに登録するなどAPIを利用する準備をしておいてください。また、ツイートの検索だけでなくフォローもAPIを通じて行うので、アプリのアクセスレベルは「Read and write」以上にしておく必要があります。
ライブラリ“Tweepy”とは?
今回はTweepyというライブラリを使用します。
pip install tweepy
今回使用するTweepyはTwitterの投稿やフォロー、いいねなどを自動できるライブラリで、特定のユーザーの情報の詳細を取得することもできます。
Tweepyに対応した関数を使用してユーザーの情報を取得し、Python側で条件分岐やループでデータを処理、最終的にはフォローや投稿などの一連のシステムを構築できます。
TweepyとWindowsのタスクスケジューラを組み合わせることで、特定の時間にTwitterを操作するシステムも作れます。仕事でTwitterを使っている方には是非知っておいて欲しいライブラリです。
では早速、tweepyを利用したT自動フォローのプログラムを紹介していきましょう。
全コードの紹介
import time
import tweepy
CK = '取得したキーを入れる' # Consumer API key
CKS = '取得したキーを入れる' # Consumer API Secret key
AT = '取得したキーを入れる' # Access token
ATS = '取得したキーを入れる' # Access token secret
auth = tweepy.OAuthHandler(CK, CKS)
auth.set_access_token(AT, ATS)
api = tweepy.API(auth)
query = "#python"
results = api.search_tweets(q=query, count=10)
for result in results:
screen_name = result.user.screen_name
print('@' + screen_name + 'をフォロー処理中...')
for i in range(3): #RateLimitにかかったら3回までリトライ
try:
if result.lang == 'ja':
api.create_friendship(screen_name=screen_name)
print('@' + screen_name + 'さんのフォローに成功しました。')
else:
print('@' + screen_name + 'さんは日本語アカウントではありません。')
except tweepy.TweepError as e:
if e.reason == "[{'message': 'Rate limit exceeded', 'code': 88}]":
print(e)
time.sleep(15 * 60) #15分待機
else:
break
else:
time.sleep(5)
break
コードの解説
各項目を詳しく見ていきましょう。
ライブラリのインポートとAPI連携
import time
import tweepy
CK = '取得したキーを入れる' # Consumer API key
CKS = '取得したキーを入れる' # Consumer API Secret key
AT = '取得したキーを入れる' # Access token
ATS = '取得したキーを入れる' # Access token secret
1~2行目でライブラリのインポート、4~7行目でAPIの各種キーを代入しています。
認証関連処理
auth = tweepy.OAuthHandler(CK, CKS)
auth.set_access_token(AT, ATS)
api = tweepy.API(auth)
9~11行目は、認証関連の処理を行うTweepyでの決まった書き方です。この後、変数apiに代入したAPIインスタンスをもとに各種メソッドを実行していくことになります。
キーワードの設定と検索
query = "#python"
13行目で検索ワードを変数queryに代入、
results = api.search_tweets(q=query, count=100)
14行目は、TweepyのメソッドAPI.search()により検索ワードをqueryとしてツイートを100件(最大値)検索、結果を変数resultsに代入しています。
検索したツイートのフォロー
for result in results:
screen_name = result.user.screen_name
print('@' + screen_name + 'をフォロー処理中...')
for i in range(3): #RateLimitにかかったら3回までリトライ
try:
if result.lang == 'ja':
api.create_friendship(screen_name=screen_name)
print('@' + screen_name + 'さんのフォローに成功しました。')
else:
print('@' + screen_name + 'さんは日本語アカウントではありません。')
except tweepy.TweepError as e:
if e.reason == "[{'message': 'Rate limit exceeded', 'code': 88}]":
print(e)
time.sleep(15 * 60) #15分待機
else:
break
else:
time.sleep(5)
break
16行目以降でfor文により一つ一つのツイートについて展開・処理していきます。
17,18行目は、user.screen_nameによりツイートしたユーザーのスクリーンネームを取得、代入、print文により表示しています。
19行目はtry~except文でexcept節にひっかかったときにリトライ処理を行うための行です。twitter APIには利用制限(Rate Limit)があり、後に制限を受けたときの待機処理を入れていますが、制限にひっかかってしまうとtry節がスキップされてしまうので、ここで2重ループにすることによりtry節を再実行できます。
20行目以降でtry~exceptによりエラー処理を行います。
21行目で日本語のアカウントの確認を行います。この設定はTwitterの設定画面で設定している言語となります。
ツイートを分析して日本語判定する方法もありますが、改行や特殊絵文字がツイートに入っている場合エラーとなってしまう為result.langで判定しています。
(補足)非アクティブアカウントのフォロー
最終更新日が一年以上ないアカウントはフォローしないプログラムを組んでいましたが、無料版のAPIは過去7日間のツイートのみ取得が可能です。 もし一年以上前のAPIを取得できるプランを利用している方は下記ソースコードを参考にしてください。
import datetime
from dateutil import relativedelta
referenceDate = datetime.date.today() - relativedelta.relativedelta(years=1)
~省略~
try:
targetDate = result.created_at.date()
if result.lang == 'ja':
if referenceDate < targetDate:
api.create_friendship(screen_name=screen_name)
print('@' + screen_name + 'さんのフォローに成功しました。')
else:
print('@' + screen_name + 'さんの更新日は一年以上前です。')
else:
print('@' + screen_name + 'さんは日本語アカウントではありません。')
現在のAPIでは鍵付き(非公開アカウント)はフォロー許可をもらってないと、APIでは取得できないようです。
なのでキーワードを選択して取得したユーザーは公開アカウントのみとなります。
22行目は、tweepyのメソッドAPI.create_friendship()によりフォロー、成功した場合は29行目のelse節に飛び5秒待機後ループを終了させます。成功時は19行目のリトライ処理が必要ないので、ここでbreak文を挿入してください。なお、この5秒待機の処理はTwitter側の負荷軽減のために入れています。ある程度の待機処理を入れないとAPIの利用制限(RateLimitError)とは別のエラー(26行目のexcept節が実行)により制限されてしまうことがあります。
26行目のexcept節は制限を受けたときの15分待機の処理を書きます。Twitter APIには24時間ごとの利用制限と15分ごとの利用制限があるため、ここでは15*60で15分となっています。
30行目はその他のエラーが発生したときの処理を書いています。APIの制限以外の何らかの理由によりフォローできなかった場合は、リトライしても成功する可能性が低いと思われるので、スキップのためにbreakによりループを抜けて次のツイートの処理に移ります。
実際に自動フォローをやってみる
早速プログラムを実行してみました。
Pythonで実行すると英語アカウントが多く、日本語アカウントがあまり見つかりませんでしたが、フォローされているのは日本語のアカウントでした。
自動フォローの注意点
TweepyでTwitterを操作するのはとても便利ですが、短時間に多くの処理を行うとアカウントに制限がかかったり、最悪アカウントが削除されてしまう可能性があります。
その原因として考えられるのが、Twitter側に与えるサーバー負荷や、不正アカウントとして認識されてしまうことです。
その為TweepyでTwitterを操作する際には、一定時間空ける、一度に多くの処理を行わないなどTwitter側に負荷を与えないようにしましょう。
アカウントに制限をかけられてしまう目安としては以下の項目が目安とされています。
- フォロワーの10%
- 一日400人まで
アカウント作成時やフォロワーが少ない時はフォロワーの10%が現実的ではないと思うので、最大400人を目安としておけば大丈夫でしょう。
情報を集める目的や少しフォローするくらいであれば全然問題ないと思いますので、Twitterのサーバーに大きな負担がかかるプログラムは実行しないように注意しましょう。