Frage

Ich versuche, die Pyfacebook -Funktionen (https://github.com/sciyoshi/pyfacebook/) in einem Google App Engine -Projekt zu verwenden. Ich habe den Rat im Facebook Developer Forum (http://forum.developers.facebook.net/viewtopic.php?pid=164613) verfolgt und die zusätzlichen Funktionen zur Datei __init__.py hinzuge Verzeichnis meines Projekts und benannte es in facebook.py um. Nachdem ich Facebook.Py importiert habe, fügte ich die folgende Methode für die Python -Klasse für die Seite hinzu:

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))

Beim Ausführen erhalte ich den folgenden Fehler:

Datei " viel baw08u privat ids helloworld helloWorld.py", Zeile 54, in GET

Wenn nicht facebookAPI.Check_connect_Session (self.request): AttributeError: 'Facebook' Objekt hat kein Attribut 'check_connect_Session' '

Es scheint also die Facebook -API -Geldstrafe zu laden, aber nicht die neuen Methoden, die ich hinzugefügt habe. Ich habe den Code vom Entwicklerforum am Ende der Facebook -Klassendefinition kopiert und eingefügt und dafür gesorgt, dass die gesamte Eindrücke richtig war, aber sie scheint sie immer noch nicht abzuholen. Weiß jemand, was das Problem sein könnte?

Vielen Dank

Ben

War es hilfreich?

Lösung

Du glaubst dem Facebook Die Klasse hat eine bestimmte Methode, aber Python ist sicher, dass dies nicht der Fall ist. Wieso den? Vielleicht haben Sie den Method -Namen falsch geschrieben, vielleicht haben Sie die Eindringlichkeit nicht richtig gemacht - schwer zu sagen, ohne den Code zu sehen.

Sie könnten versuchen, herumzusteigen, um Ihre Annahmen zu validieren:

import facebook
import logging

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

Wenn Sie sicher sind, dass Sie in der richtigen Datei arbeiten, sollten Sie erwarten, dass Sie check_connect_Session als Methode von Facebook sehen. Wenn Sie nicht genügend Einrückung hinzufügen, erwarten Sie, dass check_connect_method als eine im Facebook -Modul definierte Funktion angezeigt wird. Zu viel Eindrückung würde check_connect_method zu einer Subfunktion machen, von der die Methode sie immer vorausgeht, und sie wird in der obigen Protokollierung nicht angezeigt. Achten Sie genau auf Einrückung.

Ein besserer Weg, um einige benutzerdefinierte Methoden hinzuzufügen, könnte jedoch:

import facebook

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

facebookapi = Facebook(API_KEY, SECRET)

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

Wenn Facebook seinen Code nun aktualisiert, kopieren Sie einfach die neue Datei - keine Fusion Ihrer Anpassungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top