Pregunta

Estoy tratando de usar las funciones de Pyfacebook (https://github.com/sciyoshi/pyfacebook/) en un proyecto de motor de aplicaciones de Google. He seguido los consejos en el foro de desarrolladores de Facebook (http://forum.developers.facebook.net/viewtopic.php?pid=164613) y agregué las funciones adicionales al archivo __init__.py, copié ese archivo a la raíz Directorio de mi proyecto y lo renombró Facebook.py. Habiendo importado Facebook.py, agregué lo siguiente al método Get (Self) para la clase Python para la página:

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

Al ejecutarlo recibo el siguiente error:

Archivo " mucho baw08u private ids helloworld helloworld.py", línea 54, en get

Si no Facebookapi.check_connect_session (self.request): attributeError: 'Facebook' El objeto no tiene atributo 'check_connect_session'

Por lo tanto, parece estar cargando bien la API de Facebook, pero no los nuevos métodos que he agregado. Copié y pegé el código del foro de desarrolladores en la parte inferior de la definición de la clase de Facebook, y me aseguré de que toda la sangría fuera correcta, pero aún no parece estar recogiéndolas. ¿Alguien sabe cuál podría ser el problema?

Gracias

Ben

¿Fue útil?

Solución

Tú crees el Facebook La clase tiene un cierto método, pero Python está seguro de que no lo ha hecho. ¿Por qué? Tal vez escribiste mal el nombre del método, tal vez no obtuviste la sangría correcta, difícil de decir sin ver el código.

Podrías intentar hurgar para validar tus suposiciones:

import facebook
import logging

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

Si está seguro de que está operando en el archivo correcto, debe esperar ver check_connect_session como un método de Facebook. Si no agregó suficiente sangría, entonces espera ver check_connect_method como una función definida en el módulo de Facebook. Demasiada sangría haría que check_connect_method sea una función sub -de la cual el método lo precede y no aparecerá en el registro anterior. Presta mucha atención a la sangría.

Sin embargo, una mejor manera de agregar algunos métodos personalizados podría ser:

import facebook

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

facebookapi = Facebook(API_KEY, SECRET)

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

Ahora, cuando Facebook actualice su código, simplemente copie el nuevo archivo en su lugar, no es necesario fusionar sus personalizaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top