0

Google App Engineプロジェクトで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))

実行すると、次のエラーが発生します。

ファイル"\much \ baw08u \ Private \ IDS \ helloworld \ helloworld.py"、54行目、get

facebookapi.check_connect_session(self.request)でない場合:AttributeError:'Facebook'オブジェクトに属性がありません'check_connect_session'

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

ありがとう

ベン

4

1 に答える 1

2

クラスには特定のメソッドがあると思いますFacebookが、Pythonにはないことは確かです。なんで?メソッド名のつづりを間違えたのかもしれませんし、インデントが正しくなかったのかもしれません。コードを見ずに言うのは難しいでしょう。

あなたはあなたの仮定を検証するためにいじくり回してみることができます:

import facebook
import logging

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

正しいファイルを操作していることが確実な場合は、Facebookのメソッドとしてcheck_connect_sessionが表示されることを期待する必要があります。十分なインデントを追加しなかった場合は、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がコードを更新するときに、新しいファイルを所定の場所にコピーするだけで、カスタマイズをマージする必要はありません。

于 2011-01-27T13:04:51.573 に答える