2

タグを購読しようとしています。と を使用してコールバック URL が正しく呼び出されているよう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')
4

1 に答える 1

1

そのため、文字列として返すとうまくいきました。エラー メッセージにもっと注意を払うべきだったのですが、Python IRC の親切な人がメッセージ内の余分な改行を指摘してくれました。テンプレート ファイルを 1 行に配置すると、動作するように見えました。Instagram のリスト サブスクリプション URL を介して、アプリが承認されていることを確認できるようになりました。

于 2012-11-15T06:03:36.940 に答える