Chez ZeGuigui

Le blog d'un geek chasseur de licornes au clair de lune

Chez ZeGuigui
TechniqueVie du site

Mise à jour pour Sébastien ;-)

Sébastien trouvant que le flux RSS manque d’actualité je crée une note rien que pour lui

Ce WE j’ai commencé à jouer avec le Google SiteMap. Cette technique permet d’aider les moteurs de recherche à indexer le contenu du site en listant les URL disponibles et en leur donnant une priorité (priorité pour le webmaster… pas forcément pour le moteur de recherche !).

Pour expérimenter cela j’ai créé un template pour Movable Type à partir de celui fourni par Anders Jacobsen (pour les entrées directes qui prennent en compte les commentaires) et celui de Cameron. Et ça fonctionne plutôt bien !

Malheureusement le blog n’est pas la seule source d’information de ce site et j’ai donc été obligé de modifier mon générateur de base DVD pour qu’il crée également un index sitemap. Coup de chance j’ai pu réutiliser la modification que j’avais faite pour gérer la liste des nouveautés (fonction demandée par Sébastien justement).

Restait également à créer un petit script pour générer un index SiteMap pour Gallery 2. Là je suis reparti de zéro et j’ai tapé directement dans la base de données… Le script que j’ai créé n’est vraiment pas optimisé mais ça suffira en attendant la prochaine version de Gallery 2 qui elle incluera directement un module export SiteMap (que j’ai bien tenté d’ajouté à mon installation à partir du CVS mais il faudrait que je monte en version le reste de l’install ce que je ne compte pas faire vu que ça fonctionne !).

Le script pour MovableType et le script Gallery2 sont disponibles dans la suite !

Habillage pour Movable Type

<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">

<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
<priority>1.0</priority>
<MTEntries lastn="1">
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%S+00:00"$></lastmod>
</MTEntries>
<changefreq>daily</changefreq>
</url>

<MTEntries lastn="10">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><MTIfNonZero tag="MTEntryCommentCount"><MTComments lastn="1"><$MTCommentDate utc="1" format="%Y-%m-%dT%H:%M:%S+00:00"$></MTComments><MTElse><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%S+00:00"$></MTElse></MTIfNonZero>
</lastmod>
<priority>0.9</priority>
<changefreq>daily</changefreq>
</url>
</MTEntries>

<MTEntries lastn="10" offset="10">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><MTIfNonZero tag="MTEntryCommentCount"><MTComments lastn="1"><$MTCommentDate utc="1" format="%Y-%m-%dT%H:%M:%S+00:00"$></MTComments><MTElse><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%S+00:00"$></MTElse></MTIfNonZero>
</lastmod>
<priority>0.8</priority>
<changefreq>daily</changefreq>
</url>
</MTEntries>

<MTEntries lastn="1000" offset="20">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><MTIfNonZero tag="MTEntryCommentCount"><MTComments lastn="1"><$MTCommentDate utc="1" format="%Y-%m-%dT%H:%M:%S+00:00"$></MTComments><MTElse><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%S+00:00"$></MTElse></MTIfNonZero>
</lastmod>
<priority>0.5</priority>
<changefreq>monthly</changefreq>
</url>
</MTEntries>

<MTArchiveList archive_type="Category">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
</MTArchiveList>

<MTArchiveList archive_type="Monthly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<changefreq>monthly</changefreq>
<priority>0.4</priority>
</url>
</MTArchiveList>

</urlset>

Petit script pour Gallery2

<?
header("Content-Type: text/xml; charset=utf-8");
echo ('<?xml version="1.0" encoding="UTF-8"?>');
?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<?
// Sitemap for Gallery2 (waiting for CVS next release!)
// Scratch from database... brute force !

//
// HERE YOUR NEED TO SETUP AN ACCESS TO YOUR DATABASE
// YOUR WEBSITE AND OTHER STUFF...
//
// Note: this site relies on URL rewriting!
// You'll need to modify this script if table prefix is not 'g2_'
//
// Todo:
// - check if comments exist and use last comment date
// - use G2 module to handle URLs and configuration
//
define ('BdDServer', 'localhost');
define ('BdDLogin', 'gallery2');
define ('BdDPass', 'password');
define ('BdDDatabase', 'gallery2');
define ('rootURL', 'https://www.zeguigui.com/photos/v/');
define ('albFreq', 'daily');
define ('albPrio', '0.8');
define ('phoFreq', 'weekly');
define ('phoPrio', '0.5');

mysql_connect(BdDServer, BdDLogin, BdDPass) or die("Unable to connect: " . mysql_error());
mysql_select_db(BdDDatabase);

function getURL($id, $album) {
// Looks like i am a recursive function... oops!

$sql = 'select c.g_id, c.g_parentId, f.g_pathComponent '
. 'from g2_ChildEntity c, g2_FileSystemEntity f '
. 'where c.g_id = f.g_id and '
. "c.g_id = $id";

$s = mysql_query ($sql) or die ('Error in getURL: ' . mysql_error());
$r = mysql_fetch_array ($s);
mysql_free_result ($s);

if ($r['g_parentId'] == 0) {
return rootURL;
} else {
if ($album) {
return getURL($r['g_parentId'], true) . $r['g_pathComponent'] . '/';
} else {
return getURL($r['g_parentId'], true) . $r['g_pathComponent'] . '.html';
}
}
}

// Add albums to Google Index
$sql = 'SELECT i.g_id, i.g_title, i.g_originationTimestamp '
. 'FROM g2_Item i, g2_AlbumItem a '
. 'WHERE a.g_id = i.g_id';

$statement = mysql_query ($sql) or die ("Error: " . mysql_error());
while ($row = mysql_fetch_array($statement)) {
$url = getURL ($row['g_id'], true);
?>
<url>
<loc><?= $url ?></loc>
<lastmod><?= gmdate('Y-m-d', $row['g_originationTimestamp']) . 'T' .
gmdate('H:i', $row['g_originationTimestamp']) . 'Z'
?></lastmod>
<changefreq><?= albFreq ?></changefreq>
<priority><?= albPrio ?></priority>
</url>
<?
}
mysql_free_result ($statement);

// Photos
$sql = 'SELECT i.g_id, i.g_title, i.g_originationTimestamp '
. 'FROM g2_Item i, g2_PhotoItem p '
. 'WHERE p.g_id = i.g_id';

$statement = mysql_query ($sql) or die ("Erreur : " . mysql_error());
while ($row = mysql_fetch_array($statement)) {
$url = getURL ($row['g_id'], false);
?>
<url>
<loc><?= $url ?></loc>
<lastmod><?= gmdate('Y-m-d', $row['g_originationTimestamp']) . 'T' .
gmdate('H:i', $row['g_originationTimestamp']) . 'Z'
?></lastmod>
<changefreq><?= phoFreq ?></changefreq>
<priority><?= phoPrio ?></priority>
</url>
<?
}
mysql_free_result ($statement);

mysql_close();
?>
</urlset>

Note : je n’ai pas testé le script Gallery2 tel que… Je viens de le modifier pour le rendre un peu plus paramétrable et pour qu’il soit exploitable en dehors de mon installation personnelle. N’hésitez pas à me laisser un commentaire s’il y a un problème avec.

Mise à jour : vu le grand nombre de spams reçus en commentaire sur cette note, j’ai décidé de fermer les commentaires !

2 réflexions sur “Mise à jour pour Sébastien ;-)

  • ZeGoGo

    Merci qui ?
    Merci ZeGuiGui

  • Un Plugin Google Sitemap pour notre blog.

    C’est sur le blog de ZeGuiGui que j’ai entendu parlé pour la première fois de Google Sitemap. J’en entends déjà certain dire « Mais, tu dormais où quoi ?!? »… mais ne rentrons pas sur ce sujet… le sommeil – et surout son absence – est un sujet…

Commentaires fermés.