我正在使用Tornado从FB的API中获取用户的朋友。响应包含单页结果,我想转到下一页。你是怎样做的?你是否使用从下一页url解析的相对路径再次使用facebook_request()?
答案 0 :(得分:1)
之前我没有使用龙卷风和facebook API,但Facebook的响应应该像JSON对象一样格式化,其'paging'属性包含'next'和/或'previous'属性,其中包含其他页面的url (如果它们存在)。所以你应该只能做一个http请求来获取下一页,这也是一个JSON响应。
在你的回调函数中,你应该能够解析好友列表并将好友添加到你的列表中,然后检查是否有下一个链接;如果是这样,请向该网址发送异步http请求,其中回调与原始请求的回调相同,否则您将拥有所有朋友并可以随心所欲地执行任何操作。
编辑: 好吧,我没有尝试过,所以它可能有错误,但我认为它类似于:
@tornado.web.asynchronous
def get(self):
self.friends = []
self.facebook_request("/me/friends", access_token=user["access_token"], callback=self.async_callback(self._save_user_profile))
@tornado.web.asynchronous
def _save_user_profile(self, stream):
self.friends += stream['data']
if stream['paging'].get('next', None) != None:
next_url = stream['paging']['next']
#THIS WOULD BE WHERE YOU GET THE NEXT REQUEST
else:
#THIS WOULD BE WHERE YOU DO WHATEVER YOU WANT WITH THE FRIENDS LIST
我评论要做下一个请求时,你应该首先解析next_url以获取它的所有参数(基本上用'&'拆分,然后用'='拆分它们来获取参数的名称和值)然后如上所述将这些传递给另一个facebook_request。这有意义吗?