J'essaie d'écrire un script qui lira un sitemap.xml distant et analysera les url qu'il contient, puis chargera chacune d'entre elles tour à tour pour les précacher afin d'accélérer la navigation.
La raison de cette situation : Le système que nous développons écrit DITA XML dans le navigateur à la volée et la première fois qu'une page est chargée, l'attente peut être de 8 à 10 secondes. Les chargements suivants ne durent qu'une seconde. Évidemment, pour une meilleure expérience utilisateur, les pages mises en cache sont un bonus.
Chaque fois que nous préparons une nouvelle publication sur ce serveur ou que nous effectuons un test/Parcheando, nous devons vider le cache. L'idée est donc d'écrire un Parcheando qui va parcourir le sitemap et charger chaque url.
Après avoir lu un peu, j'ai décidé que la meilleure solution était d'utiliser PHP et Curl. Je ne sais pas si c'est une bonne idée ou non. Je suis plus familier avec Perl, mais ni PHP ni Perl ne sont installés sur le système actuellement, alors j'ai pensé que ce serait bien de tremper mes orteils dans la piscine de PHP.
Le code que j'ai récupéré sur "teh internets" jusqu'à présent lit le sitemap.xml et l'écrit dans un fichier xml sur notre serveur et l'affiche dans le navigateur. D'après ce que j'ai compris, il s'agit simplement d'envoyer le fichier entier en une seule fois ?
<?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);
}
?>
Plutôt que de déverser l'ensemble du document dans un fichier ou sur l'écran, il serait préférable de parcourir la structure xml et de saisir simplement l'url dont j'ai besoin.
Le xml est dans ce format :
<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>
J'ai essayé d'utiliser 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;
et cela a imprimé la première url à l'écran, ce qui est une bonne nouvelle !
http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4
L'étape suivante consistait à essayer de lire toutes les sections du document, et j'ai donc essayé :
foreach ($xml->url) {
$url = $xml->url->loc;
echo $url;
}
J'espérais que cela permettrait de saisir chaque localité dans l'url, mais cela n'a rien donné et je suis coincé.
Quelqu'un pourrait-il me guider vers la saisie de l'enfant de plusieurs parents et ensuite vers la meilleure façon de charger cette page et de la mettre en cache, ce qui, je suppose, est un simple GET ?
J'espère avoir fourni suffisamment d'informations. S'il me manque quelque chose (à part la capacité d'écrire du PHP), dites-le moi ;-)
Gracias.