Как обратиться к aliexpress epn API?

Добрый вечер всем.

Кто-нибудь пользовался пользовался 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())
  • Вопрос задан
  • 4901 просмотр
Решения вопроса 1
@bIbI4k0
Питоню
Во-первых, попробуйте использовать обертку вокруг urllib - библиотеку requests. У нее более дружественный и высокоуровневый API и есть полезные плюшки.
Во-вторых, я не вижу, где у вас данные сериализуются в json.

В общем виде выглядеть должно примерно так:
r = requests.post(url, data=jsonify(values), headers=headers)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы