Т.к. пишу скрипт первый раз, то само собой все неоптимизировано.
Подскажите основные проблемы, что лучше делать по другому. Не прошу досканально разбирать скрипт, просто может поверхностно что-то можно сказать...
<?php
require ('phpQuery/phpQuery.php');
//-- устанавливаем соединение с базой и выставляем кодировку
$db = mysql_connect ("localhost","user","qwerty");
mysql_select_db ("db_shop",$db) or die("Could not select database");
$url = "http://www.style-ok.ru/"; //ссылка на главную страницу сайта
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 0);
$result = curl_exec($ch);
$document = phpQuery::newDocument($result);
$hentr = $document->find('ul#menu');
//-- вычисляем максимальное количество категорий в таблице
$select1 = mysql_query ("SELECT MAX(category_id) AS category_id FROM oc_test_category");
$row1 = mysql_fetch_array($select1);
$id_category = $row1[0]+1; // id для категорий
$date_time = date('Y-m-d h:i:s');
//-- вычисляем максимальный номер товара в таблице
$select3 = mysql_query ("SELECT MAX(product_id) AS product_id FROM oc_test_product");
$row3 = mysql_fetch_array($select3);
$id_product = $row3[0]+1; // id для товара
$o = 1; // счетчик для артикула
$x = 'li#m_';
echo '<ul>';
for ($i=8; $i<=8; $i++)
{
$m = $x.$i;
$hentry = pq($hentr)->find($m);
$category_1 = pq($hentry)->find('a.drop');
$category_1_text = pq($category_1)->text(); //-- название корневой категории
$category_1_link = pq($category_1)->attr('href'); //-- ссылка на корневую категорию
$id_category2 = $id_category+1;
echo '<li>';
echo $category_1_text;
echo " (id = $id_category)";
echo '<br>';
echo '<ul>';
$category_2_li = pq($hentry)->find('li');
$category_2 = pq($category_2_li)->find('a');
foreach ($category_2 as $category_2) {
$category_2_text = pq($category_2)->text(); //-- название подкатегории
$category_2_link = pq($category_2)->attr('href'); //-- ссылка на подкатегорию
//добавление категории второго уровня
echo '<li>';
echo $category_2_text;
echo " (id = $id_category2)";
echo '</li>';
$id_category2++;
$url2 = $url.$category_2_link; // ссылка на страницу подкатегории
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL,$url2);
curl_setopt($ch2, CURLOPT_FAILONERROR, 1);
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch2, CURLOPT_TIMEOUT, 3);
curl_setopt($ch2, CURLOPT_POST, 0);
$result2 = curl_exec($ch2);
$manufacturers_block = phpQuery::newDocument($result2)->find('div.block-manufacturers'); // Блок с производителями на странице категории
$manufacturer = pq($manufacturers_block)->find('a.title');
foreach ($manufacturer as $manufacturer) {
$manufacturer_text = pq($manufacturer)->text(); //-- название производителя
$manufacturer_href = pq($manufacturer)->attr('href');
$manufacturer_link = $url.$manufacturer_href;
echo '<span style="font-weight: bold; margin-left: 30px;">';
echo $manufacturer_text;
echo '</span>';
echo " (ссылка - $manufacturer_link)";
echo '<br>';
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_URL,$manufacturer_link);
curl_setopt($ch3, CURLOPT_FAILONERROR, 1);
curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch3, CURLOPT_TIMEOUT, 3);
curl_setopt($ch3, CURLOPT_POST, 0);
$result3 = curl_exec($ch3);
$document3 = phpQuery::newDocument($result3);
$main_block = $document3->find('div.MiddleCenter');
$pages_block = pq($main_block)->find('div.padding6px'); // блок с количеством страниц товаров
$pages = pq($pages_block)->text();
$pieces = explode(" ", $pages);
// Если есть блок с количеством страниц в категории, то перелистываем все категории, иначе страница с товаром одна
if (isset($pieces[3])) {
$pages_block_a = pq($pages_block)->find('a');
$pages_href = pq($pages_block_a)->attr('href');
$pattern = '/(.*)\?\manf=\d+&pn_pr=/';
preg_match($pattern, $pages_href, $matches);
echo '<span style="margin-left: 60px;">';
echo "У данного производителя $pieces[3] стр. с товаром";
echo '</span>';
echo '<br>';
for ($i=1; $i<=$pieces[3]; $i++) {
$link_cat = $url.$matches[0].$i;
echo '<span style="margin-left: 90px;">';
echo $link_cat;
echo '</span>';
echo '<br>';
$ch4 = curl_init();
curl_setopt($ch4, CURLOPT_URL,$link_cat);
curl_setopt($ch4, CURLOPT_FAILONERROR, 1);
curl_setopt($ch4, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch4, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch4, CURLOPT_TIMEOUT, 3);
curl_setopt($ch4, CURLOPT_POST, 0);
$result4 = curl_exec($ch4);
$document4 = phpQuery::newDocument($result4);
$main_block2 = $document4->find('div.MiddleCenter');
$item_block = $main_block2->find('td.padding10px ');
$item_title_block = $item_block->find('a.bigtitle');
// ищем блоки с товаром, переходим на страницу товара для дальнейшего парсинга
foreach ($item_title_block as $item_title_block) {
$general_url = "http://www.style-ok.ru";
$item_title = pq($item_title_block)->text();
$item_a = pq($item_title_block)->attr('href');
$item_link = $url.$item_a;
echo '<span style="margin-left: 150px;">';
echo "$item_title (ссылка - $item_link)";
echo '</span>';
echo '<br>';
$ch5 = curl_init();
curl_setopt($ch5, CURLOPT_URL,$item_link);
curl_setopt($ch5, CURLOPT_FAILONERROR, 1);
curl_setopt($ch5, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch5, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch5, CURLOPT_TIMEOUT, 3);
curl_setopt($ch5, CURLOPT_POST, 0);
$result5 = curl_exec($ch5);
$document5 = phpQuery::newDocument($result5);
// поиск названия товара
$title_block = $document5->find('h1');
$title = pq($title_block)->text();
// поиск цены товара
$price_block = $document5->find('div.priceBlock');
$price_span = $price_block->find('span.price');
$price_all = pq($price_span)->text();
$price = explode(" ", $price_all);
$my_price = round($price[0]*1.4); // цена товара с наценкой
// поиск описания товара
$description_block = $document5->find('div#desc_data');
$description_block2 = $description_block->find('div.padding10px');
$description_block3 = $description_block2->find('div');
$description = pq($description_block3)->html();
$desc = explode("<b>", $description);
$string = iconv("windows-1251","utf-8",$desc[0]);
$desc2 = htmlspecialchars("$string", ENT_QUOTES);
// поиск изображение товара
$img_block = $document5->find('a#blackImg');
$img_a = pq($img_block)->attr('href');
$img_link = $general_url.$img_a; // полная ссылка на изображение товара
if ($price[0]==0) { // проверка наличия цены на товар
echo "Нет такого товара в магазине!";
}
else {
// артикул товара типа JAG00001
$model_word = strtoupper(substr("$manufacturer_text", 0, 3));
$model_digit = vsprintf("%05s", $o);
$model = $model_word.$model_digit;
// изображение товара
$images_product_link = "$img_link";
$images_product_name1 = explode("/", $img_link);
$images_product_name = end($images_product_name1);
echo "Название - $title (id - $id_product)";
echo "<br>";
echo "Артикул - $model";
echo "<br>";
echo "Цена - $my_price руб. ($price руб.)";
echo "<br>";
echo "<br>";
echo "$desc2";
echo "<br>";
echo "<br>";
echo "<br>";
}
$id_product++;
curl_close($ch5);
$o++;
}
curl_close($ch4);
}
}
else {
$main_block2 = $document3->find('div.MiddleCenter');
$item_block = $main_block2->find('td.padding10px ');
$item_title_block = $item_block->find('a.bigtitle');
// ищем блоки с товаром, переходим на страницу товара для дальнейшего парсинга
foreach ($item_title_block as $item_title_block) {
$general_url = "http://www.style-ok.ru";
$item_title = pq($item_title_block)->text();
$item_a = pq($item_title_block)->attr('href');
$item_link = $url.$item_a;
echo '<span style="margin-left: 150px;">';
echo "$item_title (ссылка - $item_link)";
echo '</span>';
echo '<br>';
$ch5 = curl_init();
curl_setopt($ch5, CURLOPT_URL,$item_link);
curl_setopt($ch5, CURLOPT_FAILONERROR, 1);
curl_setopt($ch5, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch5, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch5, CURLOPT_TIMEOUT, 3);
curl_setopt($ch5, CURLOPT_POST, 0);
$result5 = curl_exec($ch5);
$document5 = phpQuery::newDocument($result5);
// поиск названия товара
$title_block = $document5->find('h1');
$title = pq($title_block)->text();
// поиск цены товара
$price_block = $document5->find('div.priceBlock');
$price_span = $price_block->find('span.price');
$price_all = pq($price_span)->text();
$price = explode(" ", $price_all);
$my_price = round($price[0]*1.4); // цена товара с наценкой
// поиск описания товара
$description_block = $document5->find('div#desc_data');
$description_block2 = $description_block->find('div.padding10px');
$description_block3 = $description_block2->find('div');
$description = pq($description_block3)->html();
$desc = explode("<b>", $description);
$string = iconv("windows-1251","utf-8",$desc[0]);
$desc2 = htmlspecialchars("$string", ENT_QUOTES);
// поиск изображение товара
$img_block = $document5->find('a#blackImg');
$img_a = pq($img_block)->attr('href');
$img_link = $general_url.$img_a; // полная ссылка на изображение товара
if ($price[0]==0) { // проверка наличия цены на товар
echo "Нет такого товара в магазине!";
}
else {
// артикул товара типа JAG00001
$model_word = strtoupper(substr("$manufacturer_text", 0, 3));
$model_digit = vsprintf("%05s", $o);
$model = $model_word.$model_digit;
// изображение товара
$images_product_link = "$img_link";
$images_product_name1 = explode("/", $img_link);
$images_product_name = end($images_product_name1);
echo "Название - $title (id - $id_product)";
echo "<br>";
echo "Артикул - $model";
echo "<br>";
echo "Цена - $my_price руб. ($price руб.)";
echo "<br>";
echo "<br>";
echo "$desc2";
echo "<br>";
echo "<br>";
echo "<br>";
}
$id_product++;
curl_close($ch5);
$o++;
}
}
curl_close($ch3);
}
}
echo '</ul>';
echo '</li>';
echo '</ul>';
echo '</li>';
$id_category = $id_category2;
}
echo '</ul>';
curl_close($ch);
?>