Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

примерно такой код, сайт https://green-spark.ru/ перестал парсится, нужно починить, и настроить еще один сайт https://siriust.ru/

сайт который парсит на битриксе

namespace Retejo;

use Bitrix\Main\Mail\Event;

class ICPrices

{

public static $elemebIB = 1;

public static $parsSleep = 3;

public static $arParamsPars = array(

array("URL_CON", "PRICE_CON", "PRICE_CON_HIST"),

array("URL_CON_2", "PRICE_CON_2", "PRICE_CON_HIST_2"),

array("URL_CON_3", "PRICE_CON_3", "PRICE_CON_HIST_3"),

);

public static $arParamsName = array(

);

public $info;

public $error;

public static function start($filtEl = null)

{

if(!\CModule::IncludeModule("iblock"))

return;

$arCookie = self::saitCookie();

$arError = array();

$arInfo = array();

foreach (self::$arParamsPars as $k => $v) {

$arEl = self::getListElements($v, $filtEl);

foreach ($arEl as $index => $el)

{

$price = new self($el, $arCookie, $v);

if($price->error) {

$arError[] = $price->info;

}elseif(!empty($price->info)) {

$arInfo[] = $price->info;

}

sleep(self::$parsSleep);

}

}

self::sendEvent($arInfo, $arError);

}

private function sendEvent($arInfo, $arError) {

$CONTENT = "";

if(!empty($arInfo) && is_array($arInfo)) {

$CONTENT .= "

Обнаружено изменение цен по след позициям:

";

$CONTENT .= "

Наше названиеНаша ценаЦена конкурента старая : новаяссылка/свойство";

foreach ($arInfo as $k => $v) {

$CONTENT .= $v;

}

$CONTENT .= "


";

}

else {

$CONTENT .= "

Изменения в ценах не найдены;


";

}

if(!empty($arError) && is_array($arError)) {

$CONTENT .= "

Обнаружены ошибки:

";

$CONTENT .= "

Наше названиеОшибкассылка/свойство";

foreach ($arError as $k => $v) {

$CONTENT .= $v;

}

$CONTENT .= "


";

}

else {

$CONTENT .= "

Ошибки в получение цен не найдены;


";

}

$arEventFields = array(

"CONTENT" => $CONTENT,

);

\CEvent::Send("PRICE_UPDATE", 's1', $arEventFields);

}

private function saitCookie()

{

$arCookie = array();

$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';

/*$options = array(

CURLOPT_RETURNTRANSFER => true, // return web page

CURLOPT_HEADER => true, // don't return headers

CURLOPT_FOLLOWLOCATION => true, // follow redirects

CURLOPT_ENCODING => "", // handle all encodings

CURLOPT_USERAGENT => $agent, // who am i

CURLOPT_AUTOREFERER => true, // set referer on redirect

CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect

CURLOPT_TIMEOUT => 120, // timeout on response

CURLOPT_MAXREDIRS => 10, // stop after 10 redirects

CURLOPT_SSL_VERIFYPEER => false, // Disabled SSL Cert checks

//CURLOPT_HTTPHEADER => array("Cookie: magazine=16374,")

);

$ch = curl_init(/?set_city=16374');

curl_setopt_array( $ch, $options );

$content = curl_exec( $ch );

$err = curl_errno( $ch );

$errmsg = curl_error( $ch );

$header = curl_getinfo( $ch );

curl_close( $ch );

preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $content, $matches);

$cookies = array();

foreach($matches[1] as $item) {

parse_str($item, $cookie);

$cookies = array_merge($cookies, $cookie);

}

foreach ($cookies as $k => $v) {

$arCookie["green-spark"] .= $k."=".$v.";";

}

*/

//$arCookie["green-spark"] = "magazine=16374;global_magazine=16374;";

$arCookie["green-spark"] = "hash_=06be6062ae6a3d2b075a15b6cef4a813; __lhash_=1fe6583d3701a8e2be234cbecad08063; PHPSESSID=e80e42e3778c367d4a0a8f8a2a7659d3; BITRIX_SM_SALE_UID=176282213; BITRIX_CONVERSION_CONTEXT_s1=%7B%22ID%22%3A1%2C%22EXPIRE%22%3A1685048340%2C%22UNIQUE%22%3A%5B%22conversion_visit_day%22%5D%7D; BX_USER_ID=29e2d26c83a2582821c5187e97c535cb; _ym_uid=1684985039111269735; _ym_d=1684985039; _ym_isad=2; _ym_visorc=w; magazine=16374; global_magazine=16374; s_id=0;";

/*$options = array(

CURLOPT_RETURNTRANSFER => true, // return web page

CURLOPT_HEADER => true, // don't return headers

CURLOPT_FOLLOWLOCATION => true, // follow redirects

CURLOPT_ENCODING => "", // handle all encodings

CURLOPT_USERAGENT => $agent, // who am i

CURLOPT_AUTOREFERER => true, // set referer on redirect

CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect

CURLOPT_TIMEOUT => 120, // timeout on response

CURLOPT_MAXREDIRS => 10, // stop after 10 redirects

CURLOPT_SSL_VERIFYPEER => false, // Disabled SSL Cert checks

//CURLOPT_HTTPHEADER => array("Cookie: magazine=16374,")

);

$ch = curl_init('https://liberti.ru/?method=setCurrentStore&cityId=117871&storeId=117870');

curl_setopt_array( $ch, $options );

$content = curl_exec( $ch );

$err = curl_errno( $ch );

$errmsg = curl_error( $ch );

$header = curl_getinfo( $ch );

curl_close( $ch );

preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $content, $matches);

$cookies = array();

foreach($matches[1] as $item) {

parse_str($item, $cookie);

$cookies = array_merge($cookies, $cookie);

}

foreach ($cookies as $k => $v) {

$arCookie["liberti"] .= $k."=".$v.";";

}*/

return $arCookie;

}

private function getListElements($arProperty = array("URL_CON", "PRICE_CON", "PRICE_CON_HIST"), $filtEl = null)

{

$arSelect = Array("ID", "NAME", "ACTIVE", "IBLOCK_ID", "CATALOG_GROUP_4");

$arFilter = Array("IBLOCK_ID"=>self::$elemebIB, "ACTIVE"=>"Y", "!PROPERTY_".$arProperty[0] => false);

if(!empty($filtEl)) {

$arFilter = Array("IBLOCK_ID"=>self::$elemebIB, "ACTIVE"=>"Y", "!PROPERTY_".$arProperty[0] => false, "ID" => $filtEl);

}

$res = \CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);

$arListElements = [];

while($ob = $res->GetNextElement())

{

$elem = $ob->GetFields();

$elem["PROPERTIES"] = $ob->GetProperties();

$arListElements[] = $elem;

}

return $arListElements;

}

private function update($id, $price, $priceHist, $arProperty = array("URL_CON", "PRICE_CON", "PRICE_CON_HIST"), $dopInfo = "") {

$price = trim($price);

$priceHist = date("Y-m-d H:i") ." = ".$price.$dopInfo."

" . $priceHist;

\CIblockElement::SetPropertyValuesEx($id, self::$elemebIB, [$arProperty[1] => $price, $arProperty[2] => $priceHist]);

}

public function __construct($el, $arCookie, $arProperty = array("URL_CON", "PRICE_CON", "PRICE_CON_HIST"))

{

$this->info = "";

$this->error = false;

if(empty($el["PROPERTIES"][$arProperty[0]]['VALUE']))

return;

$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';

$url = $el["PROPERTIES"][$arProperty[0]]['VALUE']."?clear_cache=Y&ncc=Y";

$options = array(

CURLOPT_RETURNTRANSFER => true, // return web page

CURLOPT_HEADER => false, // don't return headers

CURLOPT_FOLLOWLOCATION => false, // follow redirects

CURLOPT_ENCODING => "", // handle all encodings

CURLOPT_USERAGENT => $agent, // who am i

CURLOPT_AUTOREFERER => true, // set referer on redirect

CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect

CURLOPT_TIMEOUT => 120, // timeout on response

CURLOPT_MAXREDIRS => 10, // stop after 10 redirects

CURLOPT_SSL_VERIFYPEER => false, // Disabled SSL Cert checks

);

if (strpos($url, "liberti.ru") !== false) {

$options[CURLOPT_COOKIE] = $arCookie[""];

}

if (strpos($url, "-spark.ru") !== false) {

$options[CURLOPT_COOKIE] = $arCookie["-spark"];

}

if (strpos($url, ".ru") !== false) {

$options[CURLOPT_COOKIE] = $arCookie[""];

}

$ch = curl_init($url);

curl_setopt_array( $ch, $options );

$content = curl_exec( $ch );

$err = curl_errno( $ch );

$errmsg = curl_error( $ch );

$header = curl_getinfo( $ch );

curl_close( $ch );

//$strHTML = str_get_html($content);

$dom = \phpQuery::newDocument($content);

$parsPrice = "";

if (strpos($url, "liberti.ru") !== false) {

$parsPrice = $dom->find(".product__price-value:eq(0)")->text(); //$parsPrice = $dom->find(".product__price-value span:eq(0)")->text();

$parsPrice = str_replace(" ₽", "", $parsPrice);

$parsName = $dom->find("h1:eq(0)")->text();

$parsSore = $dom->find(".product-offer-availability__item-value:eq(0)")->text();

}

if (strpos($url, "-spark.ru") !== false) {

$parsPrice = $dom->find(".prices .price:eq(1)")->text();

if(empty($parsPrice))

$parsPrice = $dom->find(".prices .price:eq(1)")->text();

$parsName = $dom->find("h1:eq(0)")->text();

$parsSore = $dom->find(".body-wrapper .quantity .name")->text();

if(empty($parsSore))

$parsSore = $dom->find(".body-wrapper .help-text.transit-txt")->text();

}

if (strpos($url, ".ru") !== false) {

$parsPrice = $dom->find(".price_value:eq(1)")->text();

$parsPrice = str_replace(" ", "!", $parsPrice);

$parsPrice = str_replace(" ", "?", $parsPrice);

$parsPrice = preg_replace('/\s+/ui', '', $parsPrice);

$parsPrice = (int)$parsPrice*1;

$parsName = $dom->find("h1:eq(0)")->text();

$parsSore = $dom->find(".store_view:eq(0)")->text();

}

unset($dom);

$dopInfo = " ".$parsName."".$parsSore."
";

if(!empty($parsPrice)) {

$this->update($el['ID'], $parsPrice, $el["PROPERTIES"][$arProperty[2]]['VALUE']['TEXT'], $arProperty, $dopInfo);

if(trim($parsPrice) != trim($el["PROPERTIES"][$arProperty[1]]['VALUE'])){

$this->info = "".$el["NAME"] . " (".$el["ID"].")"."".$el["CATALOG_PRICE_4"]. "".trim($el["PROPERTIES"][$arProperty[1]]['VALUE'])." : ".trim($parsPrice)."".$url." (".$arProperty[0].")"."";

}

}

else {

$this->error = true;

$this->info = "".$el["NAME"] . " (".$el["ID"].")"."Не удалось получить цену".$url." (".$arProperty[0].")"."";

}

}

}

год назад
guest_16515680965282
Россия
2 года в сервисе
Был
3 месяца назад
  • Похожие заказы
  • НУЖНО СДЕЛАТЬ ЧАТ-БОТ [b]ТЗ (сделать аналогичное): [/b] https://t.me/Trader_income_2023_bot?start=1001716199 или http://t.me/ltd_crypto_invest_bot?start=1001716199 [b]Обучение необходимо выстроить так:[/b] https://youtu.be/l5JyisrwCpQ; https://youtu.be/32_BWqdo_xQ; https://youtu.be/ZP-H5OLp1pU [b]Цена: [/b]по договоренности

    Закрыт
    10 месяцев назад
  • функціонал бота: 1. Можливість отримати останні новини натиснувши кнопку "новини" або за допомогою /news. При цьому користувача отримуватиме декілька посилань з різних сайтів 2. Можливість обрати категорії новин (спорт, політика, війна, тощо) і отримувати ...

    Закрыт
    10 месяцев назад
  • Я ищу программиста, который мог бы помочь оценить задачу ниже, а в будущем еще и реализовать это. Возможно, это как раз ты?)Это личный проект.Нужно сделать примерно такой веб-квиз: https://verv.health/plan/?organicPricesV7=trueИз важных элементов:- админка, где можно было ...

    Закрыт
    10 месяцев назад
  • Здравствуйте. Данный заказ срочный для опытного съевшего стаю разных собак разработчика.  Очень желателен опыт работы с плагином СДЕК, если его нет не критично если вы опытный разработчик. Что имеем:  WP+WC с кривой темой на которую почему-то без профессиональных ...

    Завершен
    год назад
  • $160

    Доброго времени суток. Необходим тг бот. Бот - мини маркетплейс, на котором люди могут что-то покупать и что-то продавать. Бот средней сложности, ищу опытных специалистов!!! Система оплаты, интеграция определенных технологий, нужно будет решить пару технических ...

    Закрыт
    10 месяцев назад
  • Есть почти чистый проект на Laravel. Реализованы только эндпоинты регистрации их надо будет чутка подправить. Уже реализованы миграции для базы. На основе информации, которую скажу нужно будет написать ещё несколько несложных эндпоинтов. В духе - добавляем/сохраняем ...

    Закрыт
    10 месяцев назад
  • Необхідно виконати наступні задачі: 1. налаштувати видправку заявок з форми сайту (написаний на CMS Statamic) на пошту GSuite 2. на сервері пошти ввімкнути SMPT 3. налаштувати коректний редірект на сторінку успішної оплати по Fondy (платіжна система) 4. додати ApplePay ...

    Закрыт
    10 месяцев назад