以前は機能していました。その後、完全に機能しなくなるまで、時々機能し始めました。
以下は私の購読コードです:
def instagram_realtime_subscribe(event_slug, topic):
api = InstagramAPI(client_id = CLIENT_ID, client_secret = CLIENT_SECRET)
r = api.create_subscription(object = 'tag',
object_id = topic,
aspect = 'media',
callback_url = 'http://<domain>/event/%s/import/instagram/realtime'%(event_slug),
client_id = CLIENT_ID,
client_secret = CLIENT_SECRET
)
以下は、instagram からの GET および POST リクエストを処理するための私の見解です。
def import_instagram_rt(request, slug):
if request.method == "GET":
mode = request.GET.get("hub.mode")
challenge = request.GET.get("hub.challenge")
verify_token = request.GET.get("hub.verify_token")
if challenge:
return HttpResponse(challenge, mimetype='text/html')
else:
return HttpResponse("test", mimetype='text/html')
else:
x_hub_signature=''
if request.META.has_key('HTTP_X_HUB_SIGNATURE'):
x_hub_signature = request.META['HTTP_X_HUB_SIGNATURE']
raw_response = request.raw_post_data
data = simplejson.loads(raw_response)
for update in data:
fetch_data(slug, update["object_id"])
以下は私のurls.pyです
url(r'^event/([-\w]+)/import/instagram/realtime$', import_instagram_rt),
これは美しく機能するために使用されます。しかし、それは2日から機能しなくなりました。サブスクリプション関数が呼び出されるたびに、エラーがスローされます。
>>> instagram_realtime_subscribe("cats", "cats")
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/ubuntu/webapps/django-projects/imports/views.py", line 687, in instagram_realtime_subscribe
client_secret = CLIENT_SECRET
File "/home/ubuntu/webapps/django-projects/local/lib/python2.7/site-packages/instagram/bind.py", line 151, in _call
return method.execute()
File "/home/ubuntu/webapps/django-projects/local/lib/python2.7/site-packages/instagram/bind.py", line 143, in execute
content, next = self._do_api_request(url, method, body, headers)
File "/home/ubuntu/webapps/django-projects/local/lib/python2.7/site-packages/instagram/bind.py", line 124, in _do_api_request
raise InstagramAPIError(status_code, content_obj['meta']['error_type'], content_obj['meta']['error_message'])
InstagramAPIError: (400) APISubscriptionError-Unable to reach callback URL "http://<domain>/event/cats/import/instagram/realtime".
コールバック URL を手動で叩いてみたところ、私が書いた関数から期待される応答 "test" が得られました。サブスクリプション関数を呼び出す前に、その URL に対して requests.get() を手動で試したところ、200 応答が返されました。
他の誰もがアクセスできるのに、Instagram が私のコールバック URL を見つけられないのはなぜですか?