timo-71

Рейтинг
63
Регистрация
19.09.2018
Xubart #:
Всем спасибо. Задача решена.

Хоть и задача решена. Но, не тут

lxml.etree.XMLSyntaxError: xmlns: 'Опт1' is not a valid URI, line 8, column 49

проблема?

LEOnidUKG #:
ну тогда регуляркой

Ну так себе решение

Маленький тест

<?php

set_error_handler(function($code, $string, $file, $line){
throw new ErrorException($string, null, $code, $file, $line);
});

register_shutdown_function(function(){
$error = error_get_last();
if(null !== $error)
{
echo 'Last error: ';
print_r($error);
}
});

class tm {

private $tm = 0, $start = 0;

public function __construct( )
{
$this->start = microtime(1);
$this->tm = $this->start;
}

public function _($msg){
echo "\n----\nTrace: ", $msg, ":\n";
$t = microtime(1);

echo
" Mem,mb (usage/peak_usage): ",
sprintf('%01.2f / %01.2f', (memory_get_usage()/1048576), (memory_get_peak_usage()/1048576)),

"\n Time,ms (before start/before previous): ",
sprintf('%01.8f / %01.8f', ($t - $this->start)*1000, ($t - $this->tm)*1000 ), "\n--\n";

$this->tm = $t;
}
}

header('Content-Type:text/plain');
$tm = new tm();
$tm->_('start by phpversion ' . phpversion());

$p = '/home/www_data/old_centos_www/www/1c/public/xl.xml';

echo 'filesize, mb:', filesize($p)/1048576;


echo "\nXMLReader_\n=======\n";

$reader = new XMLReader;
$reader->open($p);
$i = 0; $j=0;
while($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
if($reader->name == 'Товар') $i++;
if($reader->name == 'Группа') $j++;
}
}

$reader->close();

$tm->_( sprintf('afterXMLReader Groups/Items: %s / %s', $j, $i) );

echo "\nfile_get_contents\n=======\n";

$x = file_get_contents($p);


echo 'loadedxmlfile: ', $p, 'by size: ', strlen($x)/1048576, "MB\n";
$tm->_('afterloadxml');

try {
echo "\nSimpleXMLElement\n=======\n";

$d = new SimpleXMLElement($x);
$tm->_( sprintf( 'afterparsexml %s / %s',
count($d->{"Классификатор"}->{"Группы"}->{"Группа"}),
count($d->{"Каталог"}->{"Товары"}->{"Товар"})
));

echo "\npreg_match_all Товар\n=======\n";


preg_match_all('@(<Товар>.+</Товар>)@iusU', $x, $ids);
echo "\n!!!!!!MATCHED: ", count($ids[1]);

$tm->_( sprintf('afterpregmatch: %s matched', count($ids[1])) );

} catch (Exception $e) {
echo 'Exception: ', $e->getMessage(), "\n";
}

exit();

результат на файле 41м (10000 товаров в 92 категориях)


на этом этапе preg_match_all аут.

Тяжелый случай - 100000 товаров в 92 категориях:


414 метров в память прочитать не удалось, а XMLReader за 3 секунды все обошел.

Легкий случай


Все справились, но до preg_match_all 8 метров памяти скрипт использовал, а после 40. По времени разница 15мс, SimpleXMLElement дал лучший результат, но,  не существенно.

SeVlad #:
Не будет рынка если не будет продавцов, покупателей и товара

Чей то меня  понесло не в ту степь😣🍺

но рынок балансируется

timo-71 #:
Это сколько ж сайтов там сделали

!!!! Это не реклама викса, просто тренды и пример навскидку. Тут лучше загуглить

Уверен, круче викса что то найдется

SeVlad #:
Рынок джанго-девелоперов и рынок разработки сайтов как небо и земля.

Это да. Но, и утверждение: "Рынок  Супер-любая-КМС-девелоперов и рынок разработки сайтов как небо и земля", тоже справедливо.

Рынок не измеряется количеством  девелоперов, КМС или количеством сайтов. Тока бапки

SeVlad #:
Или скорее сотрётся граница между ними.

Там конкурентное преимущество - все в одном окне, тем более что:

SeVlad #:
Даже сейчас полно вакансий "создать сайт на виксе"

намекает, что не сотрется.

----

И да, поживем - увидим.

SeVlad #:
И каков % сайтов на джанге? ;)

Без разницы. Сегодня 0, завтра 2%, послезавтра - х%. А если async/await будет, что, слышал обещают - их акции сильно вырастут.

Но, то так. Конкуренция.

Вон, Aisamiery, где то тут асинхронный  php предложил,  так пушка я вам скажу. Правда до асинхронности там я не дошел😀

Предполагаю, конструкторы с вменяемыми возможностями (с), вытеснят со временем ~98% всех кмс. ::попкорн:: Но, рынок в деньгах будет только расти.

webinfo #:
Рынок может быть не умер, но сдулся точно.


Это сколько ж сайтов там сделали, чтобы так. Где то, кто то говорил, про всплеск нокоде.  Но, и со стороны традиционного рынка заметили:

sportik #:
Потом появились конструкторы с вменяемыми возможностями, которые этот рынок окончательно добили.

Параллельно, говорят от стоимости разработчиков. Слай вон штуку баксов готов выпускнику платить.  Арбнет конструктор на xml пилит который год

Чую неспроста. Врут, что тут денег нет😀

webinfo #:
А и при чём тут рынок разработки сайтов?
Видимо, к тому, что слухи о смерти рынка разработки сайтов сильно преувеличены 😀 
Marbeya #:
1. максимально удобный фильтр подбора товаров для покупателей;
2. многоскладовость (поставщик + собственный);

Исключают простое и быстрое решение. Для любой кмс, нужен напильник => исчезают причины её использовать.

У шин свои параметры, у тапочек другие, а виски с самосвалом тоже не похожи.

варианты прайсов поставщиков

Или другой поставщик:

<tire 
   id="**1**6**0053"
   season="S"
   brand="Michelin"
   model="Latitude Tour HP ZP"
   width="255"
   profile="55"
   diam="R18"
   price="11971"
   retail_price="13410"
   sticker_price="13410"
   stock="7" local_stock="20"
   delivery1="0" delivery2="0" delivery3="20"
   load="109" speed="H" sale="0"
   runflat="Y" sku="987510"
   photo="https://www.sh**ser**ce.ru/c****g/m****/l****.jpg">

</tire>

А поставщики, и их форматы отгрузки данных - тут 2 напильника как минимум😀

nocode круто, но нет

Зы -----

Возможно, для каких то типов товаров уже все есть. Но, тогда и вопрос надо ставить по другому.

timo-71 #:
curl_setopt($ch, CURLOPT_URL, 'https://app.neilpatel.com/api/domain_top_countries?' . $p);

Это если гет, а пост

curl_setopt($ch, CURLOPT_POSTFIELDS, $p);

Если склероз не изменяет, то для мультипарт не надо хттп_бьюилд_квери.

Dram #:
Так тоже не прокатило
$p = http_build_query($p);
curl_setopt($ch, CURLOPT_URL, 'https://app.neilpatel.com/api/domain_top_countries?' . $p);

Ну и $info = curl_getinfo($ch); Method Not Allowed

[http_code] => 405
То, статус ответа важен. Сейчас так😀
[url] => https://app.neilpatel.com/api/domain_top_countries
[content_type] => application/json
[http_code] => 502
[header_size] => 566
....
string
(208) "{"message":"'app#unlogged__ca314491fc3076cde84249aadee7390867315a5a' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer app#unlogged__ca314491fc3076cde84249aadee7390867315a5a'."}"

Всего: 541