[我使用 Python 和 ruby gem twurl 来请求 OAuth。]
我正在尝试从 Twitter 获取 @BarackObama 的关注者 ID,他目前拥有 24,265,751 名关注者。从数学上讲,24,265,751 /5000/350 需要 13.8 小时来收集,如果我们给它一个小时的余量,这大约是 14-15 小时。
每次我尝试用我的代码收集它时,它都会在分页时出现错误。当我收到错误后重新开始收集时,它会查看不同的页面,因此它收集的内容比我预期的要多。
我想知道我的工作是否有问题,或者我的代码架构有缺陷。这是我要使用的功能;
def request_followers(namevar, name, candidate_id, id_str):
next_cursor = -1
cmd = 'twurl "/1/followers/ids.json?cursor=-1&screen_name=' + namevar + '"'
data = fol_req(cmd)
/*code to add data into database as soon as it gets the data.*/
try:
if (data.get('ids')):
while (len(data.get('ids')) == 5000):
next_cursor = data['next_cursor']
followers_request = 'twurl "/1/followers/ids.json?cursor=' + str(next_cursor) + '&screen_name=' + namevar+'"'
try:
data = fol_req(followers_request)
/*code to add data into database as soon as it gets the data.*/
except:
time.sleep(5)
continue # if error, retry after 5 sec.
except:
print "error on", followers_request
check_list.append(followers_request)
这是要有分页,并且
def fol_req(followers_request):
request_limit = remainingHits()
attempt = 0
data = {}
while (attempt < request_limit-1) and not(data.get('ids')):
try:
attempt += 1
(status, output) = commands.getstatusoutput(followers_request)
if status:
sys.stderr.write(output)
sys.exit(1)
data = json.loads(output)
except:
continue
break
else:
request_limit = remainingHits()
time.sleep(1200)
data = fol_req(followers_request)
return data
这是使用 twurl 和 python sys 请求的。
我的架构在某些方面是错误的吗?