Парсер сайтов с XML и добавления в DB. Wordpress

106
18 ноября 2019, 23:20

Разработал парсер, который парсит обменники от 50 до 150 сайтов. На каждом сайта XML с данными ( валюты, курсы, прибыль, резерв, и т.д. ).

Проблема в том, что при запуске, из-за него подгружаются долго и другие страницы. Вот часть кода, где парсю, делай перебор и добавляю в базу данных.

$wp_emetal = "";
$wp_emetal_calc = "";
foreach($changers as $changer){
    $file = file_get_contents($changer["changer_url"]);
    if($file != ""){
        $xml_c = new SimpleXMLElement($file);
        foreach($xml_c as $item){
            if(isset($valuts["$item->from"]) && isset($valuts["$item->to"])){
                $koef = 0;
                if($valuts["$item->from"]['koef_type'] == 0){
                    $koef = round(floatval($item->in)/floatval($item->out),8);
                }
                else $koef = round(floatval($item->out)/floatval($item->in),8);
                $wp_emetal .= "('".$valuts["$item->from"]['id']."','".$valuts["$item->to"]['id']."','".$koef."','".floatval($item->in)."','".floatval($item->out)."','". floatval($item->amount)."','".$changer["changer_id"]."'),";
                $wp_emetal_calc .= "('".$valuts["$item->from"]['id']."','".$valuts["$item->to"]['id']."','".$koef."','".floatval($item->in)."','".floatval($item->out)."','". floatval($item->amount)."','".$changer["changer_id"]."','".floatval($item->out)."','".floatval($item->in)."'),";
            }
        }
    }
}
$wp_emetal = substr($wp_emetal, 0, -1);
$wp_emetal_calc = substr($wp_emetal_calc, 0, -1);
$wpdb->query("INSERT INTO `wp_emetal` (`emetalx`, `emetaly`, `koef`, `start`, `startx`, `rezerv`, `changer`) VALUES ".$wp_emetal."");
$wpdb->query("INSERT INTO `wp_emetal_calc` (`emetalx`, `emetaly`, `koef`, `start`, `startx`, `rezerv`, `changer`, `get`, `give`) VALUES ".$wp_emetal_calc."");

Может кто то подскажет, как сделать грамотнее может быть, что бы не подвисало? Пока есть только ещё одна идея, это парсить на поддомене, и перекидывать жсоном на свой сайт, где уже принимать.

P.S Сайт стоит на выделенном сервере, так что писать "сменить хостинг и т.п.", не нужно

Буду благодарен за хорошие идеи.

Answer 1

Эм... Парсеры делают отдельными скриптами и вешают на cron. Только вам придется подключать базу/ядро отдельно в таком парсере.

READ ALSO
!PHP помощь с методом SOLID

!PHP помощь с методом SOLID

Какие методы SOLID были нарушены в этом коде или что можно изменить (упростить)Хотелось бы услышать ваши замечания и предложения (если у вас...

133
Установка библиотеки gd в контейнере

Установка библиотеки gd в контейнере

Имеется docker контейнер php:71-fpm на котором крутится lumen

142
Обновить версию PHP проекта

Обновить версию PHP проекта

Сайт написан на php 56 (Kohana), как обновить код самого сайта до php 7

98