JavaScool:SyndicationWiki : Différence entre versions

De Sciencinfolycee
Aller à : navigation, rechercher
m (Mise en forme des liens)
m
Ligne 1 : Ligne 1 :
 
= Syndication de pages wiki sur un site externe =
 
= Syndication de pages wiki sur un site externe =
  
Les documentations de [http://javascool.gforge.inria.fr javascool] ou de [http://www-sop.inria.fr/science-participative/film/pages.php pour quoi tu cherches] sont éditées sur ce wiki collaboratif et syndiquée sur le site web idoine.
+
Les documentations de [http://javascool.gforge.inria.fr «javascool»] ou de [http://www-sop.inria.fr/science-participative/film/pages.php «pour quoi tu cherches»] sont éditées sur ce wiki collaboratif et syndiquée sur le site web idoine.
  
 
Le principe est de faire:
 
Le principe est de faire:

Version du 1 septembre 2011 à 17:56

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:

  1. faire produire sur le site cible les pages du wiki sous forme brute avec le lien:
  2. 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; 
  }
}