読者です 読者をやめる 読者になる 読者になる

setを使って、twitterの片思い、片思われ、両思いを取得する

@tohae_callというbotを作っているのですが、今まではfollowしてくれた人を手動でfollow返ししてたのですが、最近@tohae_callをremoveする人が増えてきて、さすがに手動removeはめんどくさすぎるので、両方とも自動化することにしました。
そのためには、片思いと片思われのリストを取得する必要があるのですが、pythonのset*1を使って、差集合を求めるのが一番簡単です。
setは集合を表現するものなのですが、演算子をオーバーロード*2しているため、和集合や差集合、積集合をpython演算子を用いて表現できます。
setを使って差集合を求める前に、まずはtwitterのfollowingとfollowerの取得が必要です。twitterにはfollowingとfollowerのidだけのリストを返すAPIがあるので、これを使います。以下サンプル

import json
import urllib2

def getFollowers(screen_name="tohae_call"):
    url = "http://twitter.com/followers/ids/%s.json" % screen_name
    ids = urllib2.urlopen(url).read()
    return json.loads(ids)

def getFollowing(screen_name="tohae_call"):
    url = "http://twitter.com/friends/ids/%s.json" % screen_name
    ids = urllib2.urlopen(url).read()
    return json.loads(ids)

getFollowersでfollowerを、getFollowingでfollowingを取得します。これを用いて、片思いと片思われのIDのリストを取得します。以下サンプル

following_set = set(getFollowing())
follower_set = set(getFollowers())

#片思い
kataomoi = following_set - follower_set
#片思われ
kataomoware = followe_set - following_set
#両思い
ryouomoi = follower_set & following_set

あとはこうして取得した、片思いリストにあるIDをremoveして、片思われリストにあるIDをfollowするだけです。
ね?簡単でしょ?

*1:集合型

*2:であってる?