generated from mirzaev/pot
Compare commits
1 Commits
874acb8eea
...
cabdfb8cc7
Author | SHA1 | Date | |
---|---|---|---|
Arsen Mirzaev Tatyano-Muradovich | cabdfb8cc7 |
|
@ -241,11 +241,9 @@ while ($product = $products->fetchArray()) {
|
||||||
Пункт выдачи находится в г.Красноярске по адресу Дудинская 2Б
|
Пункт выдачи находится в г.Красноярске по адресу Дудинская 2Б
|
||||||
Часы работы: 10:00-19:00
|
Часы работы: 10:00-19:00
|
||||||
Отправка запчастей и деталей по всей России.
|
Отправка запчастей и деталей по всей России.
|
||||||
|
|
||||||
Не является публичной офертой
|
|
||||||
TXT,
|
TXT,
|
||||||
(int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.21)),
|
(int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.23)),
|
||||||
implode('|', $images),
|
implode(' ', $images),
|
||||||
'Новое',
|
'Новое',
|
||||||
'Оригинал',
|
'Оригинал',
|
||||||
'Красноярск, Дудинская улица, 2Б',
|
'Красноярск, Дудинская улица, 2Б',
|
||||||
|
|
|
@ -32,22 +32,20 @@ $db = new db(STORAGE . DIRECTORY_SEPARATOR . 'products.db');
|
||||||
// Инициализация товаров
|
// Инициализация товаров
|
||||||
$products = $db->query('SELECT * FROM product;');
|
$products = $db->query('SELECT * FROM product;');
|
||||||
|
|
||||||
// Инициализация директории со всем, что связано с Drom
|
// Инициализация директории с документом Drom
|
||||||
define('DROM', STORAGE . DIRECTORY_SEPARATOR . 'drom');
|
define('DROM', STORAGE . DIRECTORY_SEPARATOR . 'drom');
|
||||||
|
|
||||||
// Инициализация хранилища фотографий товаров
|
// Инициализация хранилища фотографий товаров
|
||||||
define('IMAGES', STORAGE . DIRECTORY_SEPARATOR . 'images');
|
define('IMAGES', STORAGE . DIRECTORY_SEPARATOR . 'images');
|
||||||
|
|
||||||
// Инициализация таблиц
|
// Инициализация таблицы
|
||||||
$spreadsheet_avaiable = excel::create(['export']);
|
$spreadsheet = excel::create(['export']);
|
||||||
$spreadsheet_order = excel::create(['export']);
|
|
||||||
|
|
||||||
// Инициализация рабочих листов
|
// Инициализация рабочего листа
|
||||||
$worksheet_avaiable = $spreadsheet_avaiable->sheet();
|
$worksheet = $spreadsheet->sheet();
|
||||||
$worksheet_order = $spreadsheet_order->sheet();
|
|
||||||
|
|
||||||
// Инициализация заголовков
|
// Инициализация заголовков
|
||||||
$headers = [
|
$worksheet->writeHeader([
|
||||||
'Артикул',
|
'Артикул',
|
||||||
'Наименование товара',
|
'Наименование товара',
|
||||||
'Новый или б/у',
|
'Новый или б/у',
|
||||||
|
@ -70,9 +68,7 @@ $headers = [
|
||||||
'Наличие',
|
'Наличие',
|
||||||
'Сроки доставки',
|
'Сроки доставки',
|
||||||
'Фотография'
|
'Фотография'
|
||||||
];
|
]);
|
||||||
$worksheet_avaiable->writeHeader($headers);
|
|
||||||
$worksheet_order->writeHeader($headers);
|
|
||||||
|
|
||||||
while ($product = $products->fetchArray()) {
|
while ($product = $products->fetchArray()) {
|
||||||
// Перебор товаров
|
// Перебор товаров
|
||||||
|
@ -127,11 +123,8 @@ while ($product = $products->fetchArray()) {
|
||||||
// Форматирование названия
|
// Форматирование названия
|
||||||
$product['description'] = trim(preg_replace('/\|.*/', '', $product['description']), ' ');
|
$product['description'] = trim(preg_replace('/\|.*/', '', $product['description']), ' ');
|
||||||
|
|
||||||
// Товар в наличии? (доставка 2 часа)
|
// Запись строки
|
||||||
$avaiable = $product['delivery'] === 0 && $product['amount'] > 0;
|
$worksheet->writeRow([
|
||||||
|
|
||||||
// Генерация строки
|
|
||||||
$row = [
|
|
||||||
$product['code'],
|
$product['code'],
|
||||||
$product['description'],
|
$product['description'],
|
||||||
'Новый',
|
'Новый',
|
||||||
|
@ -148,19 +141,14 @@ while ($product = $products->fetchArray()) {
|
||||||
'',
|
'',
|
||||||
'',
|
'',
|
||||||
'',
|
'',
|
||||||
'По запчастям уточняйте наличие и цену по телефону или через кнопку "спросить", ТАК КАК ОН МОЖЕТ БЫТЬ ПРОДАН В ТЕЧЕНИИ ДНЯ ИЛИ НАХОДИТЬСЯ В РЕЗЕРВЕ, часть запчастей находится на складе, на перемещение может потребоваться от 2 часов. Не является публичной офертой',
|
'По запчастям уточняйте наличие по телефону или через кнопку "спросить", ТАК КАК ОН МОЖЕТ БЫТЬ ПРОДАН В ТЕЧЕНИИ ДНЯ ИЛИ НАХОДИТЬСЯ В РЕЗЕРВЕ, часть запчастей находится на складе, на перемещение может потребоваться от 2 часов',
|
||||||
$product['amount'],
|
rand(1, 6),
|
||||||
(int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.21)),
|
(int) ($product['cost_rossko'] + ($product['cost_rossko'] * 0.23)),
|
||||||
$avaiable ? 'В наличии' : 'Под заказ',
|
'В наличии',
|
||||||
$product['delivery'] === 0 ? '2 часа' : $product['delivery'],
|
1,
|
||||||
implode(' ', $images)
|
implode(' ', $images)
|
||||||
];
|
]);
|
||||||
|
|
||||||
// Запись строки в документ
|
|
||||||
if ($avaiable) $worksheet_avaiable->writeRow($row);
|
|
||||||
else $worksheet_order->writeRow($row);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сохранение файлов
|
// Сохранение файла
|
||||||
$spreadsheet_avaiable->save(DROM . DIRECTORY_SEPARATOR . 'avaiable' . DIRECTORY_SEPARATOR . 'export.xlsx');
|
$spreadsheet->save(DROM . DIRECTORY_SEPARATOR . 'export.xlsx');
|
||||||
$spreadsheet_order->save(DROM . DIRECTORY_SEPARATOR . 'order' . DIRECTORY_SEPARATOR . 'export.xlsx');
|
|
||||||
|
|
|
@ -1,95 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace mirzaev\parser_from_rossko;
|
|
||||||
|
|
||||||
use GuzzleHttp\Client as client,
|
|
||||||
GuzzleHttp\Psr7\Request as request;
|
|
||||||
|
|
||||||
use DOMDocument as dom,
|
|
||||||
DOMXPath as xpath;
|
|
||||||
|
|
||||||
ini_set('error_reporting', E_ALL);
|
|
||||||
ini_set('display_errors', 1);
|
|
||||||
ini_set('display_startup_errors', 1);
|
|
||||||
|
|
||||||
define('VIEWS', realpath('..' . DIRECTORY_SEPARATOR . 'views'));
|
|
||||||
define('STORAGE', realpath('..' . DIRECTORY_SEPARATOR . 'storage'));
|
|
||||||
define('INDEX', __DIR__);
|
|
||||||
|
|
||||||
// Автозагрузка
|
|
||||||
require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
|
|
||||||
|
|
||||||
// Инициализация клиента Guzzle
|
|
||||||
$client = new client(['cookies' => 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); */
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'endpoint' => 'unix:///var/run/arangodb3/arango.sock',
|
||||||
|
'database' => 'parser_from_rossko',
|
||||||
|
'name' => 'parser_from_rossko',
|
||||||
|
'password' => ''
|
||||||
|
];
|
|
@ -1,6 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'mail' => '@gmail.com',
|
|
||||||
'password' => ''
|
|
||||||
];
|
|
|
@ -1,2 +1 @@
|
||||||
!.gitignore
|
images
|
||||||
products.db
|
|
||||||
|
|
Binary file not shown.
|
@ -1,3 +0,0 @@
|
||||||
!.gitignore
|
|
||||||
avaiable/*
|
|
||||||
order/*
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue