はじめに
Twitterではフォローされることがしばしば有りますが、その度にユーザを確認してフォローを返すのは手間が掛かり面倒です。なので適当な条件を指定して、一括でフォロー出来れば便利だなってことで記事を投稿しました(きっとn番煎じ)。
ほんきじのないよう
pythonのモジュールでTwitterのAPIを手軽に扱うことが出来るtweepyを用いて、フォローをしてくれているけど、フォローを返していないユーザをフォローする(フォローバック)方法について紹介します!
今回フォローバックする条件は以下の2つ
- フォロー相手の相互フォロー数が2000アカウント以下
- 1日の平均ツイート数が50ツイート以下
(他にもフォロー数とフォロワー数の差、趣味嗜好など、色々なフォローバック基準はあると思いますが……)
かいはつかんきょう
OS X 10.9.4 (Marvericks)
python 2.7.5
tweepy 2.3 http://www.tweepy.org/
じぜんじゅんび
Twitter Developersからアクセストークンを取得
Twitter Developers
https://dev.twitter.com/
アクセストークンの取得方法については下記のURLが非常に分かりやすいです。手順1と2に従い、アクセストークンを取得します。
http://syncer.jp/twitter-api-how-to-get-access-token
tweepy 2.3を導入
pythonのパッケージ管理システムpipでtweepyを導入します(pyenvが使える方はそちらも使って)
基本的に最新版のインストール推奨ですが、tweepyは頻繁に仕様が変更されるので一応バージョン指定方法を記載。
pip install tweepy==2.3
しょりのながれ
- 認証後のapiを取得
- 自分と相互フォローの全ユーザオブジェクトを取得
- 自分のフォロワーの全ユーザオブジェクトを取得
- 未フォローバックのユーザを条件に適合する場合はフォロー
そーすこーど
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import logging
import tweepy
def get_api():
API_KEY = "api key"
API_SECRET = "api secret"
ACCESS_TOKEN = "access token"
ACCESS_TOKEN_SECRET = "access token secret"
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
return tweepy.API(auth_handler=auth, wait_on_rate_limit=True)
def get_all_my_friends(api):
all_my_friends = list()
for friend in tweepy.Cursor(api.friends).items():
logger.warning('Retrieving data from Twitter.')
all_my_friends.append(friend)
return all_my_friends
def get_all_my_followers(api):
all_my_followers = list()
for follower in tweepy.Cursor(api.followers).items():
logger.warning('Retrieving data from Twitter.')
all_my_followers.append(follower)
return all_my_followers
def follow_user_with_conditions(target_user, upper_limit_of_friends=2000, upper_limit_of_crazy=50):
twitter_experience_days = (datetime.datetime.now() - target_user.created_at).days
crazy = target_user.statuses_count * 1. / twitter_experience_days
if target_user.friends_count < upper_limit_of_friends and crazy < upper_limit_of_crazy:
target_user.follow()
print u"ユーザ名:{0:15} ツイート数:{1:<9d} 廃人度(tweets/a day):{2:.2f}".format(target_user.screen_name, target_user.statuses_count, crazy)
return True
return False
if __name__ == "__main__":
FORMAT = '%(asctime)s - %(name)s - %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('twitter_api')
api = get_api()
all_my_friends = get_all_my_friends(api)
all_my_followers = get_all_my_followers(api)
# フォロワーで相互フォローしていないユーザをフォローする
for unknown_follower in all_my_followers:
if unknown_follower not in all_my_friends:
follow_user_with_conditions(unknown_follower)
ほそく
- 関数get_api()の定数には事前準備で取得したアクセストークンなどを入力してください
- TwitterのAPIには時間幅における取得上限が設定されているため、終了までに時間がかかる場合があります
おわりに
本記事ではtweepyを用いてフォローバックする方法について紹介してみました。フォローバック条件には相互フォロー数、一日のツイート数を設定しました。
こんごのてんぼう
今後の拡張方法としては、頻繁にAPIを叩くことになり規制されて時間がかかってしまいますが、フォローするユーザの発言数を最大3200件取得し、スパムかどうか調べたり、趣味嗜好の傾向が自分と似ているか、などあるとおもいます。ここからはnltk(自然言語処理)やscikit-learn(機械学習), orange(Data Mining)などといったツールの出番ですね!
またそこまで大掛かりにならなくても、その他のユーザ情報を用いてフィルタリングしたりも出来そうです。
需要がありそうなら次回考えます(やるとは言っていない