我得到了同样的结果,但是使用关注者 ID 的解决方法是这样的(假设您只想打印用户名):
user = raw_input("Enter Twitter handle to get followers of: ")
followids = twitter.get_followers_ids(screen_name = user)
for x in followids["ids"]:
data = twitter.show_user(user_id=x)
print(data["screen_name"])
显然,您可以使用这些屏幕名称或用户 ID 做任何您喜欢的事情(例如,如果使用您自己的关注者,您可以向每个人发送相同的消息)。
编辑:上面的示例有效,但它会很快遇到速率限制问题,因此分批检查 ID(或做其他事情)的时间延迟是明智的。
编辑 2:您的光标代码不起作用,因为光标计数格式错误。 API documentation shows 您可以期待的那种字符串(例如“1374004777531007833”)。 “count=N”的使用是每页的结果数,这就是为什么你达到了 200 个结果的限制。您需要做的是获取每一页,将数据存储在某处并检查结果中的“next_cursor”数据以获取下一页,直到该值达到0。
编辑 3:使用 Python 2.7.5(对于 Python 3,您需要更改 raw_input 行),这对我有用(如果关注者数量少于 3,000 则不会达到速率限制):
import math
from twython import Twython
from authinfo import *
from config import *
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
user = raw_input("Enter Twitter handle to get followers of: ")
suser = twitter.show_user(screen_name=user)
fnum = 200
pnum = int(math.ceil(float(suser["followers_count"]) / fnum))
pages = []
for i in range(pnum):
pages.append("p"+str(i+1))
oldpages = []
for i in range(pnum):
oldpages.append("p"+str(i))
p0 = { "next_cursor": -1 } # So the following exec() call doesn't fail.
for i in range(pnum):
exec(pages[i]+" = twitter.get_followers_list(screen_name=user, count=fnum, skip_status=1, cursor="+oldpages[i]+"['next_cursor'])")
followers = []
for p in range(pnum):
try:
exec("for i in range(fnum): followers.append("+pages[p]+"['users'][i])")
except(IndexError):
pass
print(len(followers))
for x in followers:
print("""Name: %s
Username: %s
""" % (x["name"], x["screen_name"]))
authinfo.py 模块是我保存 Twitter OAuth 数据的地方(因为它对我的脚本来说是静态的),而 config.py 模块包含 client_args 变量。必要时忽略。
有些人(好吧,可能是很多人)不喜欢鼓励使用 exec(),但搞砸了,它可以作为概念验证。 ;)