2014年3月2日日曜日

Pythonでtwitterの自動相互フォロー

botに自動返信機能を付けようと思った。
どうせならメッセージ内容から適当な単語を抽出して、人工無能的なリプライ内容にしたかった。
と思ったら、タイムラインを非公開にしている不届きな輩がいたため、botアカウントからは返信されたことにも気づけない。
やむなくbotに「自動フォロー返し」を実装することになった。

## 引数はTwitterオブジェクト
def check_friendship(twi):
    dic = {}
    # BOTからフォロー申請中のIDを列挙
    outgoing_ids = set(twi.friendships.outgoing(**dic)['ids'])
    print 'friendships/outgoing:', outgoing_ids
    # BOTがフォローしているIDを列挙
    dic['screen_name'] = BOT_NAME
    following_ids = set(twi.friends.ids(**dic)['ids'])
    print 'friends/ids:', following_ids
    # BOTをフォローしているIDを列挙
    followers_ids = set(twi.followers.ids(**dic)['ids'])
    print 'followers/ids:', followers_ids
    # BOTをフォローしており、BOTがフォローを申請していないIDを抽出
    diff = followers_ids.difference(following_ids,outgoing_ids)
    print 'difference', diff
    # フォロー申請を出す
    for i in diff:
        dic = {}
        dic['user_id'] = i
        twi.friendships.create(**dic)

とりあえず、TwitterのREST API名であるoutgoingとcreateが機能を連想しにくい。
あと、pythonのset型に対する集合操作が強力で驚いた。