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