龙卷风Facebook获得请求。如何移动到下一页

时间:2012-07-07 21:08:01

标签: python facebook facebook-graph-api tornado

我正在使用Tornado从FB的API中获取用户的朋友。响应包含单页结果,我想转到下一页。你是怎样做的?你是否使用从下一页url解析的相对路径再次使用facebook_request()?

1 个答案:

答案 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。这有意义吗?