Поддержка Проблемы и решения Сохранение данных в базу после парсинга внешнего xml

  • У меня на сайте настроен парсинг внешнего файла xml при обновлении страницы. Вроде все хорошо, данные постоянно обновляются, но это снижает время загрузки страницы примерно на 1-2 сек.
    Хочу настроить парсинг по расписанию через определенные интервалы времени. Для начала подскажите, как мне сохранить к себе на сайт результаты парсинга после выполнения команды new SimpleXMLElement();. Или подскажите, где можно почитать об этом. Ничего похожего не нашел.

    • Тема изменена 5 лет, 2 месяца назад пользователем dmitriy88.
Просмотр 5 ответов — с 1 по 5 (всего 5)
  • А как будет действовать данная функция?
    Пользователь обновляет или заходит на страницу, выполняется проверка if ( $cached !== false ). Если кеш есть, то результат выдается из кеша, если нет, то снова делается парсинг. Так?

    Или транзитный кеш или клади xml файл на свой сервер (если уверен в надежности донора с которого его тянешь). Т.е. обращайся к файлу на своем сервере -если нет — то запрос на внешний ресурс
    Если время его создания превышает заданное (например час) — то вновь качай с внешнего сайта. Чистый пых

    Пробую вот так

    $xml = get_transient( 'xml' );
    if ( false === $xml ) {
    $xml = new SimpleXMLElement($output);
    set_transient( 'xml', $xml );
    }
    $event = $xml->xpath("//event[@name='true']")[0];
    $markets = $event->xpath("markets")[0];
    $total = $markets->xpath("market[@main='true']")[0][@value];

    Получаю ошибку

    Fatal error: Uncaught exception ‘Exception’ with message ‘Serialization of ‘SimpleXMLElement’ is not allowed’ in /home/mysite/public_html/wp-includes/functions.php:435 Stack trace: #0 /home/mysite/public_html/wp-includes/functions.php(435): serialize(Object(SimpleXMLElement)) #1 /home/mysite/public_html/wp-includes/option.php(436): maybe_serialize(Object(SimpleXMLElement)) #2 /home/mysite/public_html/wp-includes/option.php(739): add_option(‘_transient_xml’, Object(SimpleXMLElement), », ‘yes’) #3 /home/mysite/public_html/wp-content/themes/mytheme/content-aside.php(58): set_transient(‘xml’, Object(SimpleXMLElement)) #4 /home/mysite/public_html/wp-includes/template.php(690): require(‘/home/mysite/…’) #5 /home/mysite/public_html/wp-includes/template.php(647): load_template(‘/home/mysite/…’, false) #6 /home/mysite/public_html/wp-includes/general-template.php(167): locate_template(Array, true, false) #7 /home/mysite/public_html/wp-content/themes/mytheme/single.php(32): get_template_part(‘con in /home/mysite/public_html/wp-includes/functions.php on line 435

    В чем ошибка?

    или клади xml файл на свой сервер

    Такое не получится. Есть доступ по ссылке к данным в формате xml, к тому же еще только с определенного IP. Доступа к статическому файлу нет.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Сохранение данных в базу после парсинга внешнего xml» закрыта для новых ответов.