Page 1 sur 1

Générateur de sitemap en php

Posté : 02 juin 2010, 22:45
par magikbibi
Bonjour à toutes et à tous,

Je cherche à faire un générateur de sitemap.xml interne à un site Web. J'ai été très conquis par le résultat que donne ce site web : http://www.xml-sitemaps.com/
Cependant je suis obligé de jouer du FTP pour ensuite placer mon fichier sitemap.xml au bon endroit.

Moi je cherche quelque chose d'identique qui serait éxécuté depuis la partie "admin" de mon site Web et que mon fichier sitemap.xml soit remis à jour.

J'ai donc trouvé des scripts en php (http://sourceforge.net/projects/goog-si ... itemapgen/) mais ces scripts se contentent de parcourir mon serveur et de lister l'ensemble de mes fichiers dans un sitemap.xml alors que http://www.xml-sitemaps.com (ci dessus) lui m'affiche les adresses des pages tel que les voit n'importe quelle visiteur.

Par exemple, avec le script google-sitemap_generator 1.4 voici le résultat que j'obtiens dans mon sitemap.xml
" <loc>http://www.monsiteweb.com/monfichier_source.php</loc>"

Alors qu'avec http://www.xml-sitemaps.com j'ai plutot ceci :
"<loc>http://www.monsiteweb.com/?page=page&pageid=12</loc>"

http://www.xml-sitemaps.com me génère vraiment les liens web tel qu'un visiteur les verras en parcourant mon site Web. Comment font-ils et comment obtenir un résultat similaire ?

Merci par avance pour vos pistes.

Re: Générateur de sitemap en php

Posté : 03 juin 2010, 08:01
par Aureusms
C'est un robot qui parcours le site web en suivant tous les liens présents dans chaque page trouvées à partir de index.php/html/...
Je ne connais pas cette technologie mais, en réfléchissant, je ferai un fopen() vers l'URL. Je stockerai le résultat dans un tableau. Ensuite je scannerai le tableau avec un preg_match avec parenthèses capturantes dès qu'un lien en HTML (<a> </a>) ou javascript (window.location) est trouvé. De ces captures de lien, si le lien est dans le même domaine ou sous domaine, je referrai un fopen() et ainsi de suite.

Re: Générateur de sitemap en php

Posté : 03 juin 2010, 10:34
par stealth35
C'est un robot qui parcours le site web en suivant tous les liens présents dans chaque page trouvées à partir de index.php/html/...
Je ne connais pas cette technologie mais, en réfléchissant, je ferai un fopen() vers l'URL. Je stockerai le résultat dans un tableau. Ensuite je scannerai le tableau avec un preg_match avec parenthèses capturantes dès qu'un lien en HTML (<a> </a>) ou javascript (window.location) est trouvé. De ces captures de lien, si le lien est dans le même domaine ou sous domaine, je referrai un fopen() et ainsi de suite.
ca serais plus simple avec DomDocument, avec Xpath tu peux récupérer directe tout les liens, par contre faudrait faire une liste des liens qu'on a parcouru pour pas retourner dedans

Re: Générateur de sitemap en php

Posté : 07 juin 2010, 19:54
par magikbibi
Aller hop, j'ai remonté mes manches et voici un petit script (à améliorer je le conçois) qui génère un fichier sitemap.xml normalement aux normes (je demande confirmation quand meme sur ce coup) :

Ce script nécessite auparavant "simple_html_dom.php" que l'on peu trouver ici : http://simplehtmldom.sourceforge.net/
<html>
<head></head>
<body>
<?php


include("topdir.php");
include($topdir."/include/fonctions/simplehtmldom/simple_html_dom.php");
$V_SITE_WEB = "http://www.monsiteWeb.com/";
$V_FREQUENCE = "monthly";

function create_site_map($V_LINK,$TAB_LINK)
{
	global $TAB_LINK;
	global $V_SITE_WEB;

	
	
	
	/* Mettre à 1 la page sur laquelle on se trouve pour ne pas la retraiter plus tard */
	if(array_key_exists($V_LINK,$TAB_LINK))
	{
		$V_TAB_LINK_SPLIT = split("::", $TAB_LINK[$V_LINK]);
		if($V_TAB_LINK_SPLIT[1] != 1)
		{
			$TAB_LINK[$V_LINK] = $V_LINK."::1";
		}
	}

	
	/* Aller SCANNER LA PAGE en HTML */
	$post_data = "id=93117887&l=fr";
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $V_SITE_WEB.$V_LINK);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$page = curl_exec($curl);
	curl_close($curl);
	//echo $page;

	
	
	/* RECHERCHE DES BALISES <a> */
	$html = new simple_html_dom();
	$html->load($page);
	foreach($html->find("<a") as $element)
	{

		if(!mb_eregi("www",$element->href) AND !mb_eregi("http",$element->href) AND !mb_eregi("mailto",$element->href) AND substr($element->href, -4, 1)!=".")
		{
			// Si les liens sont Interne (ne contiennent ni http:// ni www)
			$V_LINK_DOM = $element->href;
			$V_LINK_DOM = str_replace("../","",$V_LINK_DOM);
			$V_LINK_DOM = str_replace("./","",$V_LINK_DOM);
			if(!array_key_exists($V_LINK_DOM,$TAB_LINK))
			{
				$TAB_LINK[$V_LINK_DOM] = $V_LINK_DOM."::0";
			}
		}
	}
	

	
	/* Faire tourner le tableau des liens et ne prendre en compte uniquement ceux qui sont à 0*/
	foreach($TAB_LINK as $TAB_LINK_bis)
	{
		$V_TAB_LINK_SPLIT = split("::", $TAB_LINK_bis);
		if($V_TAB_LINK_SPLIT[1] == 0)
		{
			//echo $V_TAB_LINK_SPLIT[0];
			create_site_map( $V_TAB_LINK_SPLIT[0],$TAB_LINK);
		}
	}
	
}

$TAB_LINK["index.php"] = "index.php::1";
create_site_map("index.php",$TAB_LINK);
//print_r($TAB_LINK);

/* CREATION DU FICHIER XML */
$CONTENU_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n
				<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.9\"\n
				xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
				xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\n
				http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n\n";

	foreach($TAB_LINK as $TAB_LINK_bis)
	{
		$V_TAB_LINK_SPLIT = split("::", $TAB_LINK_bis);
		$CONTENU_XML.="<url>\n";
		$CONTENU_XML.="<loc>".$V_SITE_WEB.htmlspecialchars($V_TAB_LINK_SPLIT[0])."</loc>\n";
		$CONTENU_XML.="<changefreq>".$V_FREQUENCE."</changefreq>\n";
		$CONTENU_XML.="<priority>0.50</priority>\n";
		$CONTENU_XML.="</url>\n\n";
	}

$CONTENU_XML.= "</urlset>";

$V_Fichier_SITEMAP = $topdir."test/sitemap.xml";
touch($V_Fichier_SITEMAP);
$fp = fopen($V_Fichier_SITEMAP, "w");
if(fwrite($fp, utf8_encode($CONTENU_XML)))
{
	echo("ok");
}
else
{
	echo("ko");
}

fclose($fp);

?> 





<body>
</html>


Re: Générateur de sitemap en php

Posté : 12 mai 2012, 00:34
par tczup
ça ne fonctionne pas :

Deprecated: Function split() is deprecated in /home/www/8e588f7f1eacedca495d96c3fce84e20/web/sitemapgen/index.php on line 25

Fatal error: Class 'simple_html_dom' not found in /home/www/8e588f7f1eacedca495d96c3fce84e20/web/sitemapgen/index.php on line 47