pyfacebook + Google App Engine: не могу найти новые функции в facebook.py - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь использовать функции pyfacebook (https://github.com/sciyoshi/pyfacebook/) в проекте движка приложений Google. Я последовал совету на форуме разработчиков Facebook (http://forum.developers.facebook.net/viewtopic.php?pid=164613) и добавил дополнительные функции в файл __init__.py,скопировал этот файл в корневой каталог моего проекта и переименовал его в facebook.py. Импортировав facebook.py, я добавил в метод get (self) для класса Python для страницы:

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'

Так что, похоже, что загружается API Facebook нормально, но не добавленные мной новые методы.Я скопировал и вставил код с форума разработчиков внизу определения класса Facebook, и убедился, что все отступы были правильными, но, похоже, он их не собирает.Кто-нибудь знает в чем может быть проблема?

Спасибо

Бен

1 Ответ

2 голосов
/ 27 января 2011

Вы верите, что у класса Facebook есть определенный метод, но Python уверен, что его нет.Зачем?Возможно, вы ошиблись в названии метода, возможно, вы не правильно поняли отступ - трудно сказать, не видя код.

Вы можете попробовать поискать правильные предположения:

import facebook
import logging

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

Есливы уверены, что работаете с правильным файлом, и вы должны увидеть check_connect_session как метод Facebook.Если вы не добавили достаточно отступов, вы ожидаете увидеть check_connect_method как функцию, определенную в модуле facebook.Слишком много отступов сделало бы 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 обновляет свой код, вы просто копируете новый файл на место - нетнеобходимо объединить ваши настройки.

...