Существует возможность взаимодействия с сервисом через HTTP API, это открывает множество возможностей по автоматизации работы, агрегации результатов отчётов. Если у вас возникнут вопросы по документации, напишите нам в чат или по email.
Содержание
Базовая информация
Авторизация
По ключу.
Для передачи ключа в запросе нужно использовать HTTP заголовок Api-Key
.
Важно: не сообщайте ключ API третьим лицам, если не хотите дать им доступ к вашему аккаунту.
Формат
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://cp2.marketparser.ru/api/v2/ENDPOINT/SLUG.json?param=value
Endpoints
Кампании
Список кампаний
метод: GET
URL: https://cp2.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://cp2.marketparser.ru/api/v2/campaigns.json?page=2
Поле total
показывает полное число кампаний.
Поле readyToCreateReports
показывает, можно ли по данной кампании создать отчёт. Для того, чтобы можно было создать отчёт по кампании, она должна быть настроена, а также её прайс должен быть успешно обработан.
Создание и настройка кампаний
Для большинства сценариев использования API нет необходимости в создании или изменении настроек кампании. Всегда есть возможность настроить кампанию через веб-интерфейс. Сделать это нужно всего один раз.
Поэтому в данный момент в API нет способа создать кампанию или изменить её настройки.
Единственная настройка кампании, которую иногда необходимо менять в автоматическом режиме — это регион(ы) мониторинга.
И у нас есть возможность указать регион мониторинга при обновлении прайс-листа. Более того, этот вариант настройки более гибкий, чем обычное указание региона мониторинга в кампании. Он позволяет в одном отчёте получать данные по разным товарам из разных регионов (100 товаров по Москве, 200 других товаров по СПб и так далее).
В случае использования обычных настроек — пришлось бы использовать несколько кампаний, или несколько раз менять настройки кампании и обновлять прайс-лист.
Если вам интересна эта функция — обратитесь в тех. поддержку для её активации и получения деталей.
Прайс кампании
Обновление прайса кампании
метод: POST
URL: https://cp2.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://cp2.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://cp2.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://cp2.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://cp2.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports/REPORT_ID/results.json
По-умолчанию выводится до 25 результатов (товаров отчёта) в ответе. Это число можно изменить используюя query parameter per_page, максимальное его значение — 100. При его использовании url принимает вид https://cp2.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports/REPORT_ID/results.json?per_page=100
Возможен постраничный вывод при указании query parameter page, url принимает вид https://cp2.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://cp2.marketparser.ru/api/v2/campaigns/CAMPAIGN_ID/reports.json
Выводится до 25 результатов в ответе. Возможен постраничный вывод при указании query parameter page, url принимает вид https://cp2.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://cp2.marketparser.ru/api/v2/me/balance.json
Устаревший endpoint, используйте Информация о подписке на план вместо него.
Получение текущего баланса пользователя.
Пример ответа:
{ "response": { "balance": 200000 } }
Информация о подписке на план
method: GET
URL: https://cp2.marketparser.ru/api/v2/me/plan.json
Получение плана на который активирована подписка, остаток единиц и даты окончания подписки.
Пример ответа:
{ "response": { "planName": "ПРО 200 000", "remainingUnits": 13520, "planExpiresAt": "2017-05-20" } }
В случае если активной подписки нет — будет возвращён следующий ответ:
{ "response": { "planName": null, "remainingUnits": 0, "planExpiresAt": null } }