Domanda

Sto cercando di utilizzare le funzioni pyfacebook (https://github.com/sciyoshi/pyfacebook/) in un progetto di motore di Google. Ho seguito il consiglio sul forum degli sviluppatori di Facebook (http://forum.developers.facebook.net/viewtopic.php?pid=164613) e ha aggiunto le funzioni aggiuntive per il file __init__.py, copiato il file nella root directory del mio progetto e la rinominò facebook.py. Avendo facebook.py importati ho aggiunto quanto segue al metodo get (auto) per la classe Python per la pagina:

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

Quando si esegue l'ottengo il seguente errore:

File "\ molto \ baw08u \ Private \ IDS \ helloworld \ helloworld.py", linea 54, in get

se non facebookapi.check_connect_session (self.request): AttributeError: 'Facebook' oggetto non ha attributo 'check_connect_session'

Così sembra essere il caricamento del API bene facebook, ma non i nuovi metodi ho aggiunto. Ho copiato e incollato il codice dal forum degli sviluppatori alla base della definizione della classe di Facebook, e fatto in modo tutto il rientro era giusto, ma ancora non sembra essere di raccoglierle. Qualcuno sa cosa potrebbe essere il problema?

Grazie

Ben

È stato utile?

Soluzione

È credere la classe Facebook ha un certo metodo, ma Python è sicuro che non ha. Perché? Forse scritto male il nome del metodo, forse non ha ottenuto il rientro a destra -. Difficile da dire senza vedere il codice

Si potrebbe provare rovistando per convalidare le ipotesi:

import facebook
import logging

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

Se si è sicuri si sta operando sul file corretto, la si dovrebbe aspettare di vedere check_connect_session come metodo di Facebook. Se non hai aggiunto abbastanza indentazione quindi ci si aspetta di vedere check_connect_method come una funzione definita nel modulo facebook. Troppo rientro renderebbe check_connect_method una funzione secondaria di quale metodo sempre precede e non apparirà nella registrazione sopra. Prestare particolare attenzione al rientro.

Tuttavia, un modo migliore per aggiungere alcuni metodi personalizzati potrebbe essere:

import facebook

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

facebookapi = Facebook(API_KEY, SECRET)

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

Ora, quando Facebook aggiorna il loro codice è sufficiente copiare il nuovo file al suo posto - non c'è bisogno di unire le personalizzazioni

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top