В этой инструкции мы расскажем о том, как с помощью 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/
Добавить комментарий