Question

Je suis en train d'utiliser les fonctions de pyfacebook (https://github.com/sciyoshi/pyfacebook/) dans un projet de Google App Engine. Je l'ai suivi les conseils sur le forum des développeurs Facebook (http://forum.developers.facebook.net/viewtopic.php?pid=164613) et a ajouté les fonctions supplémentaires au fichier __init__.py, copié ce fichier à la racine répertoire de mon projet et rebaptisé facebook.py. Ayant facebook.py importé j'ai ajouté ce qui suit à la méthode get (auto) pour la classe Python pour la page:

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

Lors de l'exécution, j'obtiens l'erreur suivante:

Fichier "\ bien \ baw08u \ Private \ IDS \ helloworld \ helloworld.py", ligne 54, dans get

sinon facebookapi.check_connect_session (self.request): AttributeError: objet 'Facebook' n'a pas d'attribut 'check_connect_session'

Il semble charger l'API facebook bien, mais pas les nouvelles méthodes que je l'ai ajouté. Je copié et collé le code du forum des développeurs au bas de la définition de classe Facebook, et fait en sorte que toute l'indentation avait raison, mais il ne semble toujours pas être les ramasser. Est-ce que quelqu'un sait ce qui pourrait être le problème?

Merci

Ben

Était-ce utile?

La solution

Vous croyez que la classe Facebook a une certaine méthode, mais Python est sûr qu'il n'a pas. Pourquoi? Peut-être que vous avez mal orthographié le nom de la méthode, peut-être vous n'avez pas le droit de retrait -. Difficile à dire sans voir le code

Vous pouvez essayer farfouillé pour valider vos hypothèses:

import facebook
import logging

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

Si vous êtes sûr que vous travaillez sur le fichier correct, le vous devriez vous attendre à voir check_connect_session comme méthode de Facebook. Si vous n'avez pas ajouté indentation assez vous attendez à voir check_connect_method en fonction définie dans le module facebook. Trop indentation ferait check_connect_method une sous-fonction qui soit la méthode la précède et il ne sera pas affiché dans l'enregistrement ci-dessus. Portez une attention particulière à l'indentation.

Cependant, une meilleure façon d'ajouter des méthodes personnalisées pourrait être:

import facebook

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

facebookapi = Facebook(API_KEY, SECRET)

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

Maintenant, quand Facebook mettre à jour leur code que vous copiez simplement le nouveau fichier en place - pas besoin de fusionner vos personnalisations

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top