[英]instagram.bind.InstagramAPIError with Instagram real time API subscriptions
[英]How get in real time POST update with django and instagram api?
我嘗試使用python-instagram來獲取實時instagram媒體。
我將api.create_subscription與標記一起使用。 我的回調URL是遠程Web服務器上的django網頁。 我的python腳本(我在本地計算機上運行):
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
我的Django視圖通過回調URL調用(我在遠程Web服務器上運行它):
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"
我認為訂閱效果很好。 Web服務器終端日志:
[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上發布帶有標簽“ test”的圖片時,我的視圖沒有被調用,並且我的Web服務器終端中有:
[20/Jan/2015 13:31:24] "POST /insta HTTP/1.1" 500 65563
為什么發布instagram圖片時我的視圖無法顯示?
您需要更正您的回調URL以匹配urlconf中定義的內容。 當前,您告訴Instagram您的回調URL為<server>/insta
但從請求日志中看,您的urlconf預期為<server>/insta/
insta <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
APPEND_SLASH
的請求自動重定向到您已定義的/insta/
視圖。
但是Django無法對POST請求執行此操作... HTTP重定向始終是GET請求,因此POST數據將丟失。 這就是為什么當對不存在的url /insta
發出POST請求時,在日志中看到500錯誤的原因:
[20/Jan/2015 13:31:24] "POST /insta HTTP/1.1" 500 65563
顯示的代碼似乎根本無法處理POST請求。 它僅打印出“ post”,不返回任何內容。
Web服務器日志顯示HTTP 500錯誤(內部服務器錯誤)和64KiB錯誤頁面,該頁面可能告訴您確切的原因。
您需要為POST請求實現一個處理程序,該處理程序可能與您已經擁有的GET處理程序相似。
好像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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.