Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/12/2010, à 20:10

MaryPopy

Générateur de sitemap xml et txt

Hello,

Je trouve ce logiciel indispensable http://home.snafu.de/tilman/xenulink.html
Je l'emploi avec Wine.

J'aimerais trouver son équivalent pour console.

C'est un sitemap générator.

Merci.

Dernière modification par MaryPopy (Le 13/12/2010, à 20:27)

Hors ligne

#2 Le 13/12/2010, à 22:07

MaryPopy

Re : Générateur de sitemap xml et txt

J'ai vu google-sitemapgen qui est dans les dépot mais il retourne une erreur. JE pense que c'est parce qu'il a été écrit pour Python 2.2

Hors ligne

#3 Le 13/12/2010, à 22:38

Tomzz

Re : Générateur de sitemap xml et txt

Bonjour,
J'ai fais un truc comme ça en PHP, ça génère le sitemap et ça prend en compte les dernières modification et gère le <priority> grâce à des commentaires Html.


J'ai le même truc un peu modifier pour gérer le plan du site.


Si ça t'intéresse, je le posterai ici (il va me falloir un peu de temps, ça fais 3 ans et il faut que je retrouve comment ça marche wink )

Hors ligne

#4 Le 13/12/2010, à 23:05

MaryPopy

Re : Générateur de sitemap xml et txt

Hello,

Merci, sa m'intéresse oui !

Hors ligne

#5 Le 14/12/2010, à 01:17

Tomzz

Re : Générateur de sitemap xml et txt

Voilà le code du générateur de site map.
Je l'utilise actuellement, il marche, mais je l'ai extrait du rest de la page, j'espère n'avoir rien oublié:

<?php

        ////creer un sitemap en xml

        // on ouvre le repertoire contenant les fichiers a traiter
        $dir = opendir("./");

        // on initialise le compteur a 1 pour ne pas avoir zero d'afficher devant le premier fichier !
        $i = 1; 

        //on commence a contruire le fichiers. celui ci ! tel qu'il sera envoyer au "browser".
        $faire_fichier = '<?xml version="1.0" encoding="UTF-8"?>'."\n".'<urlset'."\n".'        xmlns="http://www.google.com/schemas/sitemap/0.84">'."\n\n";
        // lit le contenu du repertoire 
        while($file = readdir($dir))
        
         //on trie et elimine les resultats parasites
        if(eregi(".php",$file)) //on ne traite que les fichiers php mais on pourrait en prendre d'autres
        // on rajoute autant de "|| eregi("chaine de caracteres",$file))"que necessaire il s agit des page que l'on souhaite exclure ( a personnaliser obligatoirement)
        if(ereg("^\.?\.+$", $file) || ereg( "sommaire", $file) || ereg( "feedparser", $file) || ereg( "40", $file) || ereg( "&", $file) || ereg( "info\.php", $file) || ereg( "anim\.php", $file) || ereg( "agenda\.php", $file)) 
        
        {
          // on detruit $file quand devenue inutile !
          unset($file);
        }
        else // sinon on peut commencer a creer le contenu du fichier xml !
        {
            //on ouvre le fichier
            $fichier = fopen ("$file", "r");                 
             // commentaire: "r" = ouverture en lecture seule
            if (!$fichier) 
            {                                         
                exit;
            }
            while (!feof ($fichier)) 
            {
              $line = fgets ($fichier, 5120); 
                //Cela ne fonctionne si on a iserer les commentaires <priority>0 a 1.0</priority> et <changefreq>dayly, monthly ...</changefreq> en fin des balises head de chaques fichiers a traiter
                if (eregi ("<priority>(.*)</priority>", $line, $prio) OR eregi ("<changefreq>(.*)</changefreq>", $line, $freq)) 
                {
                    $prio1 = $prio[1];
                    $freq1 = $freq[1];
                    $date_fic = date("Y-m-d\TH:i", filemtime($file))."+00:00"; //lecture de la date de creation du fichier traite        
         
                } 
                
            }
        
            // on ferme le fichier !
            fclose($fichier);

            {
              //construit le site map
              $colonne = "    <url>\n        <loc>\n            http://www.2aide.fr/".$file."\n        </loc>\n        <priority>\n            ".$prio[1]."\n        </priority>\n        <lastmod>\n            ".$date_fic."\n        </lastmod>\n        <changefreq>\n            ".$freq[1]."\n        </changefreq>\n    </url>\n\n";
              $faire_fichier .="$colonne";
            }
                
        }
        
        

        closedir($dir); // on ferme le repertoire
        
        
        $faire_fichier .= "\n</urlset>"; //on ferme la balise urlset
        
        //gestion de l'affichage du code xml dans la page de generation pour pouvoir verifier simplement ce que l'on a fait
        $codhtm = array ( "    " => "&nbsp;&nbsp;&nbsp;&nbsp;", " /" => "" ); //pour la clarte d'affichage on remplace les tabulation par des espaces insecables mon site est valide html transitional alors je transforme les balises <br /> generees par nl2br en <br> (le jour ou j aurais la patience je convertirai en html strict)                    
        $codhtm1 = nl2br ( htmlentities ($faire_fichier) ); // htmlenties pour que le code xml s affiche sans etre interprete et nl2br pour les sauts de lignes
        $affic = strtr( $codhtm1,$codhtm ); // suite de la gestion des tabulation et des balises br
        
        echo "<div style='text-align : left; margin-left : 50px; font-size : 1.3em;'>\n".$affic."\n</div>"; //affichage du code dans la page
        //on peut maintenant sauvegarder ce sommaire dans fichier pour le reutiliser en static
        if ($monsommaire = fopen("sitemap.xml", "w+")) // creer ou reecrit le fichier
        {
          // on insere la variable $faire_fichier construite precedement dans le fichier xml
          fputs($monsommaire, "$faire_fichier");
          // et voila le fichier est pret a etre utilise
        }
        fclose($monsommaire);
?>

La version pour le plan du site:

<?php

////creer un sommaire a partir de fichier dans un repertoire avec leur titre et le lien ////(dans un tableau)

// on ouvre le repertoire contenant les fichiers a traiter
$dir = opendir("./");

// on initialise le compteur a 1 pour ne pas avoir zero d'afficher devant le premier fichier !
$i = 1;

// on commence le tableau...
//echo "<table class=\"t1\" summary=\"Plan du site\">\n\n<tr>\n <td class=\"c4\" colspan=3>\nPlan du Site\n </td>\n</tr>\n \n<tr>\n <td class=\"c1\" style=\"width : 33%;\">\n <h3><a href=\"/blog2z/\">Le Blog</a></h3>\n </td>\n <td class=\"c1\" style=\"width : 33%;\">\n <h3><a href=\"/livre-or/livre.php\">Le Livre d'or</a></h3>\n </td>\n <td class=\"c1\" style=\"width : 33%;\">\n <h3><a href=\"http://2aide.gooforums.com\" target=\"_blank\">Le Forum</a></h3>\n </td>\n</tr>";


//on commence a contruire le fichiers. celui ci ! tel qu'il sera envoyer au "browser".
$faire_fichier = "<table class=\"t1\" summary=\"Plan du site\">\n\n<tr>\n <td class=\"c4\" colspan=3>\nPlan du Site\n </td>\n</tr>\n \n<tr>\n <td class=\"c1\" style=\"width : 33%;\">\n <h3><a href=\"/blog2z/\">Le Blog</a></h3>\n <p class=\"centre\">L'actualit&eacute; de 2aide.</p>\n </td>\n <td class=\"c1\" style=\"width : 33%;\">\n <h3><a href=\"/livre-or/livre.php\">Le Livre d'or</a></h3>\n <p class=\"centre\">Donnez votre avis sur ce site ou sur les services de 2aide.</p>\n </td>\n <td class=\"c1\" style=\"width : 33%;\">\n <h3><a href=\"http://www.2aide.fr.Dokuwiki\" target=\"_blank\">Le Wiki</a></h3>\n <p class=\"centre\">Astuces, attention, il s'agit d'un document de travail, tout n'est pas garanti fonctionnel.</p>\n </td>\n</tr>\n";
echo $faire_fichier;
// lit le contenu du repertoire
while($file = readdir($dir))

 //on trie et elimine les resultats parasites
if(eregi(".php",$file))
// on rajoute autant de "|| eregi("extension de fichier",$file))"que necessaire
if(ereg("^\.?\.+$", $file) || ereg( "sommaire", $file) || ereg( "feedparser", $file) || ereg( "40", $file) || ereg( "&", $file) || ereg( "info\.php", $file) || ereg( "anim\.php", $file) || ereg( "plan\.php", $file) || ereg( "agenda\.php", $file) || ereg( "agenda1\.php", $file) || ereg( "hd-depots\.php", $file))
// les noms de fichiers contenant sommaire ne seront pas pris en compte ! inutile de s'autoindexer !

{
// on detruit $file quand devenue inutile !
unset($file);

}
else // sinon on peut commencer a creer le contenu du tableau !
{


////////////////on cherche le titre du fichier $file///////////c'etait mon soucis/////////////////////////

//on ouvre le fichier
$fichier = fopen ("$file", "r");
 // commentaire: "r" = ouverture en lecture seule
if (!$fichier) {
//  ! = erreur, pas trouver le fichier, en principe la boucle s'est deja arreter et ce cas de figure ne devrait pas arriver
    echo "<p>Impossible de lire la page.\n";
//  donc message d'avertissement
    exit;
}
while (!feof ($fichier)) {
    $line = fgets ($fichier, 5120);
// commentaire:lecture des premier 1023 caracteres ca devrait suffire.sinon augmenter
//Cela ne fonctionne que si les balises Title sont correctement utilisees et reinseignees
if (eregi ("<title>(.*)</title>", $line, $trouve) or eregi ("<meta name=\"Description\" content=\"(.*)\">", $line, $descrip)) {
        $title = $trouve[1];
        $descrip1 = $descrip[1];
        $date_fic = date("d\/m\/Y", filemtime($file));

    }
}
// on ferme le fichier !
fclose($fichier);

//////////////c'est fait !//////on a le nom du fichier (et l'endroit ) et son titre////////////////////////////////

{

//construit une colonne du tableau
$colonne = " <td class=\"c1\" style=\"width : 33%;\">\n ".
//la remplie

"<h3><a href='./$file'>$trouve[1]</a></h3><p class=\"centre\">$descrip[1]</p><p class=\"petit\">derni&egrave;re mise &agrave; jour: $date_fic</p>\n<p class=\"petit\">\n</td>\n";

// la on prend le numero de fichier par curiosite et pour donner un nom au lien du fichier qui n'aurait pas de titre
{

unset($trouve[1]);
unset($descrip[1]);
//on efface le titre pour qu'il ne soit reutiliser ou prochain fichier qui n'aurait,lui pas de titre !nous avons deja un numero.

}

// si le reste de $i / 3 (le nombre de colonnes desirees) egale 1 et  LA TU REMPLACE 3 PAR 2 ! ET TU AS 2 COLONNES !
// que $i n'en est pas a sa premiere iteration (pour eviter d'avoir une
// ligne "<tr>" parasite au debut, c'est que l'on peut commencer une ligne
if ($i%3==1)
{
echo "\n<tr>\n"; // on commence une ligne du tableau
$faire_fichier .= "\n<tr>\n";
}
if($i %3 !=1 OR $i %3 == 1)
{

echo "$colonne"; // on affiche une colonne
$faire_fichier .="$colonne";
}
$i++; // on incremente le compteur


// puisque $i a ete incremente une ligne plus haut, la condition
// ci-dessous recevra une valeure de $i differente du debut de la
// boucle, donc on peut fermer la ligne
if ($i%3==1)
{
echo "\n</tr>\n";
$faire_fichier .= "\n</tr>\n";
}
}
}
echo "\n\n</table>"; // on ferme le tableau
$faire_fichier .= "\n</table>";

closedir($dir); // on ferme le repertoire
//on peut maintenant sauvegarder ce sommaire dans fichier pour le reutiliser en static
if ($monsommaire = fopen("sommaire.php", "w+")) // creer ou reecrit le fichier
{
// on insert la variable $faire_fichier construite precedement dans le fichier html

fputs($monsommaire, "$faire_fichier");
// et voila le fichier est pret a etre utilise
}
fclose($monsommaire);

///pour mieux comprendre ne pas hesiter a consulter les differents dico et exemple en ligne ,
// on fini toujours par se bricoler un truc simple qui  marche

?>

Ces portions de code sont bien sûr à inséré dans la source d'une page.
Ils doivent se trouver dans le répertoire contenant les pages à référencer (mais ce doit être modifiable pour traiter plusieurs répertoires)

Attention, tout accès à ces pages régénère le sitemap (ou le plan du site), pour éviter les clics malencontreux des visiteurs, elles sont en noindex, nofollow et je les ai affublées d'un nom improbable.
J'y accède par un lien depuis une page d'admin protégée.

Hors ligne

#6 Le 14/12/2010, à 08:44

MaryPopy

Re : Générateur de sitemap xml et txt

Merci beaucoup, je vais voir ça quand je rentre.

Hors ligne