2013-04-26 143 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