1

Tornadoを使用して、FBのAPIからユーザーの友達を取得しています。応答には結果の1ページが含まれているので、次のページに移動します。どうやってそれをしますか?次のページのURLから解析された相対パスを使用して、Facebook_request()を再度使用しますか?

4

1 に答える 1

1

これまでtornadoとfacebookAPIを一緒に使用したことはありませんが、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 に答える