twitter自動フォロー処理

以前から欲しいと思ってた便利ツール的twitter botを作ろうと試行錯誤中なんだけど、ReplayとかDMをやり取りするのにフォローが必要っぽいので練習がてらに自動フォロー処理を書いてみた。

Google App Engineで動かそうと思ってるので久しぶりのPythonで。python-twitterを使ってるので処理自体はらくちんなんだけど、本格的にPythonでコードを書くのは1年ぶりなので四苦八苦。。。でもPython楽しい。

ただ、API制限とか未調査なので本格的にフォロワーが増えたら多分対応できないと思われ、いや絶対。。。100人くらいまでなら大丈夫だろうけどその先はなんか手を考えないとなぁ。

# メール通知使うのが妥当なところだけど。。。IMAP処理書くのも面倒だなぁ。。。

空き時間でちょこちょこ書いてるからやっつけだけど、メモがてらにコードをさらしてみる。

# twitter自動フォロー処理クラス(後で別処理含めて拡張)
class autoFallow:
    def __init__(self, account, password):
    ### メッセージ格納用のリストを初期化
        self.message_list = []
    ### 外部モジュールの読み込み #################################
    ## python-twitterをsetup.pyでインストールする場合はいらないと思われる
    ########################################################
        import sys
        # python-twitterをimport
        sys.path.append('lib/python-twitter')
        import twitter
    ### botアカウントにapi接続 ##########################
        self.api = twitter.Api(account, password)

    ### フォロワーをフォローする処理 ############################
    def modifyFollowers(self):
        # フォロワーを取得
        followers = self.api.GetFollowers()
        # フォロー先を取得
        friends = self.api.GetFriends()
        # list型をset型に変換
        followers_set = set(followers)
        friends_set = set(friends)
        # 未フォローのユーザを取得
        non_friends = followers_set - friends_set
        # 無フォローのユーザを取得
        bye_friends = friends_set - followers_set
        # フォローのやり取りが必要ない場合 #[TODO]# やっつけなので要修正
        if len(non_friends) != len(bye_friends) and non_friends[0].sceen_name != bye_friends[0].screen_name:
        # フォロー処理
            self.message_list.append('------ create friendship');
            for friend in non_friends:
                api.CreateFriendship(friend.screen_name)
                self.message_list.append('Follow friend name: ' + friend.screen_name)
        # リムーブ処理
            self.message_list.append('------ remove friendship');
            for friend in bye_friends:
                api.DestroyFriendship(friend.screen_name)
                self.message_list.append('Remove friend name: ' + friend.screen_name)
        else:
            self.message_list.append('------ no modify friendship');
    ### Main Process ####################################
    def process(self):
        self.modifyFollowers()
        self.getReplay()

############################################################
# main処理
if __name__ == "__main__":
    ### アカウントとパスワードを設定
    account = '[アカウント]'
    password = '[パスワード]'
    ### 自動フォロー処理を実行
    obj = autoFallow(account, password) 
    obj.process()
    ### 実行時メッセージを表示 
    for message in obj.message_list:
        print(message)

とりあえず動くようになったので、なるべく早めにbot完成できるように頑張ろう。。。まずはGAEのデータストアを使えるようにならんとなぁ。。。

    • -

<後から書いた>
 twitter APIで引っ張れるfriends一覧は100件までみたい。となると101~以上はページング処理されるからデータ受け取ってからの切り替え処理にすべきか。。。でも下手に回数が増えるとAPI接続制限(1時間に70回らしい)に引っかかって他の処理まであぼんするからなぁ 。。。う〜ん、悩ましい。もう少し考えよう。