CDON API RESTful Api GET запрос - PullRequest
       36

CDON API RESTful Api GET запрос

0 голосов
/ 10 июня 2018

В настоящее время я работаю над получением данных о клиентах из cdon, это платформа электронной коммерции.У них есть документация по API здесь:

CDON Api Docu

Сначала позвольте мне показать вам мой код:

myToken = '<token here>'
myUrl = 'https://admin.marketplace.cdon.com/api/reports/d8578ef8-723d-46cb-bb08-af8c9b5cca4c'
head = {'Authorization': 'token {}'.format(myToken),
'Status':'Online',
'format':'json'}
filters = '?filter={"Status":["Online"],"format": ["json"] }}'
response = requests.get(myUrl + filters, headers=head)
report = response.json()
print(report.products)

Это возвращает толькопараметры.как например в этом JSON: CDON Github

Статус имеет значение Онлайн это online это группа элементов, которые я толькохочу получить.

Я пытаюсь получить ответ вроде этого:

{

  "Products": [

    {

      "SKU": "322352",

      "Title": "Fabric Cover",

      "GTIN": "532523626",

      "ManufacturerArticleNumber": "",

      "StatusCDON": "Online",

      "ExposeStatusCDON": "Buyable",

      "InStock": 0,

      "InStockCDON": 0,

      "CurrentPriceSE": null,

      "OrdinaryPriceSE": null,

      "CurrentPriceCDONSE": 299.0000,

      "OrdinaryPriceCDONSE": null,

      "CurrentPriceDK": null,

      "OrdinaryPriceDK": null,

      "CurrentPriceCDONDK": null,

      "OrdinaryPriceCDONDK": null,

      "CurrentPriceNO": null,

      "OrdinaryPriceNO": null,

      "CurrentPriceCDONNO": null,

      "OrdinaryPriceCDONNO": null,

      "CurrentPriceFI": null,

      "OrdinaryPriceFI": null,

      "CurrentPriceCDONFI": null,

      "OrdinaryPriceCDONFI": null

    },

Что означает полный список элементов, которые Online

Как мне это поставить ... среди всех API, которые я пробовал, это очень сбивает с толку, это даже RestFul?Если я смогу получить Python-эквивалент этого примера кода на C #:

public string Post(Guid repordId, string path)
{
  var filter = new JavaScriptSerializer().Serialize(new
  {
         States = new[] { "0" } // Pending state
  });

  var content = new FormUrlEncodedContent(new[]
  {
         new KeyValuePair("ReportId", repordId.ToString()),
         new KeyValuePair("format", "json"),
         new KeyValuePair("filter", filter)
  });

  var httpClient = new HttpClient() { BaseAddress = new Uri("https://admin.marketplace.cdon.com/") };
  httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("api", ApiKey);
  var response = httpClient.PostAsync(path, content).Result;
  response.EnsureSuccessStatusCode();

  return response.Content.ReadAsStringAsync().Result;
}

Возможно, я смогу понять, как работает этот API, полученный ответ был взят вручную из их функции отчета в формате JSON.

Изображение

Я предпринял много попыток и на этом коде (своем коде) я остановился, так как в течение 4 часов я сдался и спросил.Поверьте, я искал столько ссылок, сколько мог.Это действительно сбивает с толку.

Как получить ответ, который я хочу?Фильтрация через URL?или через заголовок?это даже успокаивает?Помощь T_T

1 Ответ

0 голосов
/ 10 июня 2018

Документация в первой строке гласит:

Чтобы сгенерировать отчет, вы выполняете POST-вызов API отчетов с параметрами, которые вы хотитеиспользуйте для отчета.

Ваш код Python не выполняет запрос POST, вы пытаетесь выполнить запрос GET.Документация идет по

[...], чтобы отфильтровать по шведским заказам, для атрибута CountryCodes установлено значение «Швеция», а для получения возвращенных и отмененных заказов вы установите для атрибута States значения 2 и 3.Таким образом, в конце концов фильтр будет выглядеть так:

{
    "CountryCodes": [ "Sweden" ],
    "States": ["2", "3"]
}

Поэтому вам нужно подготовить объект filter (словарь в Python) с фильтрами, которые выхочу.К счастью, синтаксис Python для словарей эквивалентен (Python гибкий и также допускает строки в одинарных кавычках):

filter = {
    'CountryCodes': [ 'Sweden' ],
    'States': [ '0' ]
}

Документация продолжается

Затем вы публикуете параметры в видеdata (content-type: application/x-www-form-urlencoded), поэтому тело запроса будет выглядеть так:

ReportId=d4ea173d-bfbc-48f5-b121-60f1a5d35a34&format=json&filter={"CountryCodes":["Sweden"],"States":["2","3"]}

application/x-www-form-urlencoded - это значение по умолчанию для сообщения HTTP, модуль запросов знает об этом и делает это автоматически.Все, что вам нужно сделать, это подготовить data текст, который будет содержать данные, которые вы хотите опубликовать.

data = {
    'ReportId': 'd4ea173d-bfbc-48f5-b121-60f1a5d35a34',
    'format': 'json'
    'filter': json.dumps(filter)
}

Параметр filter должен быть в формате JSON.Вы должны закодировать это сами с помощью json.dumps().

import json

head = { ... as above }
filter = { ... as above }
data = { ... as above }

response = requests.post(url, data, header=head)

. Я оставлю в качестве упражнения правильную настройку заголовка авторизации.Отчасти потому, что это не сложно, отчасти потому, что я не собираюсь создавать ключ API с этим веб-сайтом только для тестирования этого, а отчасти потому, что вполне возможно, что ваш текущий заголовок уже работает.

...