2015-01-20 2 views
0

Я пытаюсь использовать python-instagram для получения медиафайлов instagram.Как получить обновление POST в реальном времени с помощью django и instagram api?

Я использую api.create_subscription с тегом. И мой URL-адрес обратного вызова - это веб-страница django на удаленном веб-сервере. Мой питон скрипт (я запустить его на локальном компьютере):

api = InstagramAPI(client_id='my_id', client_secret='my_secret') 
sub = api.create_subscription(object='tag', object_id='test', aspect='media', callback_url=my_url/insta) 
print sub 

while 1: 
    pass 

Мой Джанго вид вызова по обратного вызова URL (я запускаю его на отдаленном веб-сервер):

def getInstagramPicture(request): 
    if request.method == "GET": 
     mode   = request.GET.get("hub.mode") 
     challenge = request.GET.get("hub.challenge") 
     verify_token = request.GET.get("hub.verify_token") 
     return HttpResponse(challenge) 
    if request.method == "POST": 
     print "post" 

Я думаю, что подписка работает хорошо. Веб-сервер терминалов журналы:

[20/Jan/2015 13:30:11] "GET /insta?hub.challenge=1aed90578d1743a3afb865cc2a6b69cc&hub.mode=subscribe HTTP/1.1" 301 0 
[20/Jan/2015 13:30:11] "GET /insta/?hub.challenge=1aed90578d1743a3afb865cc2a6b69cc&hub.mode=subscribe HTTP/1.1" 200 32 

И локальный терминал журнала:

sub {'meta': {'code': 200}, 'data': {'object': 'tag', 'object_id': 'test', 'aspect': 'media', 'callback_url': 'my_url/insta', 'type': 'subscription', 'id': '15738925'}} 

Но моя проблема, это когда я пытаюсь отправить на Instagram фотографию с тегом «тест» на мой взгляд, это не назвать, и я в моем терминале веб-сервера:

[20/Jan/2015 13:31:24] "POST /insta HTTP/1.1" 500 65563 

Почему мой взгляд не звонит, когда я отправляю изображение instagram?

ответ

2

Вам необходимо скорректировать URL-адрес обратного вызова, чтобы он соответствовал тому, что определено в вашем urlconf. В настоящее время вы скажите Instagram, что ваш обратный вызов URL является <server>/insta но из журналов запросов, кажется, ваш URLconf ожидает <server>/insta/ (с лидирующим слэшем)

Это работает нормально для запросов GET, как показано ниже

[20/Jan/2015 13:30:11] "GET /insta?hub.challenge=1aed90578d1743a3afb865cc2a6b69cc&hub.mode=subscribe HTTP/1.1" 301 0 
[20/Jan/2015 13:30:11] "GET /insta/?hub.challenge=1aed90578d1743a3afb865cc2a6b69cc&hub.mode=subscribe HTTP/1.1" 200 32 

(обратите внимание, что первая строка является 301 редирект)

установка Django по умолчанию APPEND_SLASH гарантирует, что запрос /insta автоматически перенаправлены на /insta/ мнение, что вы определили.

Однако Django не может сделать это для запроса POST ... HTTP-перенаправление всегда является запросом GET, поэтому данные POST будут потеряны.Вот почему вы видите ошибку 500 в журналах, когда запрос POST делается на несуществующий URL /insta:

[20/Jan/2015 13:31:24] "POST /insta HTTP/1.1" 500 65563 

Смотри также: https://stackoverflow.com/a/9739046/202168

+0

Хорошо, спасибо вам большое за вашу помощь! Теперь это работает! –

-1

Кажется, что instagram использует метод POST для доступа к вашему обратному URL.

Попробуйте это:

from django.views.decorators.csrf import csrf_exempt 

@csrf_exempt 
def getInstagramPicture(request): 
    if request.method == "GET": 
     mode   = request.GET.get("hub.mode") 
     challenge = request.GET.get("hub.challenge") 
     verify_token = request.GET.get("hub.verify_token") 
     return HttpResponse(challenge) 
    if request.method == "POST": 
     mode   = request.POST.get("hub.mode") 
     challenge = request.POST.get("hub.challenge") 
     verify_token = request.POST.get("hub.verify_token") 
     return HttpResponse(challenge) 
+0

тот же результат, на мой взгляд, не называют, когда я фото на Instagram. –

+0

Ваш взгляд ** ** исчисляется с использованием метода 'POST'. – catavaran

0

Код, показанный не появляется для обработки запросов POST на всех. Он просто печатает «пост» и ничего не возвращает.

В журнале веб-сервера отображается ошибка HTTP 500 (внутренняя ошибка сервера) и страница с ошибкой 64KiB, которая, вероятно, говорит вам, почему именно.

Вам необходимо реализовать обработчик запросов POST, и этот обработчик, вероятно, будет похож на обработчик GET, который у вас уже есть.

+0

Я попытался реализовать обработчик POST с возвратом HttpResponse, но ничего не изменилось. Я не понимаю, потому что это похоже, что мой взгляд не звонит. –

+1

Посмотрите на журнал ошибок веб-сервера - вы можете обнаружить, почему происходит ошибка внутреннего сервера 500. Возможно, запрос терпит неудачу, прежде чем отправится на ваш взгляд. – mhawke