Парсер отзывов с яндекс маркета в opencart

Очередной нестандартный заказ по opencart оказался довольно интересным. Цель была следующей — написать парсер отзывов с яндекс маркета, используя официальный api яндекс. В магазина у заказчика есть несколько тысяч товаров, у которых заранее была указана связь с яндекс маркетом, т.е. у каждого товара был указан id товара в маркете, это необходимо для получения списка отзывов по api.

Сложность в том, что яндекс предоставляет возможность отправить только 100 бесплатных запросов к своему api в сутки, при этом в одном запросе можно получить не более 30 отзывов. Сам скрипт получения отзывов довольно простой:

 /**
     * @param $product_id
     * @param $page
     * @return mixed|null
     * метод получает отзывы с яндекс маркета
     */
    protected function getReviews($product_id, $page){
        $url = "https://api.content.market.yandex.ru/v1/model/{$product_id}/opinion.json?count={$this->limit_reviews}&how=asc&sort=date&page={$page}";
        $headers = array(
            "Host: api.content.market.yandex.ru",
            "Accept: */*",
            "Authorization: {$this->api_key}"
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        $data = curl_exec($ch);

        if($data === false){
            $data['errors'][] = curl_error($ch);
            $data = json_encode($data);
        }
        curl_close($ch);

        return json_decode($data);
    }

Самое интересное в остальной части парсера, которая состоит из двух независимых демонов, запускаемых по крону. Первый получает постепенно каждый день по 30 отзывов для каждого товара, пока не закончатся отзывы. Второй проверяет, если все отзывы для текущего цикла были спарсены — обнуляет прогресс и тогда первый демон начинает цикл с начала, добавляя новые отзывы (если они появились). И так до бесконечности 🙂

Демоны запускаются раз в сутки, так как лимит дается на сутки. Пример страницы с такими отзывами https://instrument-group.ru/lobzik_makita_4329.htm

Сам парсер не может продаваться как модуль, так как дорабатывается под каждый сайт в зависимости от используемого модуля вывода комментариев. На сайте выше например использован модуль seo cms для отзывов. Поэтому, если кого-то заинтересует подобный парсер — пишите, обсудим.

UP 23.12.2018 тема перестала быть актуальной, так как яндекс отключил выдачу новых ключей доступа к контекстному api и теперь парсить отзывы таким способом не получится

This entry was posted in Opencart and tagged , , . Bookmark the permalink.

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

Ваш адрес email не будет опубликован.

*