diff --git a/mirzaev/parser_from_rossko/system/public/avito.php b/mirzaev/parser_from_rossko/system/public/avito.php index b192ab8..389eb01 100644 --- a/mirzaev/parser_from_rossko/system/public/avito.php +++ b/mirzaev/parser_from_rossko/system/public/avito.php @@ -241,9 +241,11 @@ while ($product = $products->fetchArray()) { Пункт выдачи находится в г.Красноярске по адресу Дудинская 2Б Часы работы: 10:00-19:00 Отправка запчастей и деталей по всей России. + +Не является публичной офертой TXT, - (int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.23)), - implode(' ', $images), + (int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.21)), + implode('|', $images), 'Новое', 'Оригинал', 'Красноярск, Дудинская улица, 2Б', diff --git a/mirzaev/parser_from_rossko/system/public/drom.php b/mirzaev/parser_from_rossko/system/public/drom.php index c30f9b4..bfbad39 100644 --- a/mirzaev/parser_from_rossko/system/public/drom.php +++ b/mirzaev/parser_from_rossko/system/public/drom.php @@ -32,20 +32,22 @@ $db = new db(STORAGE . DIRECTORY_SEPARATOR . 'products.db'); // Инициализация товаров $products = $db->query('SELECT * FROM product;'); -// Инициализация директории с документом Drom +// Инициализация директории со всем, что связано с Drom define('DROM', STORAGE . DIRECTORY_SEPARATOR . 'drom'); // Инициализация хранилища фотографий товаров define('IMAGES', STORAGE . DIRECTORY_SEPARATOR . 'images'); -// Инициализация таблицы -$spreadsheet = excel::create(['export']); +// Инициализация таблиц +$spreadsheet_avaiable = excel::create(['export']); +$spreadsheet_order = excel::create(['export']); -// Инициализация рабочего листа -$worksheet = $spreadsheet->sheet(); +// Инициализация рабочих листов +$worksheet_avaiable = $spreadsheet_avaiable->sheet(); +$worksheet_order = $spreadsheet_order->sheet(); // Инициализация заголовков -$worksheet->writeHeader([ +$headers = [ 'Артикул', 'Наименование товара', 'Новый или б/у', @@ -68,7 +70,9 @@ $worksheet->writeHeader([ 'Наличие', 'Сроки доставки', 'Фотография' -]); +]; +$worksheet_avaiable->writeHeader($headers); +$worksheet_order->writeHeader($headers); while ($product = $products->fetchArray()) { // Перебор товаров @@ -123,8 +127,11 @@ while ($product = $products->fetchArray()) { // Форматирование названия $product['description'] = trim(preg_replace('/\|.*/', '', $product['description']), ' '); - // Запись строки - $worksheet->writeRow([ + // Товар в наличии? (доставка 2 часа) + $avaiable = $product['delivery'] === 0 && $product['amount'] > 0; + + // Генерация строки + $row = [ $product['code'], $product['description'], 'Новый', @@ -141,14 +148,19 @@ while ($product = $products->fetchArray()) { '', '', '', - 'По запчастям уточняйте наличие по телефону или через кнопку "спросить", ТАК КАК ОН МОЖЕТ БЫТЬ ПРОДАН В ТЕЧЕНИИ ДНЯ ИЛИ НАХОДИТЬСЯ В РЕЗЕРВЕ, часть запчастей находится на складе, на перемещение может потребоваться от 2 часов', - rand(1, 6), - (int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.23)), - 'В наличии', - 1, + 'По запчастям уточняйте наличие и цену по телефону или через кнопку "спросить", ТАК КАК ОН МОЖЕТ БЫТЬ ПРОДАН В ТЕЧЕНИИ ДНЯ ИЛИ НАХОДИТЬСЯ В РЕЗЕРВЕ, часть запчастей находится на складе, на перемещение может потребоваться от 2 часов. Не является публичной офертой', + $product['amount'], + (int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.21)), + $avaiable ? 'В наличии' : 'Под заказ', + $product['delivery'] === 0 ? '2 часа' : $product['delivery'], implode(' ', $images) - ]); + ]; + + // Запись строки в документ + if ($avaiable) $worksheet_avaiable->writeRow($row); + else $worksheet_order->writeRow($row); } -// Сохранение файла -$spreadsheet->save(DROM . DIRECTORY_SEPARATOR . 'export.xlsx'); +// Сохранение файлов +$spreadsheet_avaiable->save(DROM . DIRECTORY_SEPARATOR . 'avaiable' . DIRECTORY_SEPARATOR . 'export.xlsx'); +$spreadsheet_order->save(DROM . DIRECTORY_SEPARATOR . 'order' . DIRECTORY_SEPARATOR . 'export.xlsx'); diff --git a/mirzaev/parser_from_rossko/system/public/rossko.php b/mirzaev/parser_from_rossko/system/public/rossko.php new file mode 100644 index 0000000..ecdccc8 --- /dev/null +++ b/mirzaev/parser_from_rossko/system/public/rossko.php @@ -0,0 +1,95 @@ + true]); + +function auth(int $attempts = 5) +{ + global $client; + + if (--$attempts <= 0) return false; + + $request = new request('GET', 'https://krsk.rossko.ru/'); + + return $client->sendAsync($request) + ->then(function ($response) { + $dom = new dom; + @$dom->loadHTML((string) $response->getBody()); + + $xpath = new xpath($dom); + + // Кнопка "ВХОД" ('ul[class="header-top__menu-inner"] > li:nth-child(3)') + $entries = $xpath->query('/html/body/div[1]/header/div[2]/div/div/nav/ul/li[5]/div/a/span'); + + if (!empty($entries[0])) { + // Аутентифицирован + + echo 'Аутентифицирован: ' . $entries[0]->textContent . "\n"; + + return false; + } else { + // Не аутентиффицирован + + // Кнопка "ВХОД" ('ul[class="header-top__menu-inner"] > li:nth-child(3)') + $entries = $xpath->query('/html/body/div[1]/header/div[2]/div[1]/div/nav/ul/li[3]/div/a/span'); + + return $entries[0]->textContent === 'Вход'; + } + }) + ->then(function ($guest) use ($attempts, $client) { + if ($guest) { + // Не аутентифицирован + + echo "Не аутентифицирован\n"; + + // Инициализация данных аккаунта [mail => '', password => ''] + $account = require(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'settings' . DIRECTORY_SEPARATOR . 'rossko.php'); + + // Инициализация запроса для аутентификации + $request = new request( + 'POST', + 'https://krsk.rossko.ru/utils/', + [ + 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8' + ], + 'auth%5Bemail%5D=' . urlencode($account['mail']) . '&auth%5Bpassword%5D=' . urlencode($account['password']) . '&action=auth&type=header' + ); + + $promise = $client->sendAsync($request)->then(function ($response) use ($attempts) { + auth($attempts); + }); + + $promise->wait(); + } else { + // Аутентифицирован (подразумевается) !!! могут быть ошибки + + return true; + } + }); +} + +// Аутентификация (проверяет или аутентифицирует) +auth()->wait(); + +echo (123); */ diff --git a/mirzaev/parser_from_rossko/system/settings/arangodb.php.sample b/mirzaev/parser_from_rossko/system/settings/arangodb.php.sample deleted file mode 100644 index 8b517a4..0000000 --- a/mirzaev/parser_from_rossko/system/settings/arangodb.php.sample +++ /dev/null @@ -1,8 +0,0 @@ - 'unix:///var/run/arangodb3/arango.sock', - 'database' => 'parser_from_rossko', - 'name' => 'parser_from_rossko', - 'password' => '' -]; diff --git a/mirzaev/parser_from_rossko/system/settings/rossko.php.sample b/mirzaev/parser_from_rossko/system/settings/rossko.php.sample new file mode 100644 index 0000000..55b8f15 --- /dev/null +++ b/mirzaev/parser_from_rossko/system/settings/rossko.php.sample @@ -0,0 +1,6 @@ + '@gmail.com', + 'password' => '' +]; diff --git a/mirzaev/parser_from_rossko/system/storage/.gitignore b/mirzaev/parser_from_rossko/system/storage/.gitignore index c291c09..c6d16bb 100644 --- a/mirzaev/parser_from_rossko/system/storage/.gitignore +++ b/mirzaev/parser_from_rossko/system/storage/.gitignore @@ -1 +1,2 @@ -images +!.gitignore +products.db diff --git a/mirzaev/parser_from_rossko/system/storage/avito/export.xlsx b/mirzaev/parser_from_rossko/system/storage/avito/export.xlsx index 917020b..808a158 100644 Binary files a/mirzaev/parser_from_rossko/system/storage/avito/export.xlsx and b/mirzaev/parser_from_rossko/system/storage/avito/export.xlsx differ diff --git a/mirzaev/parser_from_rossko/system/storage/drom/.gitignore b/mirzaev/parser_from_rossko/system/storage/drom/.gitignore new file mode 100644 index 0000000..77bcf31 --- /dev/null +++ b/mirzaev/parser_from_rossko/system/storage/drom/.gitignore @@ -0,0 +1,3 @@ +!.gitignore +avaiable/* +order/* diff --git a/mirzaev/parser_from_rossko/system/storage/drom/export.xlsx b/mirzaev/parser_from_rossko/system/storage/drom/export.xlsx deleted file mode 100644 index 648f3d0..0000000 Binary files a/mirzaev/parser_from_rossko/system/storage/drom/export.xlsx and /dev/null differ diff --git a/mirzaev/parser_from_rossko/system/storage/rossko/254502.xlsx b/mirzaev/parser_from_rossko/system/storage/rossko/254502.xlsx index 64b963d..d96121b 100644 Binary files a/mirzaev/parser_from_rossko/system/storage/rossko/254502.xlsx and b/mirzaev/parser_from_rossko/system/storage/rossko/254502.xlsx differ