構成は正しいです。
https://github.com/pythonforfacebook/facebook-sdkを使用している場合
サンプルコードにいくつかの変更を加える必要があります。
example.pyファイルは、HomeHandlerクラスの下の「get」メソッドと「post」メソッドを定義します。
「get」は、ページがFacebook.com内でCanvasアプリとして実行されている場合は機能しませんが、ページがブラウザーによって直接呼び出された場合は機能します。
Facebookは、 https ://developers.facebook.com/docs/howtos/login/signed-request/で詳しく説明されているように、 signed_request引数
を含むPOSTリクエストを使用してCanvasアプリをiframeにロードします。
example.pyファイルを修正するための最初のステップは次のとおりです。
これにより、少なくともFacebook内にコードが表示されます。
元の「投稿」方法をコメントアウトします。
#def post(self):
#url = self.request.get('url')
#file = urllib2.urlopen(url)
#graph = facebook.GraphAPI(self.current_user['access_token'])
#response = graph.put_photo(file, "Test Image")
#photo_url = ("http://www.facebook.com/"
#"photo.php?fbid={0}".format(response['id']))
#self.redirect(str(photo_url))
「get」メソッドを「post」メソッドとして複製します。getとpostの両方が次のようになります。
def post(self):
template = jinja_environment.get_template('example.html')
self.response.out.write(template.render(dict(
facebook_app_id=FACEBOOK_APP_ID,
current_user=self.current_user
)))
それが完了したら、Facebook内でテストできます。「example.html」はiframeに表示されますが、デフォルトでは、「example.html」はアップロードする画像のURLを要求します。元の「post」メソッドがコメント化されているため、これは機能しなくなります。
機能を修正するには、リクエストを処理するためにdef post(self):メソッドにif/thenステートメントを作成する必要があります。たとえば、「url」引数をチェックして元の「post」メソッドを再統合したい場合があります-self.request.get('url')を使用して-そこにある場合は、画像を受信していることがわかりますURLであり、元の「投稿」コードに分岐する必要があります