簡體   English   中英

如何使用django和instagram API進行實時POST更新?

[英]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

另請參閱: https : //stackoverflow.com/a/9739046/202168

顯示的代碼似乎根本無法處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM