2013-04-26 513 views
4

我在使用python請求模塊和Imgur API將圖像上傳到Imgur時遇到了問題。通過python將文件上傳到imgur

我的代碼如下:

import base64 
import json 
import requests 

from base64 import b64encode 

client_id = 'my-client-id' 

headers = {"Authorization": "Client-ID my-client-id"} 

api_key = 'my-api-key' 

url = "http://api.imgur.com/3/upload.json" 

j1 = requests.post(
    url, 
    headers = headers, 
    data = { 
     'key': api_key, 
     'image': b64encode(open('1.jpg', 'rb').read()), 
     'type': 'base64', 
     'name': '1.jpg', 
     'title': 'Picture no. 1' 
    } 
) 

我通常會得到400響應錯誤。我不確定myu client_id是否錯誤,或者我的請求是錯誤的(我在url請求方面的經驗很少),或者我使用Imgur API錯誤。

我想提交這個圖像後,我想獲取圖像的網址。我不確定API是否有一個命令,或者python.requests模塊有一個技巧,可以讓我獲取剛剛發佈的數據(POST)。

一個非常類似的問題在這裏回答,並且代碼實際工作!:Trouble sending a file to Imgur

然而,當我用我的CLIENT_ID,insted的是在代碼中使用的應用程序ID,它返回一個400錯誤,如還有當我從改變

: URL = 「http://api.imgur.com/2/upload.json」 到: URL = 「http://api.imgur.com/3/upload.json

回答

5

這是一個v3的請求,但你沒有使用SSL,這是強制性的。嘗試設置

url = "https://api.imgur.com/3/upload.json" 
#  ^
+0

謝謝!那就是訣竅!請求繼續進行,但我無法獲取剛剛發佈的圖像的URL哈希值。你知道我應該怎麼做? – Arturo 2013-04-26 19:58:48

+1

@Mecasickle,你可以得到響應的身體的所有信息。只需添加到您的代碼相同:'data = json.loads(j1.text)['data'];打印數據['link'],數據['id'],數據['deletehash']' ' – gaart 2013-04-26 20:27:55

+0

好的,這樣做了。現在我想要得到它的畫廊。這裏是鏈接http://api.imgur.com/models/gallery_image – Arturo 2013-04-26 21:11:33