質問

Google App Engine ProjectでPyfacebook関数(https://github.com/sciyoshi/pyfacebook/)を使用しようとしています。 Facebook開発者フォーラム(http://forum.developers.facebook.net/viewtopic.php?pid=164613)のアドバイスに従い、__init__.pyファイルに追加の機能を追加し、そのファイルをルートにコピーしました。私のプロジェクトのディレクトリとそれをFacebook.pyに変更しました。 facebook.pyをインポートしたので、ページのPythonクラスのGet(self)メソッドに以下を追加しました。

facebookapi = facebook.Facebook(API_KEY, SECRET)

    if not facebookapi.check_connect_session(self.request):
        path = os.path.join(os.path.dirname(__file__), 'templates/login.html')
        self.response.out.write(template.render(path, {'apikey': API_KEY}))
        return

    user = facebookapi.users.getInfo(
        [facebookapi.uid],
        ['uid', 'name', 'birthday', 'relationship_status'])[0]

    template_values = {
        'name': user['name'],
        'birthday': user['birthday'],
        'relationship_status': user['relationship_status'],
        'uid': user['uid'],
        'apikey': API_KEY
    }

    path = os.path.join(os.path.dirname(__file__), 'templates/index.html')
    self.response.out.write(template.render(path, template_values))

それを実行するとき、私は次のエラーを取得します:

file " much baw08u private ids helloworld helloworld.py"、in get in get

facebook.check_connect_session(self.request)でない場合:属性エラー:「Facebook」オブジェクトには属性がありませんcheck_connect_session '

そのため、Facebook APIを順調にロードしているようですが、新しい方法ではありません。 Facebookクラスの定義の下部にある開発者フォーラムからコードをコピーして貼り付け、すべてのインデントが正しいことを確認しましたが、それでもそれらを拾っていないようです。誰もが何が問題なのか知っていますか?

ありがとう

ベン

役に立ちましたか?

解決

あなたは信じています Facebook クラスには特定の方法がありますが、Pythonはそうではないと確信しています。なんで?たぶん、あなたはメソッド名を間違えたかもしれません、多分あなたはインデントを正しく取得しなかった - コードを見ずに言うのは難しい。

あなたはあなたの仮定を検証するために突っ込んでみることができます:

import facebook
import logging

logging.warn('Facebook class: %r', dir(facebook.Facebook))
logging.warn('facebook module: %r', dir(facebook))

正しいファイルで操作していると確信している場合は、check_connect_sessionをFacebookの方法として表示することを期待する必要があります。十分なインデントを追加しなかった場合、Facebookモジュールで定義された関数としてCheck_Connect_Methodが表示されることを期待しています。インデンテーションが多すぎると、check_connect_methodがサブ関数になります。インデントに細心の注意を払ってください。

ただし、いくつかのカスタム方法を追加するより良い方法は、次のとおりです。

import facebook

class Facebook(facebook.Facebook):
    def check_connect_session(request):
        pass

facebookapi = Facebook(API_KEY, SECRET)

if not facebookapi.check_connect_session(...):
    ...

Facebookがコードを更新するときに、新しいファイルを所定の位置にコピーするだけです。カスタマイズをマージする必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top