<?php /** * Пример вызова: * /usr/bin/php /var/www/site.ru/httpdocs/cron/import_market_models_opinions.php * Пример вызова с передачей php.ini * /usr/bin/php --php-ini /etc/php.ini /var/www/site.ru/httpdocs/cron/import_market_models_opinions.php * Реальный путь на сервере к корневой директории сайта уточните в службе поддержки хостинга. * * @author KAD Systems (©) 2017 */ @set_time_limit(90000); require_once(dirname(__FILE__) . '/../' . 'bootstrap.php'); /** * Настройки сценария. */ // Идентификатор интернет-магазина $shopId = xxx; // Доп. свойство, в котором хранится ссылка на страницу товара в Яндекс.Маркете $marketPropertyId = xxx; // Ключ для Контентного API Маркета $marketKey = 'xxx'; // Выводить техническую информацию $log = TRUE; // Количество дней актуальности кэша запросов $cacheDays = 7; /** * Тело сценария. */ $oKadMarketContentController = new Kad_MarketContent_Controller($marketKey/*, 'http://market.apisystem.ru/v1'*/); $oKadMarketContentController ->log($log) ->cache(TRUE) ->cacheDays($cacheDays); $oShop = Core_Entity::factory('Shop', $shopId); // Выбирем товары $oShopItems = $oShop->Shop_Items; $oShopItems->queryBuilder() ->select('shop_items.*') ->rightJoin('property_value_strings', 'property_value_strings.entity_id', '=', 'shop_items.id', array( array('AND' => array('property_value_strings.property_id', '=', $marketPropertyId)), array('AND' => array('property_value_strings.value', '!=', '')), )) ->where('shop_items.active', '=', 1) ; $aoShopItems = $oShopItems->findAll(); foreach ($aoShopItems as $oShopItem) { $oMarketProperty = Core_Entity::factory('Property', $marketPropertyId); if (!$oMarketProperty) { continue; } $oMarketPropertyValues = $oMarketProperty->getValues($oShopItem->id); if (!count($oMarketPropertyValues)) { continue; } // Пропускаем товары без ссылки на Яндекс.Маркет if (!preg_match('/market\.yandex\.ru\/product\/([0-9]+)/', $oMarketPropertyValues[0]->value, $aMatches)) { continue; } $aoModelOpinions = $oKadMarketContentController->getModelOpinions($aMatches[1]); $aUpdatedCommentIds = array(); foreach ($aoModelOpinions as $oModelOpinion) { $oComment = $oShopItem->Comments->getBySubject($oModelOpinion->id); if (!$oComment) { $oComment = Core_Entity::factory('Comment'); $oComment->subject = $oModelOpinion->id; $oComment->add($oShopItem); } // Обновляем сведения об отзыве // Текст $oComment->text = ''; if (isset($oModelOpinion->text)) { $oComment->text = "<p> <b>Комментарий.</b> {$oModelOpinion->text} </p>"; } if (isset($oModelOpinion->pro)) { $oComment->text = "<p> <b>Достоинства.</b> {$oModelOpinion->pro} </p>" . $oComment->text; } if (isset($oModelOpinion->contra)) { $oComment->text = "<p> <b>Недостатки.</b> {$oModelOpinion->contra} </p>" . $oComment->text; } $oComment->text = Kad_MarketContent_Controller::processLinks($oComment->text); // Автор if (isset($oModelOpinion->author)) { $oComment->author = $oModelOpinion->author; } else { $oComment->author = 'Автор скрыл свои данные'; } // Регион if (isset($oModelOpinion->region) && $oModelOpinion->region) { $oRegionInfo = $oKadMarketContentController->getRegionInfo($oModelOpinion->region); if ($oRegionInfo) { $oComment->phone = $oRegionInfo->name; } } // Оценка $oComment->grade = $oModelOpinion->grade + 3; // Дата $oComment->datetime = Core_Date::timestamp2sql(substr($oModelOpinion->date, 0, -3)); $oComment->active = 1; $oComment->save(); $aUpdatedCommentIds[] = $oComment->id; } // Деактивируем отзывы, которые не пришли из Маркета if (count($aUpdatedCommentIds)) { $oComments = $oShopItem->Comments; $oComments->queryBuilder() ->where('comments.id', 'NOT IN', $aUpdatedCommentIds); $aoComments = $oComments->findAll(); foreach ($aoComments as $oComment) { $oComment->active = 0; $oComment->save(); } } } if ($log) { print 'countRequests = ' . $oKadMarketContentController->getCountRequests() . "\n"; }