2013-07-24 12:52:41 +02:00
< ? php
session_start (); //Sessions are used to limit the ajax need and the communication between server and velib server (velib servers will block you if you make too many requests).
?>
<! DOCTYPE html >
< html lang = " fr " >
< head >
< meta charset = " utf-8 " >
< title > Vélibs à proximité </ title >
< meta name = " description " content = " " >
< meta name = " author " content = " phyks " >
< link rel = " shortcut icon " href = " favicon.ico " >
< link rel = " stylesheet " href = " main.css " type = " text/css " media = " screen " >
< link rel = " stylesheet " href = " leaflet.css " />
<!-- [ if lte IE 8 ] >
< link rel = " stylesheet " href = " leaflet.ie.css " />
<! [ endif ] -->
< script src = " leaflet.js " ></ script >
< script type = " text/javascript " src = " Polyline.encoded.js " ></ script >
< script type = " text/javascript " src = " js.js " ></ script >
</ head >
< body >
< h1 >< a href = " index.php " > Vélibs à proximité </ a ></ h1 >
< ? php
if ( ! is_file ( 'data/data' )) //First run
{
//Define a new synchronisation code
$code_synchro = substr ( sha1 ( rand ( 0 , 30 ) . time () . rand ( 0 , 30 )), 0 , 10 );
file_put_contents ( 'data/data' , base64_encode ( gzdeflate ( serialize ( array ( $code_synchro , '' ))))); //Save it in data/data file
$_GET [ 'code' ] = $code_synchro ;
echo " <p>
Définition du code de synchronisation .< br />
Vous pouvez désormais mettre à jour la liste des stations en visitant l ' adresse suivante ( update URL ) :< br />
< a href = 'http://" . $_SERVER["SERVER_NAME"].$_SERVER[' REQUEST_URI ']."?update=1&code=".$code_synchro."' > http :// " . $_SERVER["SERVER_NAME"] . $_SERVER['REQUEST_URI'] . " ? update = 1 & code = " . $code_synchro . " </ a >
</ p >
< p >
Il est possible d ' automatiser la tâche via une tâche cron . Par exemple ( see README ) :< br />
* * * * * wget - q - O < a href = 'http://" . $_SERVER["SERVER_NAME"].$_SERVER[' REQUEST_URI ']."?update=1&code=".$code_synchro."' > http :// " . $_SERVER["SERVER_NAME"] . $_SERVER['REQUEST_URI'] . " ? update = 1 & code = " . $code_synchro . " </ a > #Commande de mise a jour des stations de velib
</ p > " ;
}
if ( ! empty ( $_GET [ 'update' ]) || ! empty ( $code_synchro )) //If we want to make an update (or first run)
{
if ( empty ( $code_synchro ) && is_file ( 'data/data' )) //If not first run, get the synchronisation code from data file
{
$data = unserialize ( gzinflate ( base64_decode ( file_get_contents ( 'data/data' ))));
$code_synchro = $data [ 0 ];
}
if ( ! empty ( $_GET [ 'code' ]) && $_GET [ 'code' ] == $code_synchro ) //Once we have the code and it is correct
{
$stations_xml = simplexml_load_file ( 'http://www.velib.paris.fr/service/carto' );
$liste_stations = $stations_xml -> markers -> marker ; //Get the stations list
foreach ( $liste_stations as $station )
{
$stations [] = array ( 'name' => htmlentities (( string ) $station [ 'name' ]), 'id' => ( int ) $station [ 'number' ], 'address' => htmlentities (( string ) $station [ 'fullAddress' ]), 'lat' => ( float ) $station [ 'lat' ], 'lng' => ( float ) $station [ 'lng' ], 'open' => ( int ) $station [ 'open' ], 'bonus' => ( int ) $station [ 'bonus' ], 'free' => 0 , 'available' => 0 , 'updated' => 0 );
}
file_put_contents ( 'data/data' , base64_encode ( gzdeflate ( serialize ( array ( $code_synchro , $stations ))))); //And put the content in the data file
echo " <p>Mise à jour de la liste des stations effectuée avec succès (Update successful).</p> " ;
}
else
{
echo " <p>Mauvais code de vérification (Error : bad synchronisation code). Veuillez réessayer la mise à jour. Se référer au README pour plus d'informations sur la mise à jour.</p> " ;
}
echo " <p><a href='index.php'>Retourner à l'application (Back to index)</a></p> " ;
}
else
{
?>
< div id = " see_map " ></ div >
< div id = " stations " ></ div >
< ? php
if ( ! empty ( $_GET [ 'map' ]))
{
?>
< div id = " map " ></ div >
< ? php
$param = ( ! empty ( $_GET [ 'available' ])) ? 'available' : 'free' ;
echo " <p><a href='index.php? " . $param . " =1'>← Retour à la liste</a></p> " ;
}
if ( ! empty ( $_GET ))
{
echo " <hr/> " ;
}
?>
< div id = " position " >
2013-08-01 14:19:35 +02:00
< form action = " " method = " get " >
< p >
< label for = " position " > Chercher autour de :</ label >< br />
< input type = " text " name = " position " id = " position " />
</ p >
< p >
< input type = " submit " value = " Chercher " />
</ p >
< ? php
foreach ( $_GET as $GET => $param )
{
2013-08-01 14:29:31 +02:00
if ( $GET != 'position' )
echo '<input type="hidden" name="' . htmlspecialchars ( $GET ) . '" value="' . htmlspecialchars ( $param ) . '"/>' ;
2013-08-01 14:19:35 +02:00
}
?>
</ form >
2013-07-24 12:52:41 +02:00
</ div >
< hr />
< p id = " thanks " > Map is handled thanks to the < a href = " http://leafletjs.com/ " > Leaflet </ a > library , using © < a href = " http://osm.org/copyright " > OpenStreetMap </ a > contributors tiles . Reverse geolocation ( Nominatim ) are provided by the < a href = " http://www.mapquest.com/ " alt = " MapQuest icon " > MapQuest </ a > < img src = " http://developer.mapquest.com/content/osm/mq_logo.png " > open API . Routes are provided by < a href = 'http://project-osrm.org/' > the OSRM project </ a > ( OSRM is a free and open source program under GNU Affero GPL ) .</ p >
< p id = " suggestions " > N 'hésitez pas à m' envoyer vos suggestions à < a href = " mailto:webmaster@phyks.me " > webmaster @ phyks . me </ a >.</ p >
</ body >
</ html >
< ? php
}
?>