Документация по API - Market Parser

Работа с API

Автоматизация работы с сервисом

Существует возможность взаимодействия с сервисом через HTTP API. Это открывает множество возможностей по автоматизации работы, аггрегации результатов отчётов, и т.д. Документация доступна ниже.

API v2

Содержание

Базовая информация

Авторизация

По ключу.

Для передачи ключа в запросе нужно использовать HTTP заголовок Api-Key.

Ключ будет доступен после авторизации.

Формат

JSON. В запросе должен присутствовать заголовок Content-Type со значением application/json.

HTTP методы

В данный момент - GET и POST. GET - для получения информации, POST - для создания сущностей.

Обработка ошибок

В случае, если запрос не был обработан корректно, возвращается ответ вида

{
  "code": "ERROR_CODE",
  "message": "Error message"
}

Например:

{
  "code": 404,
  "message": "Price #1 not found."
}

Код ошибки повторяется в HTTP коде ответа.

Формат ответа

Все успешные ответы имеют следующую структуру:

{
  "response": [
    //...
  ]
}

Примеры:

{
  "response": [
    {
      "id": 222
    }
  ]
}
{
  "response": [
    {
      "success": true
    }
  ]
}

Структура урлов

https://cp.marketparser.ru/api/v2/ENDPOINT/SLUG.json?param=value

Endpoints

Кампании

Список кампаний

метод: GET

URL: https://cp.marketparser.ru/api/v2/campaigns.json

Пример ответа:

{
  "response": {
    "total": 3,
    "campaigns": [
      {
        "id": 557,
        "name": "Ноутбуки",
        "createdAt": "2015-10-28T16:38:00+03:00",
        "readyToCreateReports": true
      },
      {
        "id": 556,
        "name": "Мобильные телефоны",
        "createdAt": "2015-10-28T16:38:00+03:00",
        "readyToCreateReports": false
      },
      {
        "id": 555,
        "name": "Весь магазин",
        "createdAt": "2015-10-28T16:38:00+03:00",
        "readyToCreateReports": true
      }
    ]
  }
}

Выводится до 25 кампаний в ответе. Возможен постраничный вывод при указании query parameter page, url принимает вид https://cp.marketparser.ru/api/v2/campaigns.json?page=2

Поле total показывает полное число кампаний.

Поле readyToCreateReports показывает, можно ли по данной кампании создать отчёт. Для того, чтобы можно было создать отчёт по кампании, она должна быть настроена, а также её прайс должен быть успешно обработан.

Создание и настройка кампаний

Для большинства сценариев использования API нет необходимости в создании или изменении настроек кампании. Всегда есть возможность настроить кампанию через веб-интерфейс. Сделать это нужно всего один раз.

Поэтому в данный момент в API нет способа создать кампанию или изменить её настройки.

Единственная настройка кампании, которую иногда необходимо менять в автоматическом режиме - это регион(ы) мониторинга.

И у нас есть возможность указать регион мониторинга при обновлении прайс-листа. Более того, этот вариант настройки более гибкий, чем обычное указание региона мониторинга в кампании. Он позволяет в одном отчёте получать данные по разным товарам из разных регионов (100 товаров по Москве, 200 других товаров по СПб и так далее).

В случае использования обычных настроек - пришлось бы использовать несколько кампаний, или несколько раз менять настройки кампании и обновлять прайс-лист.

Если вам интересна эта функция - обратитесь в тех. поддержку для её активации и получения деталей.

Прайс кампании

Обновление прайса кампании

метод: POST

URL: https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/price.json

Пример тела запроса:

{
  "products": [
    {
      "name": "product-1",
      "cost": 500,
      "id": "our-shop-identifier-1",
      "yandex_model_id": 111111,
      "custom": {
        "custom-field-1": "custom-value-1",
        "custom-field-2": "custom-value-2"
      }
    },
    {
      "name": "product-2",
      "cost": 800,
      "id": "our-shop-identifier-2",
      "yandex_model_id": 22222,
      "custom": {
        "custom-field-1": "custom-value-1",
        "custom-field-2": "custom-value-2"
      }
    }
  ]
}

Поле products - обязательное. Массив products не должен быть пустым. Все элементы массива products должны иметь одинаковую структуру.

Замечание: при использовании Триального прайс-листа существует ограничение на размер прайс-листа - 200 позиций. При попытке загрузки прайс-листа большего размера прайс получит статус PARSED_BUT_TRIAL_PRICE_SIZE_LIMIT_EXCEEDED и не будет успешно обработан. На других тарифных планах такого ограничения нет.

Элементы массива products должны иметь поле name.

Значения, которых нет в базовом наборе полей, но которые необходимо получить в результате парсинга (привязанные к тем же продуктам) могут быть перечислены в поле custom. Иногда бывает полезно передать некую дополнительную информацию о позиции (например, цена со скидкой, название категории, ссылка на товар в вашем магазине, и т.д.), чтобы в дальнейшем вся нужная информация была доступна в отчёте.

Данные прайса должны быть переданы в теле POST запроса.

Ответом на успешный запрос создания прайса будет следующее:

{
  "response": {
    "success": true
  }
}

В случае ошибок, будет передан текст и код ошибки, например:

{
  "code": 400,
  "message": "Price field \"products\" of type array required"
}

Пример кода для обновления прайса кампании на языке PHP:

<?php

$apiKey = 'PUT-YOUR-API-KEY-HERE';
$campaignId = 555; //replace with your actual campaign ID
$url = sprintf('https://cp.marketparser.ru/api/v2/campaigns/%s/price.json', $campaignId);

$products = [
    [
        "name" => "apple iphone 6s plus 16 gb", //REQUIRED field
        "cost" => 60000, //optional field
        "id" => "our-shop-identifier-1", //optional field
        "yandex_model_id" => 12858631, //optional field
        "custom" => [ //optional field
            "custom-field-1" => "custom-value-1",
            "custom-field-2" => "custom-value-2",
        ],
    ],
    [
        "name" => "Siemens WS 10G160", //REQUIRED field
        "cost" => 25000, //optional field
        "id" => "our-shop-identifier-2", //optional field
        "yandex_model_id" => 8444167, //optional field
        "custom" => [ //optional field
            "custom-field-1" => "custom-value-1",
            "custom-field-2" => "custom-value-2",
        ],
    ],
];

$priceData = [
    'products' => $products,
];

$curlHandle = curl_init($url);
curl_setopt_array($curlHandle, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Api-Key: ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($priceData),
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,

    //you can download cacert.pem here: https://curl.haxx.se/ca/cacert.pem
    CURLOPT_CAINFO => '/path/to/cacert.pem',
]);

$response = curl_exec($curlHandle);
$curlError = curl_error($curlHandle);
curl_close($curlHandle);

if ($response === false) {
    //curl error occured, check $curlError for details
} else {
    $parsedResponse = json_decode($response, true);
    if (isset($parsedResponse['response']['success']) && $parsedResponse['response']['success'] === true) {
        //price was updated successfully
    } else {
        //an error occured, check $parsedResponse['message']
    }
}

Получение информации о прайсе кампании

После создания прайс не будет сразу же готов к использованию. Он должен быть обработан сервисом. Получение информации о прайсе:

метод: GET

URL: https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/price.json

Примеры ответа:

{
    "response": {
        "id": 333,
        "createdAt": "2015-10-28T16:38:00+03:00",
        "status": "PROCESSED",
        "countNotEmptyRows": 2,
        "countFoundDuplicatedRows": 0,
        "isSuccessfullyProcessed": true
    }
}

Исходя из значения поля isSuccessfullyProcessed можно определить, можно ли создавать отчёты по кампании.

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

  • ERROR
  • PARSED
  • READY_TO_BE_PARSED
  • SEARCH_IN_PROGRESS
  • PROCESSED
  • NOT_ENOUGH_BALANCE_TO_PROCESS
  • PARSED_BUT_TRIAL_PRICE_SIZE_LIMIT_EXCEEDED

Отчёты кампании

Создание отчёта по кампании

method: POST

url: https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports.json

В ответе будет отдан ID созданного отчёта, например:

{
  "response": {
    "id": 123
  }
}

Прайс кампании, указанной в ссылке создания отчёта, должен быть обработан (поле isSuccessfullyProcessed в информации о прайсе должно быть установлено в true). Если это не так - будет возвращена ошибка:

{
  "code": 400,
  "message": "Campaign price is not processed yet.."
}

Получение информации об отчёте

method: GET

url: https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports/REPORT_ID.json

Примеры ответа:

{
    "response": {
        "id": 500,
        "status": "WAITING",
        "createdAt": "2015-10-30T11:12:52+03:00",
        "isSuccessfullyFinished": false
    }
}
{
  "response": {
    "id": 32,
    "status": "OK",
    "createdAt": "2015-10-28T16:38:00+03:00",
    "isSuccessfullyFinished": true,
    "startedAt": "2015-10-28T16:38:00+03:00",
    "finishedAt": "2015-10-28T16:38:00+03:00",
    "countErrorProducts": 0,
    "countOkProducts": 3
  }
}

Когда поле isSuccessfullyFinished принимает значение true, результаты обработки отчёта можно забирать.

Дополнительная информация о прогрессе обработки отчёта доступна в поле status. Поле status может принимать значения:

  • WAITING
  • WAITING_FOR_REDOWNLOAD_ERRORS
  • IN_PROGRESS
  • OK
  • ERROR

Получение результатов парсинга отчёта

method: GET

URL: https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports/REPORT_ID/results.json

По-умолчанию выводится до 25 результатов (товаров отчёта) в ответе. Это число можно изменить используюя query parameter per_page, максимальное его значение - 100. При его использовании url принимает вид https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports/REPORT_ID/results.json?per_page=100

Возможен постраничный вывод при указании query parameter page, url принимает вид https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports/REPORT_ID/results.json?page=2

Примеры ответа:

{
  "response": {
    "total": 2,
    "products": [
      {
        "name": "product1",
        "yandexModelId": 5555555,
        "yandexRegionId": 213,
        "yandexRegionName": "Москва",
        "linkToOffers": "https://market.yandex.ru/product/5555555/offers?lr=35&deliveryincluded=0&cpa=&how=aprice",
        "ourId": "1",
        "ourCost": 6611,
        "medianPrice": 1880,
        "maxPrice": 2100,
        "minPrice": 1660,
        "averagePrice": 1880,
        "countOffers": 2,
        "ourShopPosition": 1,
        "offers": [
          {
            "shopName": "Ситилинк",
            "price": 2100,
            "deliveryPrice": 290,
            "inStock": true,
            "pickup": true,
            "producerWarranty": false,
            "linkToOffer": "https://market.yandex.ru/search.xml?lr=213&fesh=111111&cvredirect=0&text=product1"
          },
          {
            "shopName": "Cenam.NET",
            "price": 1660,
            "deliveryPrice": null,
            "inStock": false,
            "pickup": false,
            "producerWarranty": false,
            "linkToOffer": "https://market.yandex.ru/search.xml?lr=213&fesh=222222&cvredirect=0&text=product1"
          }
        ],
        "custom": {
          "employer_id": 111,
          "yandex_region_id": 1
        },
         "searchResult": "NO_MODELS"
      },
      {
        "name": "product2",
        "yandexModelId": null,
        "yandexRegionId": 213,
        "yandexRegionName": "Москва",
        "linkToOffers": "https://market.yandex.ru/search.xml?lr=35&deliveryincluded=0&cpa=&how=aprice&cvredirect=0&onstock=0&text=product2",
        "ourId": "2",
        "ourCost": 6622,
        "medianPrice": 1880,
        "maxPrice": 2100,
        "minPrice": 1660,
        "averagePrice": 1880,
        "countOffers": 2,
        "ourShopPosition": 1,
        "offers": [
          {
            "shopName": "Ситилинк",
            "price": 2100,
            "deliveryPrice": 290,
            "inStock": true,
            "pickup": true,
            "producerWarranty": false,
            "linkToOffer": "https://market.yandex.ru/search.xml?lr=213&fesh=11111&cvredirect=0&text=product2"
          },
          {
            "shopName": "Cenam.NET",
            "price": 1660,
            "deliveryPrice": null,
            "inStock": false,
            "pickup": false,
            "producerWarranty": true,
            "linkToOffer": "https://market.yandex.ru/search.xml?lr=213&fesh=22222&cvredirect=0&text=product2"
          }
        ],
        "custom": {
          "employer_id": 222,
          "yandex_region_id": 2
        },
        "searchResult": "NO_MODELS"
      }
    ]
  }
}
{
  "response": {
    "total": 26,
    "products": [
      {
        "name": "product26",
        "yandexModelId": null,
        "yandexRegionId": 213,
        "yandexRegionName": "Москва",
        "linkToOffers": "https://market.yandex.ru/search.xml?lr=213&deliveryincluded=0&cpa=&how=aprice&cvredirect=0&onstock=0&text=product26",
        "ourId": "26",
        "ourCost": null,
        "medianPrice": 1880,
        "maxPrice": 2100,
        "minPrice": 1660,
        "averagePrice": 1880,
        "countOffers": 2,
        "ourShopPosition": null,
        "offers": [
          {
            "shopName": "Ситилинк",
            "price": 2100,
            "deliveryPrice": 290,
            "inStock": true,
            "pickup": true,
            "producerWarranty": false,
            "linkToOffer": "https://market.yandex.ru/search.xml?lr=213&fesh=111111&cvredirect=0&text=product26"
          },
          {
            "shopName": "Cenam.NET",
            "price": 1660,
            "deliveryPrice": null,
            "inStock": false,
            "pickup": false,
            "producerWarranty": true,
            "linkToOffer": "https://market.yandex.ru/search.xml?lr=213&fesh=222222&cvredirect=0&text=product26"
          }
        ],
        "custom": {},
        "searchResult": "NO_MODELS"
      }
    ]
  }
}

Поле total показывает полное число товаров в отчёте.

Элементы offers массива products содержат поле custom, в которое подставляются те кастомные поля, которые были переданы при создании прайса.

В поле yandexModelId указывается ID модели на яндекс маркете, данные по которой были получены. Если соответствующей карточки нет, поле будет иметь значение null.

В полях yandexRegionId и yandexRegionName указываются соответственно ID и название региона на яндекс маркете (отчёт может быть создан по нескольким регионам, эти поля необходимы для того, чтобы понять, к какому региону относятся данные).

Поле searchResult (результат поиска товар) может иметь 3 возможных значения:

  • NO_MODELS - моделей при поиске товара по названию не найдено
  • MANY_MODELS - найдено несколько моделей при поиске товара по названию
  • ONE_MODEL - найдена одна модель при поиске товара по названию

Получение списка отчётов кампании

method: GET

URL: https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports.json

Выводится до 25 результатов в ответе. Возможен постраничный вывод при указании query parameter page, url принимает вид https://cp.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports.json?page=2

Примеры ответа:

{
  "response": {
    "total": 27,
    "reports": [
      {
        "id": 26,
        "status": "OK",
        "createdAt": "2015-10-28T16:38:00+03:00",
        "isSuccessfullyFinished": true,
        "startedAt": "2015-10-28T16:38:00+03:00",
        "finishedAt": "2015-10-28T16:40:00+03:00",
        "countErrorProducts": 0,
        "countOkProducts": 1
      },
      {
        "id": 27,
        "status": "OK",
        "createdAt": "2015-10-29T16:38:00+03:00",
        "isSuccessfullyFinished": true,
        "startedAt": "2015-10-29T16:38:00+03:00",
        "finishedAt": "2015-10-29T16:40:00+03:00",
        "countErrorProducts": 0,
        "countOkProducts": 5
      }
    ]
  }
}

Поле total показывает полное число отчётов.

Структура элементов массива reports такая же, как при получении информации об отчёте по его ID.

Информация о пользователе

Баланс

method: GET

URL: https://cp.marketparser.ru/api/v2/me/balance.json

Устаревший endpoint, используйте Информация о подписке на план вместо него.

Получение текущего баланса пользователя.

Пример ответа:

{
  "response": {
    "balance": 200000
  }
}

Информация о подписке на план

method: GET

URL: https://cp.marketparser.ru/api/v2/me/plan.json

Получение плана на который активирована подписка, остаток единиц и даты окончания подписки.

Пример ответа:

{
  "response": {
    "planName": "ПРО 200 000",
    "remainingUnits": 13520,
    "planExpiresAt": "2017-05-20"
  }
}

В случае если активной подписки нет - будет возвращён следующий ответ:

{
  "response": {
    "planName": null,
    "remainingUnits": 0,
    "planExpiresAt": null
  }
}
Внимание! API v1 - устаревшая версия нашего API. В скором времени он будет отключен. Рекомендуем в ближайшее время перейти к использованию API v2.