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