<?php /** * Пример вызова: * /usr/bin/php /var/www/site.ru/httpdocs/cron/import_market_shop_opinions.php * Пример вызова с передачей php.ini * /usr/bin/php --php-ini /etc/php.ini /var/www/site.ru/httpdocs/cron/import_market_shop_opinions.php * Реальный путь на сервере к корневой директории сайта уточните в службе поддержки хостинга. * * @author KAD Systems (©) 2017 */ @set_time_limit(90000); require_once(dirname(__FILE__) . '/../' . 'bootstrap.php'); /** * Настройки сценария. */ // Информационная система для хранения отзывов об интернет-магазине $marketInfosystemId = 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); $oInformationsystem = Core_Entity::factory('Informationsystem', $marketInfosystemId); $oInformationsystemItemPropertyList = Core_Entity::factory('Informationsystem_Item_Property_List', $oInformationsystem->id); if (preg_match('/market\.yandex\.ru\/shop\/([0-9]+)/', $oInformationsystem->description, $aMatches)) { $aoShopOpinions = $oKadMarketContentController->getShopOpinions($aMatches[1]); $aUpdatedOpinionIds = array(); foreach ($aoShopOpinions as $oShopOpinion) { $oInformationsystemItem = $oInformationsystem->Informationsystem_Items->getByName($oShopOpinion->id); if (!$oInformationsystemItem) { $oInformationsystemItem = Core_Entity::factory('Informationsystem_Item'); $oInformationsystemItem->name = $oShopOpinion->id; $oInformationsystemItem->add($oInformationsystem); } $oInformationsystemItem->description = ''; // Комментарий if (isset($oShopOpinion->text)) { $oInformationsystemItem->description = "<p> <b>Комментарий.</b> {$oShopOpinion->text} </p>"; } // Достоинства if (isset($oShopOpinion->pro)) { $oInformationsystemItem->description = "<p> <b>Достоинства.</b> {$oShopOpinion->pro} </p>" . $oInformationsystemItem->description; } // Недостатки if (isset($oShopOpinion->contra)) { $oInformationsystemItem->description = "<p> <b>Недостатки.</b> {$oShopOpinion->contra} </p>" . $oInformationsystemItem->description; } $oInformationsystemItem->description = Kad_MarketContent_Controller::processLinks($oInformationsystemItem->description); // Автор $author = isset($oShopOpinion->author) ? $oShopOpinion->author : 'Автор скрыл свои данные'; $oAuthorProperty = $oInformationsystemItemPropertyList->Properties->getByTagName('author'); if ($oAuthorProperty) { $aoAuthorPropertyValues = $oAuthorProperty->getValues($oInformationsystemItem->id, FALSE); $oAuthorPropertyValue = count($aoAuthorPropertyValues) ? $aoAuthorPropertyValues[0] : $oAuthorProperty->createNewValue($oInformationsystemItem->id); $oAuthorPropertyValue->value = $author; $oAuthorPropertyValue->save(); } // Регион if (isset($oShopOpinion->region) && $oShopOpinion->region) { $oRegionInfo = $oKadMarketContentController->getRegionInfo($oShopOpinion->region); if ($oRegionInfo) { $oRegionProperty = $oInformationsystemItemPropertyList->Properties->getByTagName('region'); $aoRegionPropertyValues = $oRegionProperty->getValues($oInformationsystemItem->id, FALSE); $oRegionPropertyValue = count($aoRegionPropertyValues) ? $aoRegionPropertyValues[0] : $oRegionProperty->createNewValue($oInformationsystemItem->id); $oRegionPropertyValue->value = $oRegionInfo->name; $oRegionPropertyValue->save(); } } // Оценка $oGradeProperty = $oInformationsystemItemPropertyList->Properties->getByTagName('grade'); if ($oGradeProperty) { $aoGradeProperties = $oGradeProperty->getValues($oInformationsystemItem->id, FALSE); $oGradePropertyValue = count($aoGradeProperties) ? $aoGradeProperties[0] : $oGradeProperty->createNewValue($oInformationsystemItem->id); $oGradePropertyValue->value = $oShopOpinion->grade + 3; $oGradePropertyValue->save(); } $oInformationsystemItem->datetime = Core_Date::timestamp2sql(substr($oShopOpinion->date, 0, -3)); $oInformationsystemItem->active = 1; $oInformationsystemItem->save(); $aUpdatedOpinionIds[] = $oInformationsystemItem->id; } // Деактивируем отзывы, которые не пришли из Маркета if (count($aUpdatedOpinionIds)) { $oInformationsystemItems = $oInformationsystem->Informationsystem_Items; $oInformationsystemItems->queryBuilder() ->where('informationsystem_items.id', 'NOT IN', $aUpdatedOpinionIds); $aoInformationsystemItems = $oInformationsystemItems->findAll(); foreach ($aoInformationsystemItems as $oInformationsystemItem) { $oInformationsystemItem->active = 0; $oInformationsystemItem->save(); } } } if ($log) { print 'countRequests = ' . $oKadMarketContentController->getCountRequests() . "\n"; }