Я пытаюсь написать скрипт, который будет читать удаленный файл sitemap.xml и анализировать URL-адреса внутри него, а затем загружать каждый из них по очереди, чтобы предварительно кэшировать их для более быстрого просмотра.
Причина этого: Система, которую мы разрабатываем, записывает DITA XML в браузер на лету, и при первой загрузке страницы время ожидания может составлять 8-10 секунд.Последующие нагрузки после этого могут составлять всего 1 секунду.Очевидно, что для лучшего UX предварительно кэшированные страницы являются бонусом.
Каждый раз, когда мы готовим новую публикацию на этом сервере или проводим любое тестирование / исправление, мы должны очистить кэш, поэтому идея состоит в том, чтобы написатьСкрипт, который будет анализировать карту сайта и загружать каждый URL.
После небольшого чтения я решил, что лучший способ - использовать PHP и Curl.Является ли это хорошей идеей или нет, я не знаю.Я более знаком с Perl, но в настоящее время в системе не установлены ни PHP, ни Perl, поэтому я подумал, что было бы неплохо погрузить мои пальцы в пул PHP.
Код, который я собрал в интернете"до сих пор читает sitemap.xml и записывает его в XML-файл на нашем сервере, а также отображает его в браузере.Насколько я могу судить, это просто выгрузка всего файла за один раз?
<?php
$ver = "Sitemap Parser version 0.2";
echo "<p><strong>". $ver . "</strong></p>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://ourdomain.com/sitemap.xml;jsessionid=1j1agloz5ke7l?id=1j1agloz5ke7l');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec ($ch);
curl_close ($ch);
if (@simplexml_load_string($xml)) {
$fp = fopen('feed.xml', 'w');
fwrite($fp, $xml);
echo $xml;
fclose($fp);
}
?>
Вместо того, чтобы выгрузить весь документ в файл или на экран, было бы лучше пересмотреть структуру xml и простовозьмите нужный мне URL.
XML находится в следующем формате:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9	http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4</loc>
<lastmod>2011-03-31T11:25:01.984+01:00</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_9</loc>
<lastmod>2011-03-31T11:25:04.734+01:00</lastmod>
<changefreq>monthly</changefreq>
<priority>1.0</priority>
</url>
Я пробовал использовать SimpleXML:
curl_setopt($ch, CURLOPT_URL, 'http://onlineservices.letterpart.com/sitemap.xml;jsessionid=1j1agloz5ke7l?id=1j1agloz5ke7l');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);
$xml = new SimpleXMLElement($data);
$url = $xml->url->loc;
echo $url;
, и это напечатало первый URL дляэкран, который был отличной новостью!
http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4
Мой следующий шаг - попытаться прочитать все локусы в документе, поэтому я попытался:
foreach ($xml->url) {
$url = $xml->url->loc;
echo $url;
}
надеясь, что это захватит каждый loc в URL, но это ничего не даст, и вот я застрял.
Пожалуйста, кто-нибудь может подсказать мне, как захватить ребенка от нескольких родителей, а затем лучший способ загрузить эту страницу и кэшировать ее, котораяя предполагаю, это простой GET?
Я надеюсь, что предоставил достаточно информации.Если я что-то упустил (кроме возможности написать PHP. Пожалуйста, скажите; -)
Спасибо.