如何返回Instagram实时订阅挑战?

时间:2012-11-14 21:47:06

标签: python google-app-engine instagram

我正在尝试订阅代码。看来正在使用hub.challengehub.mode正确调用回调网址,我想出了如何使用self.request.get('hub.challenge')访问质询。我以为我应该回应这个挑战,但由于我在GAE日志中收到以下错误,这似乎不起作用:

InstagramAPIError: (400) APISubscriptionError-Challenge verification failed. Sent "647bf6dbed31465093ee970577ce1b72", received "
647bf6dbed31465093ee970577ce1b72
".

这是完整的处理程序:

class InstagramHandler(BaseHandler):
    def get(self):
        def process_tag_update(update):
            update = update

        mode         = self.request.get('hub.mode')
        challenge    = self.request.get('hub.challenge')
        verify_token = self.request.get('hub.verify_token')
        if challenge:
            template_values = {'challenge':challenge}
            path = os.path.join(os.path.dirname(__file__), '../templates/instagram.html')
            html = template.render(path, template_values)
            self.response.out.write(html)
        else:
            reactor = subscriptions.SubscriptionsReactor()
            reactor.register_callback(subscriptions.SubscriptionType.TAG, process_tag_update)

            x_hub_signature = self.request.headers.get('X-Hub-Signature')
            raw_response    = self.request.data
            try:
                reactor.process('INSTAGRAM_SECRET', raw_response, x_hub_signature)
            except subscriptions.SubscriptionVerifyError:
                logging.error('Instagram signature mismatch')

1 个答案:

答案 0 :(得分:1)

因此将其作为字符串返回工作。我应该更加关注错误消息,但是在Python IRC上有一个有用的人指出了消息中的额外换行符。一旦我将模板文件放在一行,它似乎工作。我现在可以确认我的应用程序是通过Instagram的列表订阅URL授权的。