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するだけです。
ね?簡単でしょ?