Script nabazparis.php

L'option php vous permet d'afficher le contenu du script.


<?php // -*-c-*-
// Script librement adapté de celui de GrosBill par FlorentBL
// <a href="http://nabaztag.forumactif.fr/api-f3/etat-du-trafic-ratp-t6-45.htm">Forum Nabaztag</a>
// Versionnage automatique :
// DATE: 2009-06-09 00:21:24



// Fonctions d'analyse des pages web
// cut_comment permet de couper une zone située entre $textDebut et $textFin.
// La zone coupée est éventuellement remplacée par $substitute.
// Si $textDebut est vide, alors la zone coupée commence au début de la chaîne $str.
// Dans ce cas, si $textFin n'est pas trouvé dans la chaîne, la chaîne $str est retournée.
// Si $textDebut est non vide et n'est pas trouvé dans la chaîne, la chaîne $str est retournée.
// Si $textDebut est trouvé dans la chaîne mais pas $textFin, alors toute la fin de la chaîne
// est coupée à partir de $textDebut.
// C'est toujours la première occurence de $textDebut, puis de $textFin qui est prise en compte.
function cut_comment($str, $textDebut, $textFin, $substitute='') {
  if($textDebut == '') {
    $ret = '';
    $left = $str;
  } else {
    $retpos = strpos($str, $textDebut);
    if ( $retpos === FALSE) {
      return($str);
    } else {
      $ret = substr($str, 0, $retpos);
      $left = substr($str, $retpos);
    }
  }
  $retpos = strpos($left, $textFin);
  if ( $retpos === FALSE) {
    if($ret == '') {
      return($str);
    }
    return($ret.$substitute);
  } else {
    $ret = $ret.$substitute.substr($left, $retpos+strlen($textFin));
    return($ret);
  }
}

// get_interesting permet d'isoler une zone comprise entre $textDebut et $textFin
// Si $textFin n'est pas présent dans la chaîne, la zone retenue va jusqu'à la fin de la chaîne.
function get_interesting($str, $textDebut, $textFin) {
  $ret = strstr($str, $textDebut);
  $retpos = strpos($ret, $textFin);
  if ($retpos !== FALSE) {
    $ret = substr($ret, 0 , $retpos);
  }
  return($ret);
}

// Option d'affichage du script
if(isset($_GET['php'])) {
  echo('<html><head><title>Script nabazratp.php</title></head><body>');
  echo('<h1><a href="http://nabazparis.free.fr/">Script nabazparis.php</a></h1>');
  echo('<p>L\'option php vous permet d\'afficher le contenu du script.</p>');
  $url='./nabazparis.php';
  $fd=fopen("$url","r");
  $len=filesize($url);
  $rd=fread($fd, $len);
  fclose($fd);

  echo('<hr /><pre>'.htmlspecialchars($rd).'</pre>');
  exit(0);
} 

if(isset($_GET['serial']))
{
  $MonSerial = $_GET['serial'];
  if(isset($_GET['token']))
    {
      $MonToken = $_GET['token'];
      if(isset($_GET['type']))
	{
	  $typetransport = $_GET['type'];
	} else {
	  $typetransport = 'undefined';
	}
      //echo 'typetransport ='.$typetransport;
	
      if($typetransport == 'fichier') {
	//echo 'Type fichier';
	if(isset($_GET['url'])) {
	  $url = $_GET['url'];
	  $char='?';
	  while (list($key,$value) = each($_GET)) {
	    // on évite de retransmettre à SIEL les paramètres propres à ce script
	    if(($key != 'serial')&&
	       ($key != 'token')&&
	       ($key != 'type')&&
	       ($key != 'voix')&&
	       ($key != 'station')&&
	       ($key != 'Depart')&&
	       ($key != 'Arrivee')&&
	       ($key != 'Delai')&&
	       ($key != 'url')) {
	      $url=$url.$char.$key.'='.$value;
	      $char='&';
	    }
	  }
	  $var = file_get_contents($url);
	  $lines = split("[\n]+", $var);
	  //print_r($lines);
	  $nbdatas=count($lines);
	  //echo 'Nbdatas='.$nbdatas;
	  for($i=$j=0;$i<$nbdatas;$i++) {
	    //echo $lines[$i];
	    $var=str_replace('type=','typetransport=',$lines[$i]);
	    $var=str_replace('Depart=','GareDepart=',$var);
	    $var=str_replace('Arrivee=','GareArrivee=',$var);
	    parse_str($var,$datas[$j]);
	    if(isset($datas[$j][url])) {
	      $char='?';
	      while (list($key,$value) = each($datas[$j])) {
		// on évite de retransmettre à SIEL les paramètres propres à ce script
		if(($key != 'serial')&&
		   ($key != 'token')&&
		   ($key != 'typetransport')&&
		   ($key != 'voix')&&
		   ($key != 'numLigne')&&
		   ($key != 'station')&&
		   ($key != 'GareDepart')&&
		   ($key != 'GareArrivee')&&
		   ($key != 'Delai')&&
		   ($key != 'url')) {
		  $datas[$j][url]=$datas[$j][url].$char.$key.'='.$value;
		  $char='&';
		}
	      }	      
	    }
	    if(isset($datas[$j][typetransport])) {
	      $j++;
	    }
	  }
	  $nbdatas=$j;
	  //echo $nbdatas.'<hr />';
	  //print_r($datas);
	} else {
	  $textePourLeLapin = 'Il faut me dire quel fichier je dois lire avec l\'option U R L !';
	  $nbdatas=0;
	}
      } else {
	$datas[0] = array('typetransport' => $typetransport,
			  'station' => (isset($_GET['station'])?$_GET['station']:'undefined'),
			  'GareDepart' => (isset($_GET['Depart'])?$_GET['Depart']:'undefined'),
			  'GareArrivee' => (isset($_GET['Arrivee'])?$_GET['Arrivee']:'undefined'),
			  'Delai' => (isset($_GET['Delai'])?$_GET['Delai']:0),
			  'numLigne' => (isset($_GET['numLigne'])?$_GET['numLigne']:''),
			  'url' => (isset($_GET['url'])?$_GET['url']:'undefined'));
	if( $datas[0][url] != 'undefined' ) {
	  $char='?';
	  while (list($key,$value) = each($_GET)) {
	    // on évite de retransmettre à SIEL les paramètres propres à ce script
	    if(($key != 'serial')&&
	       ($key != 'token')&&
	       ($key != 'type')&&
	       ($key != 'voix')&&
	       ($key != 'station')&&
	       ($key != 'Depart')&&
	       ($key != 'Arrivee')&&
	       ($key != 'Delai')&&
	       ($key != 'url')) {
	      $datas[0][url]=$datas[0][url].$char.$key.'='.$value;
	      $char='&';
	    }
	  }
	}
	$nbdatas=1;
      }
      for($idata=0;$idata<$nbdatas;$idata++) {
	//print_r($datas[$idata]);
	$typetransport=$datas[$idata][typetransport];
	switch($typetransport) {
	case 'rer':
	  $textDebut = 'Réseau RER';
	  $textNormal = 'Le trafic est normal sur l\'ensemble des lignes de RER.';
	  $textNormal2 = 'Trafic normal sur l\'ensemble des lignes de RER.';
	  $cat=2;
	  break;
	case 'tramway':
	  $typetransport = 'bus';
	case 'bus':
	  $textDebut = 'Réseau Bus et Tramway';
	  $textNormal = 'Le trafic est normal sur les lignes de bus et Tramway.';
	  $textNormal2 = 'Trafic normal sur l\'ensemble des lignes de bus et Tramway.';
	  $cat=3;
	  break;	  
	case 'sncf':
	  $textDebut = 'Train de banlieue';
	  $textNormal = 'Le trafic est normal sur l\'ensemble des lignes de bus et Tramway.';
	  $textNormal2 = 'Trafic normal sur l\'ensemble des lignes de bus et Tramway.';
	  $cat=4;
	  break;
	case 'transilien':
	  $cat=0;
	  break;
	case 'siel':
	  $cat=5;
	  break;
	case 'sytadin':
	  $cat=6;
	  break;
	case 'velib':
	  $cat=7;
	  break;
	case 'meteo':
	  $cat=8;
	  break;
	default:
	  $typetransport = 'metro';
	  $textDebut = 'Réseau Métro';
	  $cat=1;
	  $textNormal = 'Le trafic est normal sur l\'ensemble des lignes de métro.';
	  $textNormal2 = 'Trafic normal sur l\'ensemble des lignes de métro.';
	}
	
	switch ($cat) {
	case 0:
	  // Utilisation du site transilien
	  if(($datas[$idata][GareDepart] != 'undefined')&&($datas[$idata][GareArrivee] != 'undefined'))
	    { // 362 100
	      // 364 26
	      $GareDepart = $datas[$idata][GareDepart];
	      $GareArrivee = $datas[$idata][GareArrivee];
	      $Date = date('d/m/Y', time() - 3 * 3600); // De 0h à 3h du matin, il faut prendre les horaires du jour précédent.
	      //echo "$Date";
	      $var = file_get_contents('http://www.abcdtrains.com/');
	      if(strpos($var,'Ce site fournit des informations en cas de perturbations') !== FALSE) {
		$textePourLeLapin = $textePourLeLapin.' Pas de perturbation SNCF.';
	      } else {
		$var = file_get_contents('http://www.abcdtrains.com/asp/FicheHoraire.asp?IDGareDep='.$GareDepart.'&IDGareArr='.$GareArrivee.'&Date='.$Date.'&VPatternSetIdx=1');
		$var = cut_comment($var,'<HTML>', '</TR>');
		$var = cut_comment($var,'<TR>', '</TR>');
		$var = cut_comment($var,'<TR>', '</TR>');
		$var = cut_comment($var,'<table ', '</table>');
		$var = cut_comment($var,'<tr>', '</tr>');
		$interestingvar = get_interesting($var, '<td align="center">', '</td>');
		if ( $interestingvar == '' ) {
		  // Problème de parsing.
		  // echo 'Problème de parsing de '.$var;
		  $textePourLeLapin = $textePourLeLapin.' Je n\'arrive pas à accéder au serveur SNCF.';	
		} else {
		  // Détecter lorsque tout est normal et le dire simplement.
		  // echo $interestingvar.'<hr />';
		  $predligne = cut_comment($interestingvar, '<td ', '<b>');
		  do {
		    $ligne = $predligne;
		    $predligne = cut_comment($ligne, '</b>', '<b>', '==');
		  } while ($ligne != $predligne);
		  
		  // echo $ligne.'<hr />';
		  do {
		    $ligne = $predligne;
		    $predligne = cut_comment($ligne, '==', ') ', '. ');
		    // echo $ligne.'<hr />';
		  } while ($ligne != $predligne);
		  
		  $ligne = str_replace('Le service est normal sur la ligne','Service normal sur',$ligne);
		  // echo $ligne.'<hr />';
		  
		  if(strpos($ligne,'Service normal') !== FALSE) {
		    $textePourLeLapin = $textePourLeLapin.'. '.$ligne;
		  } else { 
		    if(strpos($ligne,'perturbée') !== FALSE) {
		      $textePourLeLapin = $textePourLeLapin.' Trafic perturbé. ';
		    } else {
		      $textePourLeLapin = $textePourLeLapin.'. '.$ligne;
		    }
		    
		    // Il y a des lignes perturbées. On repart de $var.
		    //echo $var.'<hr />';
		    $var = cut_comment($var,'<tr>', '</tr>');
		    //echo $var.'<hr />';
		    $var = cut_comment($var,'<?xml ', '<B>');
		    $var = cut_comment($var,'</B>', '<a href', '<a href');
		    //echo $var.'<hr />';
		    $var = str_replace('<td>','',$var);
		    $var = str_replace('</td>','',$var);
		    $var = str_replace('</font>','',$var);
		    $var = str_replace('<font color="#f00000">','',$var);
		    //echo $var.'<hr />';
		    $predvar = str_replace('<font color="#f00000">','',$var);
		    //echo $var.'<hr />';
		    do {
		      $var = $predvar;
		      $predvar = cut_comment($var, '<a href', ')">', ':');	       
		    } while ($var != $predvar);	      
		    //echo $var.'<hr />';
		    do {
		      $var = $predvar;
		      $predvar = cut_comment($var, '<img ', ' />');	       
		    } while ($var != $predvar);
		    //echo $var.'<hr />';
		    do {
		      $var = $predvar;
		      $predvar = cut_comment($var, '</tr>', '<B>', '|');	       
		    } while ($var != $predvar);
		    $var = strip_tags($var);
		    $var = str_replace('\t','',$var);
		    $var = str_replace('\r','',$var);
		    $var = str_replace('\n','',$var);
		    $var = str_replace(' ','',$var);
		    $var = rawurlencode($var);
		    $var = str_replace('%0D','',$var);
		    $var = str_replace('%0A','',$var);
		    $var = str_replace('%A0','',$var);
		    $var = str_replace('%09','',$var);
		    $var = str_replace('%3A',':',$var);
		    $var = str_replace('%7C','/',$var);
		    //echo $var.'<hr />';
		    $hours = explode('/',$var);
		    $j=0;
		    for($i=0;$i<count($hours);$i++)
		      {
			$minutes=explode(':',$hours[$i]); // L'heure est dans la première case
			for($k=1;$k<count($minutes);$k++)
			  {
			    $horaire[$j] = $minutes[0]*60+$minutes[$k];
			    if ($minutes[0]<3)
			      $horaire[$j] += 24*60;
			    $j++;
			  }
		      }
		    $horaires = array_unique($horaire);
		    $heure = date('H')*60+date('i');
		    $heure += $datas[$idata][Delai];		  
		    $j = 0;
		    for($i=0;$i<count($horaires);$i++) {
		      if($horaires[$i]>$heure) {
			$prochains[$j]=$horaires[$i];
			$j++;
			if($j >= 3)
			  break;
		      }
		    }
		    if(count($prochains) > 0) {
		      $textePourLeLapin = $textePourLeLapin.'Prochains trains à ';
		      for($i=0;$i<count($prochains);$i++) {
			$h = intval($prochains[$i]/60);
			if ($h >= 24)
			  $h -= 24;
			$m = $prochains[$i]%60;
			$textePourLeLapin = $textePourLeLapin.' '.$h.' heure '.$m.'. ';
		      }
		    }
		  }
		  $textePourLeLapin = str_replace('CDG','Charles de Gaulle',$textePourLeLapin);
		}
	      }
	    } else {
	      $textePourLeLapin = $textePourLeLapin.' Il faudrait quand même me donner les numéros des gares de départ et d\'arrivée sur www.abcdtrains.com !';	    
	    }
	  break;
	case 1:
	case 2:
	case 3:
	case 4:
	  // Utilisation du site RATP
	  $textFin='</div>';
	  $numLigne = $dats[$i][numLigne];
	  
	  //$var = file_get_contents('http://wap.ratp.fr/siv/perturbation?cause=alerte&reseau='.$typetransport);
	  // L'adresse ci-dessus est filtrée (impossible de la lire depuis un serveur de Free)
	  $var = file_get_contents('http://www.ratp.info/orienter/trafic.php?cat='.$cat);
	  // On délimite la zone intéressante de la page.
	  //echo $var.'<hr />';
	  $interestvar = get_interesting($var, '<div id="contentZone">', '<div class="contentBloc">');	  
	  //$interestvar = ''; // Changement au niveau du site RATP
	  //echo $interestvar.'<hr />';

	  if ( $interestvar == '' ) {
	    // Problème de parsing.
	    // echo 'Impossible de trouver '.$textDebut.'.*'.$textFin.' - Problème de parsing de '.$var;
	    $textePourLeLapin = $textePourLeLapin.' Je n\'arrive pas à accéder au serveur RATP.';	
	    //$textePourLeLapin = $textePourLeLapin.' Le serveur RATP vient de changer : modification de nabazratp en cours.';	
	    $url = 'http://wap.ratp.fr/siv/perturbation?cause=alerte&reseau='.$typetransport;
	    echo '<a href="'.$url.'">'.$url.'</a><hr />';
	    $csess = curl_init($url);
	    $header  = array(
"Accept-Language: fr\r\n",
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n",
"Keep-Alive: 300\r\n",
"Connection: keep-alive\r\n"
);
	    curl_setopt($csess,CURLOPT_HTTPHEADER, $header);
	    curl_setopt($csess,CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.1) Gecko/20060601 Firefox/2.0.0.1 (nabazratp)');
	    curl_setopt($csess,CURLOPT_RETURNTRANSFER, TRUE);
	    $var = curl_exec($csess);
	    curl_close($csess);
	    echo $var.'<hr />';
	  } else {
	    // On extrait la date et l'heure, histoire de vérifier que le bulletin est à jour.
	    $interestvar = cut_comment($interestvar,'<div id="contentZone">','0;">');
	    $interestvar = cut_comment($interestvar,'</p>','<h5>','. ');
	    $interestvar = cut_comment($interestvar,'<div class="bloc"','jusqu\'à la fin');
	    //echo $interestvar.'<hr />';
	    $interestvar = strip_tags($interestvar);
	    // On enlève les espaces en trop.
	    $interestvar=str_replace('\n',' ',$interestvar);
	    $interestvar=str_replace('\r',' ',$interestvar);
	    $interestvar=str_replace('\t',' ',$interestvar);
	    $interestvar=str_replace('  ',' ',$interestvar);
	    $interestvar=str_replace('\' ','\'',$interestvar);
	    switch($typetransport) {
	    case 'sncf':
	      //$textePourLeLapin = $textePourLeLapin.'Problème sur les '.$textDebut.'.';
	      $interestvar = cut_comment($interestvar,'pour plus d\'infos', 'gare à gare.');
	      $interestvar = cut_comment($interestvar,'Pour plus d\'infos', 'gare par gare.');
	      $interestvar = cut_comment($interestvar,'Prochain point', '.');
	      $interestvar = cut_comment($interestvar,'Le point', '.');
	      $interestvar = str_replace('IdF','Île-de-France',$interestvar);
	      break;
	    case 'metro':
	      if ($numLigne != '') {
		if(strpos($interestvar,'Métro ligne '.$numLigne) !== FALSE) {
		  $textePourLeLapin = $textePourLeLapin.'Problème sur la ligne '.$numLigne.'.';
		} else {
		  // $textePourLeLapin = $textePourLeLapin.'perturbation de certains '.$textDebut.'.';
		  // $interestvar = ''; // On supprime : cela ne nous concerne pas
		}
	      } else {
		// $textePourLeLapin = $textePourLeLapin.'Problème sur les '.$textDebut.'.';
	      }
	      $interestvar = cut_comment($interestvar,'Prochain point', '.');
	      $interestvar = cut_comment($interestvar,'Le point', '.');
	      break;
	    default:
	      // $textePourLeLapin = $textePourLeLapin.'Problème sur les '.$textDebut.'.';
	      break;
	    }
	    $textePourLeLapin = $textePourLeLapin.$interestvar; 
	  }	  
	  break;
	case 5:
	  // Utilisation du SIEL de la RATP
	  // http://www8.ratp.info/horaires/index.php?etape=res_rer_ssotr&ligne=A&arr=3&dir=OUEST&libligne=St-Germain-en-Laye+.+Poissy+.+Cergy+.+Boissy-St-L%E9ger+.+Marne-la-Vall%E9e&libarr=CHATELET-LES-HALLES&libdir=St-Germain-en-Laye+.+Poissy+.+Cergy
	  // http://www8.ratp.info/horaires/index.php?etape=res_bustram_ssotr&reseau=TRAM&&ligne=T3&arr=T3_687_712&dir=A&libligne=PORTE%20IVRY%20/%20PONT%20DU%20GARIGLIANO&libarr=DESNOUETTES&libdir=PORTE%20IVRY
	  // http://www8.ratp.info/horaires/index.php?etape=res_bustram_ssotr&reseau=BUS&&ligne=80&arr=80_35&dir=R&libligne=PORTE%20DE%20VERSAILLES%20/%20MAIRIE%20DU%2018%20JULES%20JOFFRIN&libarr=CAMBRONNE-VAUGIRARD&libdir=MAIRIE%20DU%2018%20JULES%20JOFFRIN
	  // http://www8.ratp.info/Pivi/horaires.php?exec=horaires&cmd=ChoixLigneEtDirection&Profil=RATP&demande=Rechercher&ligne=6&arr=476&dir=Nation&libligne=6&libarr=Pasteur&libdir=Nation
	  // http://www8.ratp.info/horaires/index.php?etape=res_noct_ssotr&ligne=N13&arr=N13_19017&dir=R&libligne=MAIRIE+D%27ISSY+%2F+BOBIGNY-PABLO+PICASSO&libarr=PASTEUR-FALGUIERE&libdir=BOBIGNY-PABLO+PICASSO&reseau=NOCT
	  if($datas[$idata][url] != 'undefined') {
	    $url=$datas[$idata][url];
	    if(strpos($url,'Pivi') === FALSE)
	      $Pivi=FALSE;
	    else
	      $Pivi=TRUE;
	    //echo $url.'<hr />';
	    $var = file_get_contents($url);
	    if($var == '') // le site SIEL semble répondre de façon aléatoire
	      $var = file_get_contents($url);
	    if($var == '') {
	      $textePourLeLapin = $textePourLeLapin.' Je n\'arrive pas à accéder au serveur SIEL.';	
	    } else {
	      //echo $var.'<hr />';
	      // Comme d'hab, il s'agit d'isoler l'information pertinente
	      // Mais cela dépend du serveur interne de la RATP :-(
	      if($Pivi) {
		// Pivi est utilisé pour les lignes de métro
		$var = cut_comment($var,'<!DOCTYPE HTML PUBLIC', '<div class="bloc_horaires_passage">');
		$var = cut_comment($var,'</fieldset>','<!-- Action : ChoixLigneEtDirection -->');
		//echo $var.'<hr />';
		$var = cut_comment($var,'<br/>','/picts/moteur/ligne/m','Métro ligne ');
		$var = cut_comment($var,'.gif','<td>',', station ');
		$var = cut_comment($var,'</td>','Direction',', direction');
		//echo $var.'<hr />';
		if((strpos($var,'Service termine')!== false)&&(strpos($var,' min')=== false)) {
		  $textePourLeLapin = $textePourLeLapin.' '.cut_comment($var,'</div>','NOP').' Service terminé.';
		} else {
		  $var = cut_comment($var,'</div>','<div style="float:left;">','. Temps d\'attente : ');
		  //echo $var.'<hr />';
		  $predvar = cut_comment($var,'</tbody>','NOP');
		  do {
		    $var = $predvar;
		    $predvar = cut_comment($var, '</div>', '<div style="float:left;">', ',');	       
		  } while ($var != $predvar);	      
		  //echo $var.'<hr />';
		  $var=str_replace('Train retarde ,','Train retardé, ',$var);
		  $var=str_replace('Train arrete ,','Train arrêté, ',$var);
		  $var=str_replace('Train a l\'approche ,','',$var);
		  $var=str_replace('Train a quai ,','',$var);
		  $textePourLeLapin = $textePourLeLapin.'. '.str_replace('min','minutes', $var);
		}
	      } else {
		// SIEL est utilisé pour le reste des réseaux
		//echo $var.'<hr />';
		$var = cut_comment($var,'<html>', 'Les prochains passages ');
		$var = cut_comment($var,'Pour remettre','</html>');
		//echo $var.'<hr />';
		$var = cut_comment($var,'&agrave;','/picts/v_pivi/pi_picto/');
		$suivant = 'Arr&ecirc;t : ';
		//echo '<'.$suivant.'>'.$var.'<hr />';
		if(strpos($var,'p_rer_') === 0) {
		  $var=str_replace('p_rer_','RER ligne ',$var);
		  $suivant = 'Gare : ';
		} else if (strpos($var,'tram') === 0) {
		  $var=str_replace('tram','Tramway T',$var);	      
		} else if (strpos($var,'b') === 0) {
		  $var='Bus '.$var;
		  $var=str_replace('Bus b','Bus ',$var);
		}
		//echo '<'.$suivant.'>'.$var.'<hr />';
		$var = cut_comment($var,'.gif',$suivant,', arrêt ');
		//echo $var.'<hr />';
		$var = cut_comment($var,'<br>','Direction',', direction');
		//echo $var.'<hr />';
		if ($suivant == 'Gare : ') {
		  // Cas des RER
		  // echo $var.'<hr />';
		  if(strpos($var,'SONT MOMENTANEMENT INDISPONIBLES')!== false) {
		    $textePourLeLapin = $textePourLeLapin.' '.cut_comment($var,'</font>','NOP').' Informations indisponibles.';
		  } else {
		    $textePourLeLapin = $textePourLeLapin.' '.cut_comment($var,'</font>','NOP');
		    $var = cut_comment($var,'</font>','</table>');
		    $var = cut_comment($var,'<table ','</table>');
		    $var = cut_comment($var,'<table ','</table>');
		    // echo $var.'<hr />';
		    $predvar = get_interesting($var,'urlEncode(\'','</table>');
		    $predvar = cut_comment($predvar, 'urlEncod', '(\'');	       
		    do {
		      $var = $predvar;
		      //echo $predvar.'<hr />';
		      $predvar = cut_comment($predvar, '\'),\'mis\'', 'title="Liste des gares desservies">', ',');	       
		      //echo $predvar.'<hr />';		
		      $predvar = cut_comment($predvar, '</a>', '<span class="titre3">', ',');	       
		      //echo $predvar.'<hr />';		
		      $predvar = cut_comment($predvar, '</span>', 'urlEncode(\'', '+');	       
		    } while ($var != $predvar);	      
		    //echo $predvar.'<hr />';
		    $missions = explode('+',$var);
		    $j=0;
		    $prochains='';
		    for($i=0;$i<count($missions)-1;$i++)
		      {
			$passages=explode(',',$missions[$i]); // Le format est URL,mission,heure
			if(strpos($passages[2],'Train &agrave; ') === false) {
			  $prochains = $prochains.' Mission '.$passages[1].' à '.str_replace(':',' heure ',$passages[2]).' ';
			}
		      }
		    if($prochains != '') {
		      $textePourLeLapin = $textePourLeLapin.' Prochains passages :'.$prochains;
		    } else {
		      $textePourLeLapin = $textePourLeLapin.' Pas de passage prévu.';
		    }
		  }
		} else {
		  // cas des bus et tramways
		  $var = cut_comment($var,'</font>','class="titre4">',' ');
		  $var = cut_comment($var,'</span>','color="#000099">');
		  if (strpos($var, 'SERVICE TERMINE') !== false) {
		    $textePourLeLapin = $textePourLeLapin.' '.cut_comment($var,'</font>','NOP',' Le service est terminé.');
		  } else if (strpos($var, 'INFO INDISPO') !== false) {
		    $textePourLeLapin = $textePourLeLapin.' '.cut_comment($var,'</font>','NOP',' Information non disponible.');
		  } else {
		    $var = cut_comment($var,'</font>','style="position:relative"  >',' Temps d\'attente : ');
		    // echo $var.'<hr />';
		    $predvar = cut_comment($var,'</table>','NOP');
		    do {
		      $var = $predvar;
		      $predvar = cut_comment($var, '</div>', 'tyle="position:relative"  >', ',');	       
		    } while ($var != $predvar);	      
		    $var=str_replace(' 0 mn,','bus en approche, ',$var);
		    $var=str_replace('A l\'arret,','bus à l\'arrêt, ',$var);
		    $textePourLeLapin = $textePourLeLapin.' '.str_replace(' mn',' minutes', $var);
		  }
		}
	      }
	    }
	  } else {
	    $textePourLeLapin = $textePourLeLapin.' Il faut quand même me donner les horaires que tu veux que je te lise !';
	  }
	  break;
	case 6:
	  // Utilisation de SYTADIN
	  if($datas[$idata][url] != 'undefined') {
	    $url=$datas[$idata][url];
	    //echo $url.'<hr />';
	    //$var = file_get_contents($url);
	    //Sytadin exige un Accept-Language: fr
	    $csess = curl_init($url);
	    $header  = array(
"Accept-Language: fr\r\n",
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n",
"Keep-Alive: 300\r\n",
"Connection: keep-alive\r\n"
);
	    curl_setopt($csess,CURLOPT_HTTPHEADER, $header);
	    curl_setopt($csess,CURLOPT_RETURNTRANSFER, TRUE);
	    $var = curl_exec($csess);
	    curl_close($csess);
	    if($var === FALSE) {
	      $textePourLeLapin = $textePourLeLapin.' Je n\'arrive pas à accéder au serveur SYTADIN.';	
	    } else {
	      //echo '"'.$var.'"<hr />';	      
	      $var = cut_comment($var,'<html lang="fr">','<li>',' Itinéraire ');
	      $var = str_replace('<span class="gras">','', $var);
	      $var = cut_comment($var,'</span>.','<span class="gras grand">',' Durée ');
	      $var = str_replace('</span>','', $var);
	      $var = str_replace('mn',' minutes', $var);
	      $var = cut_comment($var,'- Fiabili','<tr class="td_pair">');
	      $var = cut_comment($var,'</table>','jusqu\'au bout !');
	      $interestvar = get_interesting($var, '<td class="td_left">', '</tbody>');
	      $var=cut_comment($var,'<td class="td_left">','jusqu\'au bout !');
	      //echo $var.'<hr />';	      
	      $var = rawurlencode($var);
	      //echo $var.'<hr />';
	      $var = str_replace('%0D%0A','',$var);
	      $var = str_replace('%09','',$var);
	      $var = str_replace('%0A','',$var);
	      $var = str_replace('%E9','é',$var);
	      $var = str_replace('%26agrave%3B','à',$var);
	      $var = str_replace('%28','(',$var);
	      $var = str_replace('%29',')',$var);
	      $var = str_replace('%27','\'',$var);
	      $var = str_replace('%20',' ',$var);
	      //echo $var.'<hr />';	      
	      $textePourLeLapin = $textePourLeLapin.$var.'.';
	      $var=cut_comment($interestvar,'<hr />','jusqu\'au bout !');
	      $var = str_replace('<tr class="td_impair">','|',$var);
	      $var = str_replace('<tr class="td_pair">','|',$var);
	      $var = str_replace('<td></td></tr>','',$var);
	      $var = str_replace('<td class="td_left">','/',$var);
	      $var = str_replace('<td class="td_right">','/',$var);
	      $var = str_replace('<td class="td_center">','/',$var);
	      $var = str_replace('jusqu\'Ã','/',$var);
	      $predvar=$var;
	      do {
		$var=$predvar;
		$predvar=cut_comment($var,'<!--','-->');
	      } while ($var != $predvar);
	      $var = str_replace('</td>','',$var);
	      //echo $var.'<hr />';	      
	      $var = rawurlencode($var);
	      //echo $var.'<hr />';	      
	      $var = str_replace('%0D%0A','',$var);
	      $var = str_replace('%09','',$var);
	      $var = str_replace('%0A','',$var);
	      $var = str_replace('%E9','é',$var);
	      $var = str_replace('%C3%A8','è',$var);
	      $var = str_replace('%C3%A9','é',$var);
	      $var = str_replace('%28','(',$var);
	      $var = str_replace('%29',')',$var);
	      $var = str_replace('%27','\'',$var);
	      $var = str_replace('%20',' ',$var);
	      $var = str_replace('%2F','/',$var);
	      $var = str_replace('%2C',',',$var);
	      $var = str_replace('%A0',' ',$var);
	      $var = str_replace('%7C','|',$var);
	      $var = str_replace('%26lt%3B','0,',$var); // Le signe < apparaît quand il y a moins de 1 minute. De toute façon on ne citera que les étapes plus longues qu'une minute.
	      //echo $var.'<hr />';
	      $etapes = explode('|',$var);
	      $var='';
	      for($i=0;$i<count($etapes);$i++)
		{
		  $etape = explode('/',$etapes[$i]);
		  // echo $etape[0].' '.$etape[1].' '.$etape[2].' '.$etape[3].' '.$etape[4].'<hr />';
		  if ( $etape[4] >= 1 ) {
		    $var = $var.',
 '.$etape[2];
		  }
		}
	      $textePourLeLapin = $textePourLeLapin.' par'.$var.'.';
	      $textePourLeLapin = str_replace('(A',' (intersection autoroute A',$textePourLeLapin);
	      $textePourLeLapin = str_replace('(BP',' (intersection BP',$textePourLeLapin);
	      $textePourLeLapin = str_replace('xA',' autoroute A',$textePourLeLapin);
	      $textePourLeLapin = str_replace('xBP',' BP',$textePourLeLapin);
	      $textePourLeLapin = str_replace('BP','périphérique',$textePourLeLapin);
	    }
	  } else {
	    $textePourLeLapin = $textePourLeLapin.' Il faut quand même me donner l\'itinéraire que tu veux que je te lise !';
	  }	  
	  break;
	case 7:
	  if($datas[$idata][station] != 'undefined') {
	    // Utilisation du script de mirlitone adapté à Velib'
	    $GLOBALS['station']=$datas[$idata][station];
	    //remplacer ici l'URL de listing de station
	    $cartoURL='http://www.velib.paris.fr/service/carto/';
	    //remplacer ici par l'URL de détail d'une station
	    $detailURL='http://www.velib.paris.fr/service/stationdetails/';

	    $current_tag='';
	    $dispo ='aucun';
	    $libre = 'aucun';
	    $total = 'aucun';
	    $stationName='inconnue';
	    $stationAddress='Adresse inconnue';
	    
	    //handler detail start
	    function start_tag($parser, $name){	 
	      $GLOBALS['current_tag'] = $name;
	      $GLOBALS['inside_data'] = true;
	    }
	  
	    //handler detail end      
	    function end_tag() {	    
	      $GLOBALS['current_tag'] = '';
	      $GLOBALS['inside_data'] = false;
	    } 
	    
	    //handler contenu detail
	    function contents($parser, $data){
	      switch ($GLOBALS['current_tag']) {
	      case "AVAILABLE":
		$GLOBALS['dispo']=$data;
		break;
	      case "FREE":
		$GLOBALS['libre']=$data;
		break;
	      case "TOTAL":
		$GLOBALS['total']=$data;	      
		break;
	      }
	      $GLOBALS['inside_data'] = true; 
	    }
	    
	    //handler liste de station
	    function start_tag_list($parser, $name, $attribs){	 
	      $currentName='';
	      $currentAddress='';
	      $good=0;
	      while (list($key, $val) = each($attribs)) {
		if($key=="NAME"){
		  $currentName=$val;
		}
		else if($key=="ADDRESS"){
		  if($good == 1) {
		    $GLOBALS['stationAddress']=$val;
		    return;
		  }
		}
		else if($key=="NUMBER"){
		  if($val==$GLOBALS['station']){
		    //it's the good one
		    $GLOBALS['stationName']=$currentName;
		    $good=1;
		  } else {
		    $good=0;
		  }
		}	 		 	
	      }
	    }
	  
	    //creation du parseur
	    $xml_parser  =  xml_parser_create();

	    //set du parseur suivant le modèle SAX
	    xml_set_element_handler($xml_parser, "start_tag_list", "end_tag"); 
	    
	    //on ouvre, on lit
	    $fh = fopen($cartoURL, 'r');
	    while (!feof($fh )) {
	      $theData .= fread($fh , 8192);
	    }
	    
	    if(!(xml_parse($xml_parser, $theData, feof($fh)))){
	      $textePourLeLapin = $textePourLeLapin.'Erreur de parsing ligne'.xml_get_current_line_number($xml_parser);
	    } else {
	    
	      xml_parser_free($xml_parser);
	      
	      //idem à plus haut
	      $xml_parser  =  xml_parser_create();
	      
	      xml_set_element_handler($xml_parser, "start_tag", "end_tag"); 
	      xml_set_character_data_handler($xml_parser, "contents");
	      
	      $fh = fopen($detailURL.$station, 'r');
	      $theData = fread($fh, 300);
	      
	      if(!(xml_parse($xml_parser, $theData, feof($fh)))){
		$textePourLeLapin = $textePourLeLapin.'Erreur de parsing station ligne'.xml_get_current_line_number($xml_parser);
	      } else {
	    
		xml_parser_free($xml_parser);
		
		//message généré en fonction des détails
		$message =  "Station velib ". $stationName .', '.$stationAddress . ", il y a ".$libre." bornettes de libres et ".$dispo." vélos disponibles.";
		
		fclose($fh); 
		$textePourLeLapin = $textePourLeLapin.$message;
	      }
	    }
	  } else {
	    $textePourLeLapin = $textePourLeLapin.' Il faut quand même me donner la station Velib que tu veux que je te donne !';
	  }	  
	  break;
	case 8:
	  $Date = date('H', time());
	  //echo 'Heure : '.$Date.' Delai : '.$datas[$idata][Delai].'<hr />';
	  if($Date >= $datas[$idata][Delai])
	    $day=1;
	  else
	    $day=0;
	  $url='http://zcripts.com/zcripts/zm/ze_meteo.php?token='.$MonToken.'&sn='.$MonSerial.'&city=Paris&num=030121&hm=1&day='.$day.'&delay=25&det=&voice=';
	  //echo $url.'<hr />';
	  $var = file_get_contents($url);
	  
	  //$var = get_interesting($var,'tts=','au bout');
	  //$var = cut_comment($var,'tts','=');
	  //echo $var.'<hr />';
	  //$var = urldecode(utf8_decode($var));
	  //echo $var.'<hr />';
	  //$textePourLeLapin = $textePourLeLapin.$var;
	  break;
	}
      }
      if(isset($_GET['voix']))
	{
	  $MaVoix = $_GET['voix'];
	} else {
	  $MaVoix = 'FR-Anastasie';
	}
      //On envoie le texte au lapin
      $url ='http://api.nabaztag.com/vl/FR/api.jsp?token='.$MonToken.'&sn='.$MonSerial.'&ttlive=500&voice='.$MaVoix.'&tts='.urlencode(utf8_encode(html_entity_decode(stripslashes(trim($textePourLeLapin))))).'';
      //echo $url;
      if("$MonSerial" != "s") {
	file_get_contents($url,false);
      } else {
	echo 'Le lapin dirait : <br />'.$textePourLeLapin.'<hr />'.$url;
      }
    }	
}
?>
<img src="http://perso0.free.fr/cgi-bin/wwwcount.cgi?df=nabazparis.dat&dd=garamnd" alt="compteur de requêtes">