JavaScool:SyndicationWiki
De Sciencinfolycee
Sommaire
Syndication de pages wiki sur un site externe
Les documentations de «javascool» ou de «pour quoi tu cherches» sont éditées sur ce wiki collaboratif et syndiquée sur le site web idoine.
Le principe est de faire:
- faire produire sur le site cible les pages du wiki sous forme brute avec le lien:
- http://wiki.inria.fr/sciencinfolycee/'.$name.'?printable=yes&action=render
- puis de parser les liens avec des expressions régulières pour obtenir les bons liens.
Mise en forme des liens
Le mécanisme suivant permet de mettre en forme les liens:
function wiki_get_contents_load($name) { global $wiki_get_contents_redirections; // Recuperation de la page sur le wiki $href = "http://wiki.inria.fr/sciencinfolycee/$name?printable=yes&action=render"; $text = file_get_contents($href); // Remplace tous les liens entre pages par des pages vues du site foreach($wiki_get_contents_redirections as $wiki => $php) $text = ereg_replace("href=\"http://wiki.inria.fr/sciencinfolycee/$wiki\"", "class=\"internal\" href=\"$php\"", $text); // Remplace tous les liens wikis locaux pas des liens distants $text = ereg_replace('src="/wikis/sciencinfolycee', 'src="http://wiki.inria.fr/wikis/sciencinfolycee', $text); // Qualifie proprement les liens internes issus du wiki $text = ereg_replace("href=\"http://javascool.gforge.inria.fr/([^\"]*)\" *class=\"external text\"", "href=\"\\1\" class=\"internal\"", $text); // Elimine la table de méta-donnée $text = ereg_replace('<table class="wikitable">.*</table>', '', $text); // Détecte les erreurs if (ereg("<title>(Erreur|Connexion nécessaire)", $text)) $text = "Erreur: la page wiki $name est en erreur.\n"; return $text; }
tandis que la table:
$wiki_get_contents_redirections = array("JavaScool:Accueil" => "?page=home", etc... );
donen la correspondance entre la page wiki et celle du site.
Mécanisme de cache
Le mécanisme suivant permet de filtrer les accès à travers un cache:
function wiki_get_contents_cache_load($name) { $name = rawurlencode($name); // Utilisation d'un cache local $cache = '.http.cache'; if (!file_exists($cache)) mkdir($cache, 0777); if (!file_exists($cache.'/'.$name)) { file_put_contents($cache.'/'.$name, wiki_get_contents_load($name)); chmod($cache.'/'.$name, 0666); } return file_get_contents($cache.'/'.$name); }
et de vider le cache pour prendre en compte de nouvelles modifs:
function wiki_get_contents_cache_clear() { if(isset($_GET['kezako']) && $_GET['kezako'] == 'niquelekacheux') { passthru("rm -rf .http.cache"); exit; } }