Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

День добрый, возникла проблема с парсером характеристик, заметил что и на демо не парсит, хотя товар есть в маркете, к примеру "Samsung Galaxy S5"

 

Есть ли решение данной проблемы ?

Ссылка на сообщение
Поделиться на другие сайты

День добрый, возникла проблема с парсером характеристик, заметил что и на демо не парсит, хотя товар есть в маркете, к примеру "Samsung Galaxy S5"

 

Есть ли решение данной проблемы ?

вообще работает, проблема в выдаче Яндекс, так как по етому запросу (http://market.yandex.ru/search.xml?text=Samsung+Galaxy+S5&nopreciser=1) он выдает модели не из каталога, а просто предложение магазинов,  

Ссылка на сообщение
Поделиться на другие сайты

т.е те телефоны которые не в каталогах на них характеристику вытащить невозможно.

А есть ли аналог какой нить чтоб не с yandexa парсил а с других магазинов ?

Ссылка на сообщение
Поделиться на другие сайты

т.е те телефоны которые не в каталогах на них характеристику вытащить невозможно.

А есть ли аналог какой нить чтоб не с yandexa парсил а с других магазинов ?

ето надо писать индивидульно под каждый магазин + не факт что ето возможно. (к примеру на сайте донара нету поиска)

Ссылка на сообщение
Поделиться на другие сайты

Что-то у меня перестал работать парсер характеристик товаров.
Парсер картинок работает как и раньше.

 

Яндекс Маркет ничего не менял, никто не в курсе?

Ссылка на сообщение
Поделиться на другие сайты

У меня такая проблема с понедельника...

Я уже виду борьбу с хостингом и Яндекс-маркетом, и походу проблему мою решать никто не собирается.

 

Что было мной сделано...

1) Сначало я подумал что дело в max_input_vars

я увеличил это значение но ничего не изменилось.

2) потом Мы с хостингом пришли к мнению, что сайт размещается на общих условиях и что с моего IP есть какой-то сайт который который спамит на яндекс, из-за чего был заблокирован IP хостинга.

Решили заказать услугу Индивидуальный IP адрес.

Теперь у сайта свой собственный IP на котором больше нет никаких сайтов.

Проблема не исчезла!

Вот что пишет яндекс на мои письма 

=========================

Здравствуйте!

На сервисе Яндекс.Маркет с Вашего компьютера было зафиксировано большое количество запросов служебного характера и/или с частотой, недоступной человеку.

Возможно, Вы используете программное обеспечение или дополнительные плагины к браузерам, производящие автоматические запросы к сервису. В этом случае, чтобы снова использовать поиск Яндекса, Вам необходимо отключить программное обеспечение, плагины, тулбары и т.д., которые могут задавать такого рода запросы.

Если же Вы не задавали запросов такого рода, то, пожалуйста, проверьте Ваш компьютер антивирусом, поскольку они могут задаваться каким-либо плагином к браузеру или иной программой без Вашего ведома.

=====================================================

Я отправил эту переписку своему хостингу, они сказали что дело в моем сайте, и что нужно устранять проблему внутриним вмешательством.

 

 

Что будем делать господа ?

Ссылка на сообщение
Поделиться на другие сайты

Ну, меня Яндекс точно не мог в бан добавить, т.к. запросов было реально мало.

LUN вон тоже IP менял, ничего не изменилось, так что думаю проблема в самом парсере.

Ссылка на сообщение
Поделиться на другие сайты

Согласен что в парсере... скорее всего яша заблочил парсер нашей симплы=( и нужно новую писать есть кто сможет написать новый парсер???? готов обсудить!!! в личке.

Ссылка на сообщение
Поделиться на другие сайты

Считаю что в такой ситуации нужно всем объеденится и решить проблему, т.к. она массово проявляется на всей Симпле.

Я удивляюсь что активность этой темы так мала, неужеле у других пользователей все работает ?

Ссылка на сообщение
Поделиться на другие сайты

Да нет.

Просто половина не знает про эту функцию, а вторая половина заполнила свои 500-600 товаров и работает с ними.

И только 4 человека постоянно работают с каталогом своим :D

Ссылка на сообщение
Поделиться на другие сайты

В связи с изменением алгоритма Яндекса и усилением их защиты от парсинга выпущена новая версия Simpla 2.3.6 с новым парсером товаров.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Запилил новый магазин на 2.3.6 попробовал парсер характеристик - не работает

Попробовал админку демо с этого сайта - аналогично не работает

 

Картинки парсит, но нужны именно характеристики...

 

Друзья, есть рабочее решение этой проблемы?

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...
  • 2 месяца спустя...

Вот решение, у меня работает https://yadi.sk/d/C0SgguDKda9AH

Заменить /public_html/simpla/ajax/get_info.php

<?php
/**
 * Simpla CMS
 *
 * @copyright	2014 Denis Pikusov
 * @link		http://simplacms.ru
 * @author		Denis Pikusov
 *
 */
 
// Немного настроек 
	
// Для использования прокси используйте строки:
define("USE_PROXY",		0);		// 1 = использовать прокси 
define("PROXY",			'xxx.xxx.xxx.xxx:80');		 
define("PROXY_USER",	'login:password');
define("REGION",		'213'); // 213 - москва, список регионов: http://search.yaca.yandex.ru/geo.c2n
define("DOMAIN",		'market.yandex.ru'); // для украины нужно market.yandex.ua
 
session_start();
// Временный файл для хранения cookies
// Так как временный файл существует до окончания выполнения скрипта,
// сохраняем его содержимое в сессию
$cookies_filename = tempnam(sys_get_temp_dir(), 'yandex_market_cookies');
if(!empty($_SESSION['yandex_market_cookies']))
	file_put_contents($cookies_filename, $_SESSION['yandex_market_cookies']);
// Для изменения региона нужно обратиться сюда
$url = 'http://tune.yandex.ru/region/?retpath=http%3A%2F%2Fmarket.yandex.ru';
get_page($url);
// Ключевое слово для поиска
$keyword = $_GET['keyword'];
// Если нам запостили капчу, отправим ее на проверку
if(!empty($_GET['captcha']))
{
	 $page = get_page("http://".DOMAIN."/checkcaptcha?key=".urlencode($_SESSION['captcha_key'])."&retpath=".urlencode(html_entity_decode($_SESSION['captcha_retpath']))."&rep=".urlencode($_GET['captcha']));
}
// Адрес страницы с результатами поиска
$url = "http://".DOMAIN."/search.xml?cvredirect=2&text=".urlencode($keyword);
// Выбираем результаты поиска
$page = get_page($url);
//print($page);
if(preg_match("/(http:.*\/captchaimg.*)\"\s/ui", $page, $match))
{
	$captcha_image = $match[1];
	
	if(preg_match('/<input type="hidden" name="key" value="(.*)">/ui', $page, $match))
	{
		$_SESSION['captcha_key'] = $match[1];
	}
	
	if(preg_match('/<input type="hidden" name="retpath" value="(.*)">/ui', $page, $match))
	{
		$_SESSION['captcha_retpath'] = $match[1];
	}
	
}
$result = new stdClass();
if(!empty($captcha_image))
{
	$result->captcha = base64_encode(get_page($captcha_image));
	//print "<form><img src='data:image/jpeg;base64," . base64_encode(get_page($captcha_image)) . "' /><input type=text name=captcha><input type=text name=keyword value='$keyword'><input type=text name=captcha_key value='$captcha_key'><input type=text name=captcha_retpath value='$captcha_retpath'><input type=submit></form>";
}
$result->product = parse_product($page);
header("Content-type: application/json; charset=UTF-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");		
print(json_encode($result));
// Функция забирает содержимое страницы по указанному URL
function get_page($url, $level=0)
{
	// Имя временного файла, в котором хранятся куки для CURL
	global $cookies_filename;
	
	// Максимальный уровень рекурсии
	$max_level = 20;
	if($level >= $max_level)
		return false;
	// Должен быть установлен curl
	if(!function_exists('curl_init'))
	{
		trigger_error("curl does not exists");
		return false;
	}
	// Инициализируем curl
	$ch = curl_init(); 
	curl_setopt($ch, CURLOPT_URL, $url); 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
	curl_setopt($ch, CURLOPT_HEADER, true);
	curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");
	curl_setopt($ch, CURLOPT_TIMEOUT, 10);	
	curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_filename);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_filename);
	curl_setopt($ch,CURLOPT_HTTPHEADER, array(
		'Accept   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
		'Connection:keep-alive',
	));	
	// Нужно установить регион
	$cookies_content = file_get_contents($cookies_filename);
	$new_cookies_content = preg_replace('/(yandex_gid).*/', "$1\t".REGION, $cookies_content);
	if($new_cookies_content == $cookies_content)
		$new_cookies_content .= "\n.yandex.ua\tTRUE\t/\tFALSE\t1\tyandex_gid\t".REGION."\n.yandex.ru\tTRUE\t/\tFALSE\t0\tyandex_gid\t".REGION;
	file_put_contents($cookies_filename, $new_cookies_content);	
	
	// Яндекс любит рефереров и реже банит, если реферер правдоподобный
	// Указываем реферером адрес, запрошенный в прошлый раз
	if(!empty($_SESSION['yandex_market_last_visited_url']));
		curl_setopt($ch, CURLOPT_REFERER, $_SESSION['yandex_market_last_visited_url']);
	// Настройки прокси:
	if(USE_PROXY)
	{
		curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
		curl_setopt($ch, CURLOPT_PROXY, PROXY); 
		curl_setopt($ch, CURLOPT_PROXYUSERPWD, PROXY_USER); 
	}
	// Выполняем запрос по адресу
	$data = curl_exec($ch);
	//if(!$data)
	//{
//		trigger_error(curl_error($ch));
	//	return false;
//	}
	// Проверяем код ответа для проверки, нет ли редиректа
	$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
	
	// Больше нам curl не нужен
	curl_close($ch);
	
	// Записываем в сессию куки, которые отложил curl во временный файл
	$_SESSION['yandex_market_cookies'] = file_get_contents($cookies_filename);
	
	// Отделяем тело страницы от заголовка
	$dataArray = explode("\r\n\r\n", $data, 2);
	
	// Делим ответ на заголовок и тело
	if(count($dataArray)!=2)
		return false;	
			
	list($header, $body) = $dataArray;
	// В случае редиректа рекурсивно следуем за яндексом
	if($httpCode == 301 || $httpCode == 302)
	{
		$matches = array();
		preg_match('/Location:(.*?)[\n$]/', $header, $matches);
		if(isset($matches[1]))
		{			
			// Рекурсивно запрашиваем страницу по адресу редиректа
			$body = get_page(trim($matches[1]), $level+1);
		}
	}
	// В случае 404 пробуем еще несколько раз - яндекс часто глючит и отдает 404
	if($httpCode == 404)
	{
		$body = get_page($url, $level+1);
	}
	
	// Сохраняем последний посещенный URL для реферера
	$_SESSION['yandex_market_last_visited_url'] = $url;
	
	// Отдаем тело страницы
	return $body;
}
// Функция отдает результат парсинга страницы
function parse_product($page)
{
	// Если это страница товара, ишем описание
	if(preg_match_all('/<ul class="b-vlist b-vlist_type_mdash b-vlist_type_friendly">(.*?)/ui', $page, $matches))
	{
		// Описание товара
		$description = '<ul>'.reset($matches[1]).'</ul>';
		$result = new stdClass;
		$result->description = $description;
		
		// Страница характеристик
		if(preg_match_all('/<p class="b-model-friendly__title"><a href="(.*?)">/ui', $page, $matches))
		{
			$options_url = 'http://'.DOMAIN.reset($matches[1]);
			
			$options_page = get_page($options_url);
			preg_match_all('/<th class="b-properties__label b-properties__label-title"><span>(.*?)<\/span><\/th><td class="b-properties__value">(.*?)<\/td>/ui', $options_page, $matches, PREG_SET_ORDER);
			
			$options = array();
			foreach($matches as $m)
			{
				$option = new stdClass;
				$option->name = $m[1];
				$option->value = $m[2];
				$options[] = $option;
			}
			$result->options = $options;
		}
		else
			return false;
	}
	// Иногда яндекс отдает не страницу конкретного товара, а список товаров
	// В этом случае переходим на страницу первого товара в списке
	elseif(preg_match_all('/<h3 class="b\-offers__title"><a .*href="(\/model\.xml.*?)"/ui', $page, $matches))
	{                        
		$product_url = 'http://'.DOMAIN.reset($matches[1]);		
		$page = get_page($product_url);
		return parse_product($page);
	}	
	else
		return false;
	return $result;
}
Ссылка на сообщение
Поделиться на другие сайты

Может стоит так же добавить возможность ротации USERAGENT и возможность работы через прокси? Это всего-то пара дополнительных строчек curl_opt

Ссылка на сообщение
Поделиться на другие сайты

Идея хорошая, тогда для маркета мы будем постоянно с разного браузера тем самым

он менее будет понимать что это бот, ну а прокси дает возможность менять ip скрипта, фича это присутствует, но она почему то не хочет работать, я пробовал рабочие прокси - не грузит :)

 

Может найдется добрый человек кто допишет?

Ссылка на сообщение
Поделиться на другие сайты

Файл залить рядом с /public_html/simpla/ajax/get_info.php

https://drive.google.com/file/d/0B11nBtii5IVvRXhySHhxTFJndUE/view?usp=sharing

 

Подключить в любом мете до инициализации cURL, у меня в самом верху

 

include_once("random_user_agent.php");

 

Заменить настройки браузера в cURL c: 

    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");

на: 

    curl_setopt($ch, CURLOPT_USERAGENT,random_user_agent());

 

помогло на 1 раз

Ссылка на сообщение
Поделиться на другие сайты
  • 7 месяцев спустя...

Файл залить рядом с /public_html/simpla/ajax/get_info.php

https://drive.google.com/file/d/0B11nBtii5IVvRXhySHhxTFJndUE/view?usp=sharing

 

Подключить в любом мете до инициализации cURL, у меня в самом верху

 

include_once("random_user_agent.php");

 

Заменить настройки браузера в cURL c: 

    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");

на: 

    curl_setopt($ch, CURLOPT_USERAGENT,random_user_agent());

 

помогло на 1 раз

перезалей, файл не найден

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...