Comment analyser un sitemap xml à l'aide de PHP Curl et individuellement la charge de chaque url

Je suis en train d'écrire un script qui va lire une distance sitemap.xml et d'analyser l'url du sein, puis de charger chacun, tour à tour, avant de les mettre en cache pour une navigation plus rapide.

La raison derrière cela: 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 entre 8 à 10 secondes. Les chargements ultérieurs après que l'on peut être aussi peu que 1 seconde. Évidemment, pour une meilleure UX, pré-en cache-pages sont un bonus.

Chaque fois que nous nous préparons à une nouvelle publication sur ce serveur ou d'effectuer tout essai/de l'application des correctifs que nous avons pour effacer le cache donc l'idée est d'écrire un script qui va analyser le sitemap et de la charge de chaque url.

Après avoir fait un peu de lecture, j'ai décidé que le meilleur moyen est d'utiliser PHP & Curl. Si c'est une bonne idée ou pas je ne sais pas. Je suis plus familier avec Perl mais ni PHP, ni Perl installés sur le système à l'heure actuelle, alors j'ai pensé qu'il pourrait être agréable à tremper mes orteils dans le PHP de la piscine.

Le code que j'ai attrapé off "teh internets" jusqu'à présent, lit le sitemap.xml et l'écrit dans un fichier xml sur notre serveur, ainsi que l'affichage dans le navigateur. Aussi loin que je peux dire c'est tout simplement le dumping un 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 vider l'intégralité du document dans un fichier ou à l'écran, il serait préférable de parcourir la structure xml et il suffit de saisir l'url que 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&#x9;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 cet imprimé de la première url de l'écran qui a été une super nouvelle!!

http://ourdomain.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4

Ma prochaine étape est d'essayer et de lire toutes les lignes de crédit dans le document, donc j'ai essayé:

foreach ($xml->url) {
    $url = $xml->url->loc;
    echo $url;
}

espérant que ce serait prendre chaque loc au sein de l'url, mais il produit rien et là je suis coincé.

Svp quelqu'un pourrait-il me guider vers l'accaparement l'enfant de plusieurs parents et puis la meilleure façon de charger cette page et de les mettre en cache qui je suppose est un moyen simple d'OBTENIR?

J'espère avoir fourni assez d'informations. Si je suis absent quelque chose (en dehors de la possibilité d'écrire des scripts PHP. s'il vous plaît dire 😉

Grâce.

  • (note) SimpleXml pouvez charger à distance Uri directement. Vous n'avez pas besoin de cURL pour que.
  • Ok, je vais regarder dans cette grâce.