Пример использования 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":"<URL ТОВАРА>",    "api_key":"<API КЛЮЧ>",    "callback_url":"<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/1fsapfv1"}' 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! Напишите в комментариях какие ещё параметры товаров вы бы хотели получать в дополнение к уже доступным?
ссылка на оригинал статьи https://habrahabr.ru/post/316558/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *