Пример использования Product API от Fetchee для парсинга товаров интернет-магазина

image

В этой инструкции мы расскажем о том, как с помощью 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! Напишите в комментариях какие ещё параметры товаров вы бы хотели получать в дополнение к уже доступным?

Комментарии (0)

© Habrahabr.ru