我正在开发一个Facebook应用程序。它是用Python编写的,并在Google App Engine(GAE)上运行。
我知道如何获取用户网络的关系状态,但我这样做的方式是慢慢运行。 GAE有一个时间限制,以减少大约60秒的CPU使用率。使用以下代码,我可以在获得“DeadlineExceededError”之前获得该时间范围内约200人的关系状态。当然这还不够好,因为很多/大多数人在Facebook上有更多的朋友。
我现在要做的是获取用户的好友列表,然后为每个用户发出API调用,询问姓名和关系状态。
我使用的代码:
for f in friends:
friends_info[f] = facebook.api('/'+f, {u'fields': 'name,relationship_status',
u'access_token': facebook.access_token})
然后我得到了数据:
rel_status = friends_info[f][u'relationship_status']
我需要什么:
有关优化的建议或提取整个网络关系状态的其他方法。
提前致谢: - )
编辑:
答案似乎是解决问题的好方法。虽然,我在Python中找不到批处理请求的任何好教程,所以我最终使用了FQL调用。通过使用以下内容,获取数据需要1-2秒:
Q = 'select uid, sex, relationship_status from user where uid in (select target_id from connection where source_id = me())'
实际数据由:
检索data = fql.query(Q,facebook.access_token)
调用此函数:
def query(self,Q,access_token):
ENDPOINT = 'https://api.facebook.com/method/'
params = dict(query=Q, access_token=access_token, format='json')
url = ENDPOINT + 'fql.query'
return self._fetch(url, params=params)
def _fetch(self, url, params=None):
conn = urllib2.urlopen(url, data=urlencode(params))
try:
return json.loads(conn.read())
finally:
conn.close()
希望有人也可以使用它!
答案 0 :(得分:2)
每个应用引擎实例最多可以有10个并行HTTP查询,因此您可以使用create_rpc& amp; make_fetch_call。在某些情况下,这也不起作用,因此您需要将作业拆分为多个任务并让它们并行运行。
答案 1 :(得分:2)
您可以使用脸谱图batch query API一次最多查询20个用户