1

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

4

1 回答 1

1

我以前没有一起使用过 tornado 和 facebook API,但是 Facebook 的响应应该像 JSON 对象一样格式化,并带有一个 'paging' 属性,该属性具有 'next' 和/或 'previous' 属性,其中包含其他页面的 url(如果它们存在)。所以你应该能够只做一个 http 请求来获取下一页,这也将是一个 JSON 响应。

在您的回调函数中,您应该能够解析好友列表并将好友添加到您的列表中,然后检查是否有下一个链接;如果是这样,则向该 url 发送一个异步 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 如上所述。那有意义吗?

于 2012-07-07T21:34:47.377 回答