Tornado Framework (FacebookGraphMixin) - PullRequest
       18

Tornado Framework (FacebookGraphMixin)

3 голосов
/ 25 января 2012

Я хотел попробовать отправить запрос приложения из моего приложения Facebook пользователю, использующему Tornado Framework.Я следил за http://www.tornadoweb.org/documentation/auth.html, но я не знаю, как решить эту ошибку.Есть профессионалы?Спасибо!

Журнал ошибок

Traceback (most recent call last):
  File "send.py", line 36, in <module>
    main()
  File "send.py", line 33, in main
    test.get(app_access_token, player_id)
  File "send.py", line 15, in get
    callback=self.async_callback(self._on_post))
AttributeError: 'Send' object has no attribute 'async_callback'

Код

import tornado.auth
import tornado.escape
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado import httpclient

class Send(tornado.auth.FacebookGraphMixin):
    def get(self, app_access_token, player_id):
        self.facebook_request(
            "/"+player_id+"/apprequests",
            post_args={"message": "I am an app request from my Tornado application!"},
            access_token=app_access_token,
            callback=self.async_callback(self._on_post))

    def _on_post(self, new_entry):
        if not new_entry:
            # Call failed; perhaps missing permission?
            self.authorize_redirect()
            return
        self.finish("Posted a message!")

def main():
    key = "xxxxxxxxxxx"
    secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    player_id = "100003395454290" #fake id
    http_client = httpclient.HTTPClient()
    response = http_client.fetch("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id="+key+"&client_secret="+secret+"&redirect_uri=&code=")
    app_access_token = response.body.replace("access_token=","")

    test = Send()
    test.get(app_access_token, player_id)

if __name__ == "__main__":
    main()

Ответы [ 2 ]

1 голос
/ 15 марта 2016

Хорошо, мой ответ не дает прямого ответа на вопрос ОП. Но, как это видно в верхних результатах поиска, ошибка AttributeError: 'XxxxxHandler' object has no attribute 'async_callback'

Стоит отметить, что при запуске Tornado v4.0 функция async_callback была удалена. Цитировать заметки о обратной совместимости :

RequestHandler.async_callback и WebSocketHandler.async_callback функции-оболочки были удалены; они устарели для долгое время из-за контекста стека (и в последнее время сопрограмм).

0 голосов
/ 26 января 2012

Похоже, вы забыли подкласс tornado.web.RequestHandler. Изменения:

class Send(tornado.auth.FacebookGraphMixin):

Кому:

class Send(tornado.web.RequestHandler, tornado.auth.FacebookGraphMixin):
...