Просит опубликовать в imgur
from oauth_hook import OAuthHook
import requests, json
OAuthHook.consumer_key = "KEYHERE"
OAuthHook.consumer_secret = "SECRET HERE"
oauth_hook = OAuthHook("TOKEN_KEY_HERE", "TOKEN_SECRET_HERE", header_auth=True)
headers = {'content-type': 'application/json'}
client = requests.session(hooks={'pre_request': oauth_hook}, headers=headers)
payload = {"title":"album title"}
r = client.post("http://api.imgur.com/2/account/albums.json",payload)
print r.text
Это должно создать альбом с названием album title
как вместо этого возвращаемая строка
{
"albums": {
"id": "IMGURID",
"title": "",
"description": "",
"privacy": "public",
"cover": "",
"order": 0,
"layout": "blog",
"datetime": "2012-12-05 15:48:21",
"link": "IMGUR LINK",
"anonymous_link": "ANONYLINK"
}
}
У кого-нибудь есть решение для установки названия альбома с помощью запросов?
вот ссылка на документы по imgur API http://api.imgur.com/resources_auth
1 ответ
Вы не публикуете данные JSON; вместо этого он будет преобразован в данные в кодировке URL. requests
не обеспечивает автоматическое кодирование JSON, даже если для типа контента установлено значение application/json
,
Использовать json
модуль для кодирования:
import json
r = client.post("http://api.imgur.com/2/account/albums.json", json.dumps(payload))
Вы можете увидеть это при использовании http://httpbin/post
POST echo service:
>>> import json, requests, pprint
>>> headers = {'content-type': 'application/json'}
>>> payload = {"title":"album title"}
>>> pprint.pprint(requests.post('http://httpbin.org/post', payload, headers=headers).json)
{u'args': {},
u'data': u'title=album+title',
u'files': {},
u'form': {},
u'headers': {u'Accept': u'*/*',
u'Accept-Encoding': u'gzip, deflate, compress',
u'Connection': u'keep-alive',
u'Content-Length': u'17',
u'Content-Type': u'application/json',
u'Host': u'httpbin.org',
u'User-Agent': u'python-requests/0.14.2 CPython/2.7.3 Darwin/11.4.2'},
u'json': None,
u'origin': u'xx.xx.xx.xx',
u'url': u'http://httpbin.org/post'}
>>> pprint.pprint(requests.post('http://httpbin.org/post', json.dumps(payload), headers=headers).json)
{u'args': {},
u'data': u'{"title": "album title"}',
u'files': {},
u'form': {},
u'headers': {u'Accept': u'*/*',
u'Accept-Encoding': u'gzip, deflate, compress',
u'Connection': u'keep-alive',
u'Content-Length': u'24',
u'Content-Type': u'application/json',
u'Host': u'httpbin.org',
u'User-Agent': u'python-requests/0.14.2 CPython/2.7.3 Darwin/11.4.2'},
u'json': {u'title': u'album title'},
u'origin': u'xx.xx.xx.xx',
u'url': u'http://httpbin.org/post'}
Если вы используете requests
версия 2.4.2 или новее, вы можете оставить кодировку для библиотеки; просто передать полезную нагрузку как json
ключевой аргумент; кстати, он также установит правильный заголовок Content-Type в этом случае:
r = client.post("http://api.imgur.com/2/account/albums.json", json=payload)