Оптимизировать скрипт парсинга php

377
02 февраля 2019, 05:20

Сам скрипт:

<?php
include('../sms/db.php');
mysql_query("SET NAMES utf8");
date_default_timezone_set('Europe/Kiev');
if($_POST) {
    $cat = $_POST['cat'];
    $cat = stripslashes($cat);
    $cat = htmlspecialchars($cat);
    $cat = trim($cat);
    $offer = $_POST['offer'];
    $offer = stripslashes($offer);
    $offer = htmlspecialchars($offer);
    $offer = trim($offer);
    $date = date('d.m.Y, H:i');
    $urls = explode(',', $offer);
    $i=0;
    $phones = '';
    foreach($urls as $item) {
        if($i>10) break;
        $url = $item;
        $cookie_path = $_SERVER['DOCUMENT_ROOT'].'/cookie.dat';
        preg_match('|-ID(.*).html|', $url, $id);
        $olx = curl_init($url);
        curl_setopt($olx, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($olx, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($olx, CURLOPT_HEADER, 1);
        curl_setopt($olx, CURLOPT_COOKIEFILE, $cookie_path);
        curl_setopt($olx, CURLOPT_COOKIEJAR, $cookie_path);
        $result = curl_exec($olx);
        curl_close($olx);
        preg_match("|phoneToken = '(.*)';|", $result, $token);
        $olx_number = curl_init('https://www.olx.ua/ajax/misc/contact/phone/' . $id[1] . '/?pt=' . $token[1]);
        curl_setopt($olx_number, CURLOPT_HTTPHEADER, [
                'Host: www.olx.ua',
                'Accept: */*',
                'Accept-Language: uk,ru;q=0.8,en-US;q=0.5,en;q=0.3',
                'Accept-Encoding: gzip, deflate, br',
                'Connection: keep-alive',
                'X-Requested-With: XMLHttpRequest'
            ]);
            curl_setopt($olx_number, CURLOPT_REFERER, $url);
            curl_setopt($olx_number, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            curl_setopt($olx_number, CURLOPT_COOKIEFILE, $cookie_path);
            curl_setopt($olx_number, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($olx_number, CURLOPT_RETURNTRANSFER, true);
            $result = curl_exec($olx_number);
            curl_close($olx_number);
            $json = json_decode($result);

                $phones .= $json->value . ',';
}
echo $phones;
mysql_query("INSERT INTO `olx` (`cat`, `phones`, `date`) VALUES ('{$cat}', '{$phones}', '{$date}');");
} // if post
  ?>

Он получает в переменную $offer все ссылки через запятую, с которых нужно парсить. Но я вижу, что это неправильно, каждый раз в цикле заново делать curl и т.д. Помогите оптимизировать, пожалуйста.

READ ALSO
Из числа 1592 получить 31592 при помощи рекурсии [закрыт]

Из числа 1592 получить 31592 при помощи рекурсии [закрыт]

Задача: Рекурсивно описать функцию Head3(N), которая вычисляет число, получаемое приписыванием слева цифры 3 к десятичной записи целого положительного...

151
Как много времени тратит функция srand(time(NULL))?

Как много времени тратит функция srand(time(NULL))?

Сильно ли использование srand(time(NULL)) замедляет код, если эта функция выполняется в цикле наряду с остальным кодом? (примерно 10000 итераций в секунду,...

165
Необработанное исключение по адресу 0x00007FF89D0BB985 (ucrtbased.dll)

Необработанное исключение по адресу 0x00007FF89D0BB985 (ucrtbased.dll)

не могу понять , в чём ошибка , пытаюсь просто для начала вывести id из БД oracle

171