Пример использования Product API от Fetchee для парсинга товаров интернет-магазина
В этой инструкции мы расскажем о том, как с помощью Fetchee Product API получить данные о товаре по URL на примере интернет-магазина lamoda.
Для тех, кто не читал нашу прошлую заметку — Product API будет полезен разработчикам, которым требуется получать данные о товарах из любого магазина, но которые не хотят тратить время на создание собственной системы парсинга или уже осознали, что open-source библиотеки обладают существенными ограничениями и требуют много времени на поддержку. Наш автоматический и не требующий настройки API для парсинга eCommerce данных даёт возможность сосредоточится на разработке основных функций вашего приложения. К тому же попробовать его очень просто. Детали под катом.
Для начала вам понадобится ключ доступа к API. Оставьте заявку на https://fetch.ee/ru/developers/. Мы предоставляем доступ всем желающим и обычно отвечаем на заявки в течении 24-х часов.
1. Отправка запроса на парсинг товара по URL
Обратите внимание, что API принимает только POST запросы в формате application/json на URL https://fetch.ee/api/v1/product:
{
"url":"",
"api_key":"",
"callback_url":""
}
Пример запроса для товара по адресу http://www.lamoda.ru/p/ug174awohj47/shoes-uggaustralia-uggi/ будет выглядеть следующим образом (мы добавили демонстрационный API-ключ, который проживёт пару дней):
curl -X POST -H "Content-type: application/json" -d '{"url": "http://www.lamoda.ru/p/ug174awohj47/shoes-uggaustralia-uggi/", "api_key": "01ed6a957225ba8bf106f817135c609f", "callback_url": "http://requestb.in/16s123v1"}' https://fetch.ee/api/v1/product
Все параметры обязательные, если какого-то из них не будет, то сервер вернёт 403 ошибку, как и в случае неправильного API-ключа.
Product API обрабатывает запросы асинхронно, время получения ответа может варьироваться от пары секунд до нескольких десятков минут. Это связано с нагрузкой на систему в конкретном географическом регионе. API отправит данные на указанный вами URL по завершении парсинга (callback_url).
Максимальное время ожидания составляет 30 минут, после чего в любом случае будет отправлен ответ с результатом или сообщение о невозможности завершить парсинг товара по указанному URL.
Для тестирования API удобно использовать сервис http://requestb.in. Заведите на нем новый контейнер (Create a RequestBin) и указывайте полученный URL в качестве callback_url. Все ответы от API будут приходить на него, просто обновляйте страницу браузере.
2. Поля и варианты ответа API
В ответе используются следующие поля:
- success — результат отправки URL на парсинг;
- id — уникальный ID запроса;
- already_processed — запрос уже был недавно обработан;
- not_shop — URL не принадлежит магазину;
- not_product — по данному URL нет данных о товаре.
Любое из полей, кроме success, может отсутствовать.
Сразу после запроса, вы получите ответ в JSON формате. ID нужен для сопоставления отправленных вами запросов и полученных на callback_url ответов. В данном случае всё прошло отлично и товар был принят на парсинг.
{
"success": true,
"id": "583ea83a09e9497a0eb1b82a"
}
Такой ответ последует, если вы попытаетесь отправить на парсинг URL, который уже был обработан менее 6 часов назад. В данном случае вызова на callback_url не последует.
{
"success":true,
"id":"583ea83a09e9497a0eb1b82a",
"already_processed":true
}
Данный ответ вы получите, если API уже знает, что указанный URL не относится к сайту интернет-магазина. Товар не добавляется на парсинг и вызова callback_url не будет. Мы ведём чёрный список сайтов, куда входят в том числе сомнительные и партнерские магазины (выступающие как витрины с товарами других магазинов).
{
"success":false,
"not_shop":true
}
Когда API знает, что по данному URL нет товара (страница категории, главная страница магазина и т.д.). Товар не добавляется на парсинг и вызова callback_url не будет.
{
"success":false,
"not_product":true
}
3. Получение результата парсинга
API отправляет POST запрос с ответом в JSON на указанный в callback_url адрес. Через 20 секунд мы получили такой результат парсинга:
{
"id":"583ea83a09e9497a0eb1b82a",
"url":"http://www.lamoda.ru/p/ug174awohj47/shoes-uggaustralia-uggi/",
"created_at":"2016-11-30T10:21:46.865Z",
"title":"Обувь угги UGG Australia",
"price":22800,
"currency":"RUB",
"img_url":"https://fetch.ee/assets/item-images/583e/a843a9436d700e54ef37.jpg",
"brand":"UGG Australia"
}
Рассмотрим полученный JSON более подробно. В ответе всегда присутствуют 3 обязательных параметра:
- id — уникальный ID запроса;
- url — окончательный URL товара (если были редиректы, или мы вырезали различные ненужные query_params из URL (UTM-метки, например);
- created_at — время создания запроса на парсинг товара;
Любой из следующих параметров может отсутствовать:
- title — название товара;
- price — цена;
- currency — код валюты (например, RUB, USD, EUR);
- img_url — ссылка на изображение товара;
- brand — производитель товара;
- out_of_stock: true — когда товар отсутствует в продаже;
- removed: true — когда товар вообще пропал из магазина и происходит перенаправление на страницу категории, главную страницу магазина или получаем 404 ответ от сервера;
- not_shop: true — когда за время парсинга API определил, что URL не принадлежит магазину, хотя ранее принял запрос на обработку;
- not_product: true — коза за время парсинга API определил, что URL не содержит информации о товаре, хотя запрос на обработку был принят;
- unprocessed: true — когда Product API не смог получить ключевые параметры товара title или price.
Если Product API может быть вам полезен, оставляйте заявку на fetch.ee/ru/developers! Напишите в комментариях какие ещё параметры товаров вы бы хотели получать в дополнение к уже доступным?