Требуется разработка чат-бота в Telegram с функционалом, аналогичным указанным ботам. Обучение должно быть выстроено на основе предоставленных видео. Условия по цене обсуждаются.
Доработать парсер сайтов, перестал парсить один сайт,
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.
примерно такой код, сайт 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].")"."";
}
}
}
Заявки фрилансеров
Похожие заказы
- Веб-программирование4 заявкиЗакрыт2 года назад
Требуется переписать готовый Телеграм крипто-бот с использованием API Бинанс на языке Python. Бот уже функционирует, необходимо адаптировать его под новые требования API. Подробности будут предоставлены по запросу.
Веб-программирование4 заявкиЗакрыт2 года назадРозробіть телеграм бота для отримання новин з українських та іноземних порталів. Функціонал: отримання останніх новин, вибір категорій, пошук за ключовим словом, збереження новин для читання пізніше та регулярні оновлення. Дедлайн: 3-4 червня.
Веб-программирование3 заявкиЗакрыт2 года назадИщется программист для разработки веб-квиза с админкой, возможностью менять вопросы и кастомизируемым пейволлом. Проект включает интеграцию Stripe и предоставление контента. Основные элементы: медленный лоадер после ввода емейла, возможность редактирования заголовков и отзывов. Хранение ответов и разветвление квиза не требуется.
Веб-программирование5 заявокЗакрыт2 года назадНеобходима установка и настройка плагина CDEK на странице checkout WordPress с WooCommerce. Требуется реализация выбора городов и настройка без обязательного индекса. Опыт работы с плагином CDEK приветствуется, но не критичен. Указать способ оплаты, сроки начала и стоимость работы.
Веб-программирование1 исполнительЗавершен2 года назадТребуется Full Stack Developer с навыками работы с Laravel, Vue3 и Intertia. Задача включает разработку веб-приложений. Необходим опыт в указанных технологиях.
Веб-программирование5 заявокЗакрыт2 года назадТребуется создать парсер для Telegram, используя библиотеку aiogram на языке Python. Ожидается реализация функционала, позволяющего эффективно взаимодействовать с API Telegram для получения необходимых данных.
Веб-программированиенет заявокЗакрыт2 года назад- $160
Требуется разработать Telegram-бота для мини-маркетплейса, где пользователи смогут покупать и продавать товары. Необходима интеграция системы оплаты и решение технических вопросов. Ищем опытных специалистов для реализации проекта со средней сложностью.
Веб-программирование7 заявокЗакрыт2 года назад Требуется разработать API эндпоинты для почти чистого проекта на Laravel. Необходимо подправить существующие эндпоинты регистрации и добавить несколько новых, включая функционал для работы с изображениями и удалением аккаунтов. Опыт работы с Laravel и указание часовой ставки обязательны в отклике.
Веб-программирование6 заявокЗакрыт2 года назадВиконати налаштування відправки заявок з форми сайту на пошту GSuite, включаючи ввімкнення SMPT на сервері пошти. Необхідно налаштувати редірект на сторінку успішної оплати по Fondy та додати можливість оплати через ApplePay.
Веб-программирование2 заявкиЗакрыт2 года назад