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

примерно такой код, сайт 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].")"."";

}

}

}

2 года назад
guest_16515680965282
3 года в сервисе
Был
8 месяцев назад

Заявки фрилансеров

Умид
 
33 года
3 года в сервисе
Был
2 года назад
2 года назад
Юрий
 
37 лет
2 года в сервисе
Был
2 года назад
2 года назад
Евгений
 
38 лет
17 лет в сервисе
онлайн
557 отзывов(-1)
2 года назад
ТОП-5
Веб-программирование
  • Похожие заказы

  • Требуется переписать готовый Телеграм крипто-бот с использованием API Бинанс на языке Python. Бот уже функционирует, необходимо адаптировать его под новые требования API. Подробности будут предоставлены по запросу.

    Закрыт
    2 года назад
  • Розробіть телеграм бота для отримання новин з українських та іноземних порталів. Функціонал: отримання останніх новин, вибір категорій, пошук за ключовим словом, збереження новин для читання пізніше та регулярні оновлення. Дедлайн: 3-4 червня.

    Закрыт
    2 года назад
  • Ищется программист для разработки веб-квиза с админкой, возможностью менять вопросы и кастомизируемым пейволлом. Проект включает интеграцию Stripe и предоставление контента. Основные элементы: медленный лоадер после ввода емейла, возможность редактирования заголовков и отзывов. Хранение ответов и разветвление квиза не требуется.

    Закрыт
    2 года назад
  • Необходима установка и настройка плагина CDEK на странице checkout WordPress с WooCommerce. Требуется реализация выбора городов и настройка без обязательного индекса. Опыт работы с плагином CDEK приветствуется, но не критичен. Указать способ оплаты, сроки начала и стоимость работы.

    Завершен
    2 года назад
  • Требуется создать парсер для Telegram, используя библиотеку aiogram на языке Python. Ожидается реализация функционала, позволяющего эффективно взаимодействовать с API Telegram для получения необходимых данных.

    Закрыт
    2 года назад
  • $160

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

    Закрыт
    2 года назад
  • Требуется разработать API эндпоинты для почти чистого проекта на Laravel. Необходимо подправить существующие эндпоинты регистрации и добавить несколько новых, включая функционал для работы с изображениями и удалением аккаунтов. Опыт работы с Laravel и указание часовой ставки обязательны в отклике.

    Закрыт
    2 года назад
  • Виконати налаштування відправки заявок з форми сайту на пошту GSuite, включаючи ввімкнення SMPT на сервері пошти. Необхідно налаштувати редірект на сторінку успішної оплати по Fondy та додати можливість оплати через ApplePay.

    Закрыт
    2 года назад