Добрый вечер всем.
Кто-нибудь пользовался пользовался API epn aliexpress?
Как построить запрос?
Выдержка из документации:
Все запросы к API отправляются в виде POST-запроса по протоколу HTTP на URL-адрес api.epn.bz/json. Параметры запроса передаются в виде JSON-строки как данные RAW POST DATA. Ответ отдаётся так же в формате JSON.
Структура запроса имеет вид:
{
user_api_key = $your_api_key
user_hash = $your_deep_link_hash
api_version = $client_library_version
requests = $requests_to_process
}
Все параметры обязательны. Данные 'user_api_key' и 'user_hash' берутся в личном кабинете партнёрской программы (первый в профиле пользователя, а второй - в списке креативов), 'api_version' описывает версию клиентской библиотеки (текущее описание соответствует версии "2").
Структура $requests_to_process содержит список запросов, которые надо обработать в пакетном режиме и имеет вид:
{
$req_name_1 = $req_data_1
$req_name_2 = $req_data_2
// ... //
$req_name_n = $req_data_n
}
Таким образом, при отправке пакета для каждого запроса нужно указать уникальное имя блока, а в возвращаемом результате искать необходимые данные по этому имени. Каждое описание запроса имеет вид:
{
action = $action
$param_1 = $value_1
$param_2 = $value_2
// ... //
$param_n = $value_n
}
Список доступных параметров зависит от значения 'action'. Параметры, которые не поддерживаются для данного действия 'action', будут просто проигнорированы.
Примеров запросов почему-то не дано..
Пробую такой подход, но не знаю как сформировать суть запроса, что я делаю не так?
import urllib
import urllib2
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
values = {'user_api_key': 'My_key',
'user_hash': 'My_hash',
'api_version': '2'
# А здесь-то что? нужно?
}
data = urllib.urlencode(values)
req = urllib2.Request(url,data)
response = urllib2.urlopen(req)
print response.read()
Спасибо.
UPD:
Вопрос скорее корректнее переформулировать - "Как отправить HTTP POST-запрос в формате JSON, используя Python 2.x".
Что нужно знать:
1. Перед отправкой данных их нужно сериализовать в json
2. Отправлять данные нужно указывая, что это json
Варианты решения:
1. С использованием библиотеки requests (она всё делает сама за исключением сериализации):
import json
import requests
## URL, куда мы обращаемся
url = 'http://example.com'
## Наши данные (словарь)
values = {'id': '12356', 'desc': 'something'}
## Делаем запрос, данные сериализуем json.dumps(x)
r = requests.post(url, data=json.dumps(values), headers=headers)
## Считываем в словарь
dict = r.json()
2. С использованием только стандартной библиотеки:
import json
import urllib2
## URL, куда мы обращаемся
url = 'http://example.com'
## Наши данные (словарь)
values = {'id': '12356', 'desc': 'something'}
## Создаем запрос и добавляем к нему header с указанием на то, что это json
r = urllib2.Request(api_url)
r.add_header('Content-Type', 'application/json')
## Делаем запрос, данные сериализуем json.dumps(x)
response= urllib2.urlopen(r, json.dumps(values))
## Данные будут получены в формате, с которым работает API. В нашем случае это опять JSON, мы считаем его в словарь
dict = json.loads(response.read())