private:koding:hostcms:modules:shop:useful:import_market_opinions:import_market_shop_opinions.php
<?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";
}
private/koding/hostcms/modules/shop/useful/import_market_opinions/import_market_shop_opinions.php.txt · Last modified: 30.06.17 в 16:33 by maximzasorin_gmail.com