Ce script permet de générer un sommaire de pages (au formats RSS ou XHTML) à partir de métadonnées contenues dans les fichiers HTML.
- la synthèse et l'ordre des fichiers est déterminée grâce à la balise <link> : exemple : <link rel="Prev" href="./1.html">
- le titre de chaque item est donné :
- en priorité, par la métadonnée DC.Title : par exemple : <meta name="DC.Title" content="L'eau ferugineuse" />
- ou bien, si cette meta est inexistante, par la balise <title> : exemple : <title>Cahier des charges de ce site</title>
Ce sommaire peut être augmenté d'autres métadonnées :
- la date de chaque item donnée par <meta name="DC.Date" scheme="W3CDTF" content="2004-10-25" />
- la page d'accueil du site dont on tire le sommaire, donné par <link rel="Start" href="http://example.org/" />
- l'URL du moteur de recherche du site concerné, donné par <link rel="search" title="Recherche" href="/chercher" />
L'outil est encore expérimental. Toutes les métadonnées ne sont pas encore réalisées. D'autres métadonnées viendront s'ajouter à celles-ci.
Usage
Ce script fonctionne :
- sans argument, à partir du formulaire proposé
- à partir d'une requête HTTP de type GET
Source
<?php
/*
gen_som.php
Par Charles Népote
Version 0.1, 08/11/2004 -- 10:34
Prérequis : PHP 4.3.0
(utilisation de la fonction file_get_contents())
*/
// -- configuration ----------------------------------------------
// Fichier d'en-tête par défaut
$url_debut=''; // URL du premier fichier
$max_nb='4'; // '1' à '9999'
$fichier_cible='i.rss'; // index.rss
$sens='+'; // '-' ou '+'
$base='http://127.0.0.1/adm/'; //
$titre_fil=''; // Titre du fil
$desc_fil=''; // Description du fil
$url_site=''; // URL du site
$url_image=''; // URL d'une image représentant le fil ou le site
$url_recherche=''; // URL du moteur de recherche du site
$sortie=''; // 'fichier-rss' ou 'fichier-xhtml' ou 'fichier-code-xhtml' ou
// 'service-rss' ou 'service-xhtml' ou 'service-code-xhtml'
$fic_config=''; //
// A venir (?)
$periode=''; // 31
$mois=''; // mars
/*
$fichier_entete = 'en-tete.html';
$fichier_gen = '/home/httpd/vhosts/rn7.net/httpdocs/adm/index.html';
$fichier_cible = '/home/httpd/vhosts/rn7.net/httpdocs/index.html';
$url_cible = 'http://rn7.net/index.html';
*/
// -- Constantes ------------------------------------------------
$entete_rss= "<?xml version=\"1.0\"?>\n".
"<rdf:RDF\n".
" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n".
" xmlns:rss=\"http://purl.org/rss/1.0/\"\n".
">\n";
$doctype_1= "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \n".
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
$html_tag= "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\">\n";
// -- traitements ------------------------------------------------
// -- calcul des variables ---------------------------------------
if(isset($_GET["fic_config"]))
{
$fic_config = $_GET["fic_config"];
// Vérifier que le fichier existe
//
$f = fopen($fic_config, 'r')
or die("Fichier de configuration incorrect : ".$fic_config.".");
$contenu_config = file_get_contents($fic_config);
fclose($f) or die($php_errormsg);
// Charger toutes les valeurs
//
//parse_ini_file() (?)
//
}
if(isset($_GET["url_debut"])) $url_debut = $_GET["url_debut"];
if(isset($_GET["max_nb"])) $max_nb = $_GET["max_nb"];
if(isset($_GET["fichier_cible"])) $fichier_cible = $_GET["fichier_cible"];
if(isset($_GET["sens"])) $sens = $_GET["sens"];
if(isset($_GET["base"])) $base = $_GET["base"];
$url_gen = $base.$fichier_cible;
// -- Fichier généré ------------------------------------------
//if ($result=''|$result='fichier_rss'|$result='fichier_code_xhtml'|$result='fichier_xhtml')
//{
// Copie du fichier généré vers le fichier cible
/*if (isset($_GET["copie"]))
{
copy($fichier_gen, $fichier_cible)
or die("<p>Impossible de copier : \"". $php_errormsg ."</p>");
echo "<p>Copie effectuée ! => <a href=\"" . $url_cible . "\">Voir le résultat</a></p>\n".
"</body>\n</html>\n";
exit;
}*/
echo $doctype_1;
echo $html_tag;
echo <<<FIN
<head>
<title>Gen_som</title>
<meta http-equiv="content-type" content="text/html; charset=iso-latin-1" />
<style type="text/css">
#form p {
line-height: 1.2em;
}
#form label {
float: left; /*** Très important, ne pas suprimer ! ***/
width: 25%; /*** Les intitulés prennent 1/3 de la largeur totale du formulaire... ***/
text-align: right; /*** ... et ils sont alignés à droite... ***/
margin: 0;
padding: 0 .5em 0 0;
line-height: 1.2em;
}
#form input {
width: 73%;
}
</style>
</head>
<body>
FIN;
// -- Formulaire pour la gestion du fichier de config. --------
//
echo "<form action=\"gen_som.php\" method=\"get\">\n";
//echo "<p>\n";
echo "<fieldset id=\"form_config\">\n";
echo "<legend>Configuration (données facultatives)</legend>\n";
echo "<p><label>URL du fichier de config. : </label><input name=\"fic_config\" value=\"".$fic_config."\" /></p>\n";
echo "<p><input type=\"submit\" value=\"Ok\" /></p>\n";
echo "</fieldset>\n";
//echo "</p>\n";
echo "</form>\n";
// -- Formulaire de départ ------------------------------------
//
echo "<form action=\"gen_som.php\" method=\"get\">\n";
//echo "<p>\n";
echo "<fieldset id=\"form\">\n";
echo "<legend>Formulaire d'envoi</legend>\n";
echo "<p><label>* URL de départ : </label><input name=\"url_debut\" value=\"".$url_debut."\" /></p>\n";
echo "<p><label>* Nombre maximum d'items : </label><input name=\"max_nb\" value=\"".$max_nb."\" /></p>\n";
echo "<p><label>Titre du fil : </label><input name=\"titre_fil\" value=\"".$titre_fil."\" /></p>\n";
echo "<p><label>Description du fil : </label><input name=\"desc_fil\" value=\"".$desc_fil."\" /></p>\n";
echo "<p><label>URL du site relatif au fil : </label><input name=\"url_site\" value=\"".$url_site."\" /></p>\n";
echo "<p><label>URL de l'image du fil : </label><input name=\"url_image\" value=\"".$url_image."\" /></p>\n";
echo "<p><label>URL de recherche de l'objet du fil : </label><input name=\"url_recherche\" value=\"".$url_recherche."\" /></p>\n";
echo "<p><input type=\"submit\" value=\"Ok\" /></p>\n";
echo "</fieldset>\n";
//echo "</p>\n";
echo "<p><em>* Champs obligatoires</em></p>\n";
echo "</form>\n";
// -- Informations --------------------------------------------
echo "<p>URL de départ : <a href=\"" . $url_debut . "\">" . $url_debut . "</a></p>\n";
//echo "<p>".$_SERVER["DOCUMENT_ROOT"]."</p>\n";
echo "<p>URL du fichier généré : <a href=\"".$url_gen."\">".$url_gen."</a></p>\n";
echo "\n\n<hr />\n";
// -- Traitements ---------------------------------------------
// S'il n'y a pas de source spécifiée
if ($url_debut=="")
{
echo "<p>Pas de source spécifiée.</p>\n";
"</body>\n</html>\n";
}
// Si le fichier source est spécifié on attaque
else
{
$tableau = array();
$tableau["url"] = $url_debut;
// Lit le fichier de départ
$i = $max_nb;
while (isset($tableau["url"]) && $i > 0)
{
$tableau = LitFichier($tableau["url"]);
//echo " ** ", $i, " ** ", $tableau["url"], "<br />\n";
$i--;
}
}
/*
// Génère le fichier cible
$cible = fopen($fichier_gen, 'w+');
fputs($cible, $entete.$corps.$pied);
fclose($cible) or die($php_errormsg);
echo "<p>Fichier ".$fichier_gen." correctement enregistré.</p>\n";
*/
echo "\n\n</body>\n</html>\n";
// -- Fin des traitements -----------------------------
// -- fonction d'analyse des fichiers -----------------
function LitFichier($url)
{
$array = array();
$f = fopen($url, 'r') or die("Fichier spécifié incorrect.");
$contenu = file_get_contents($url);
fclose($f) or die($php_errormsg);
// -- Titre
//
preg_match("#.*<title>(.*)</title>.*#s", $contenu, $matches);
$array["title"] = $matches[1];
echo "<p><a href=\"".$url."\">".$array["title"]."</a></p>\n";
//preg_match("/.*<meta name=\"DC.Title\" content=\"(.*)\".*/s", $contenu, $matches);
//$array["title"] = $matches[1];
// -- Date
// Exemple : <meta name="DC.Date" scheme="W3CDTF" content="2004-10-25" />
//
preg_match("#.*<meta name\=\"DC\.Date\" scheme=\"W3CDTF\" content\=\"(.*)\" />.*#", $contenu, $matches);
$array["date"] = $matches[1];
// -- Lien
//
//$array["permalien"] = preg_replace("/.*<body>(.*)<\/body>.*/s", "$1", $contenu);
// Exemple : <link rel="Prev" href="./1.html" />
preg_match("#.*<link rel\=\"Prev\" href\=\"(.*)\" />.*#", $contenu, $matches);
if (isset($matches[1]))
{
$array["url"] = $matches[1];
// Transformation de l'URL si ce n'est pas une URL absolue
if (preg_match("#^\.(/.*)#", $array["url"], $matches2))
{
$rep_courrant = preg_replace("#^(.*)/(.*)$#", "$1", $url);
//echo $rep_courrant, " ***\n";
$array["url"] = $rep_courrant . $matches2[1];
}
}
// Résultat
return $array;
}
?>
FAQ
A partir du moment où il y a une date, pourquoi vouloir utiliser les "prev" ?
Parce qu'avec un grand nombre de fichier il faudrait balayer tous les fichiers ; ici on ne fait que le nécessaire.
Prospective