Created
May 2, 2012 20:04
-
-
Save dandelionmood/2579869 to your computer and use it in GitHub Desktop.
API Freebox
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Classe de connexion à la Freebox. | |
* | |
* N'hésitez pas à la surclasser pour définir vos propres méthodes s'appuyant | |
* sur celles qui sont présentes ici. | |
* | |
* Exemple d'utilisation : | |
* <?php | |
* require('freebox_client.class.php'); | |
* $freebox = new FreeboxClient('http://10.0.0.2', 'freebox', 'monmdp'); | |
* | |
* // Listons le contenu du disque dur interne de la Freebox. | |
* $contenu = $freebox->interroger_api( 'fs.list', array('/Disque dur') ); | |
*/ | |
class FreeboxClient | |
{ | |
private $url_serveur; | |
private $identifiant; | |
private $mot_de_passe; | |
private $cookie; | |
/** | |
* Constructeur classique | |
* @param string URL de votre freebox | |
* @param string Identifiant de connexion (saisir «freebox» par défaut) | |
* @param string Votre mot de passe | |
*/ | |
public function __construct( $url_serveur, $identifiant, $mot_de_passe ) | |
{ | |
// On assigne les paramètres aux variables d'instance. | |
$this->uri = $url_serveur; | |
$this->identifiant = $identifiant; | |
$this->mot_de_passe = $mot_de_passe; | |
// Connexion automatique puis récupération du cookie. | |
$this->cookie = $this->recuperer_cookie(); | |
} | |
/** | |
* Interroger l'API de la Freebox. | |
* @param string le nom de la méthode à appeler (ex. conn.status) | |
* @param array paramètres à passer | |
* @return mixed le retour de la méthode appelée. | |
*/ | |
public function interroger_api( $methode, $parametres = array() ) | |
{ | |
// On détermine la page à appeler en fonction du nom de la méthode. | |
$page_a_appeler = explode('.', $methode); | |
$page_a_appeler = "{$page_a_appeler[0]}.cgi"; | |
// Initialisation de la connexion avec CURL. | |
$ch = curl_init(); | |
// En cas de problèmes, vous pouvez décommenter ces lignes | |
//curl_setopt($ch, CURLOPT_HEADER, 1); | |
//curl_setopt($ch, CURLOPT_VERBOSE, 1); | |
curl_setopt($ch, CURLOPT_URL, $this->uri.'/'.$page_a_appeler); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
curl_setopt($ch, CURLOPT_POST, 1); | |
// On passe le cookie à la requête, c'est important. | |
curl_setopt($ch, CURLOPT_COOKIE, 'FBXSID='.$this->cookie); | |
curl_setopt($ch, CURLOPT_HTTPHEADER, array( | |
'Content-Type: application/json' | |
)); | |
// On respecte le formalisme JSON/RPC | |
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array( | |
'jsonrpc' => '2.0', | |
'method' => $methode, | |
'params' => $parametres | |
))); | |
$retour_curl = curl_exec($ch); | |
curl_close($ch); | |
// On essaye de décoder le retour JSON. | |
$retour_json = json_decode( $retour_curl, true ); | |
// Gestion minimale des erreurs. | |
if( $retour_json === false ) | |
throw new Exception("Erreur dans le retour JSON !"); | |
if( isset($retour_json['error']) ) | |
throw new Exception( json_encode($retour_json) ); | |
// Ce qui nous intéresse est dans l'index «result» | |
return $retour_json['result']; | |
} | |
/** | |
* Récupération du cookie de session. | |
* @return l'identifiant de la session. | |
*/ | |
private function recuperer_cookie( ) | |
{ | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_URL, $this->uri.'/login.php'); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
// On doit lire le header pour récupérer le cookie, il va donc nous | |
// falloir le retourner. | |
curl_setopt($ch, CURLOPT_HEADER, 1); | |
// On se connecte via ces deux paramètres. | |
curl_setopt($ch, CURLOPT_POST, 1); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, array( | |
'login' => $this->identifiant, | |
'passwd' => $this->mot_de_passe | |
)); | |
$r = curl_exec($ch); | |
curl_close($ch); | |
// Récupération du cookie dans les entêtes à l'aide d'une expression | |
// régulière. | |
$ptn = '/FBXSID=\"([^"]*)/'; | |
preg_match($ptn, $r, $matches); | |
// En cas de problème, on jette une exception. | |
if( count($matches) != 2 ) | |
throw new Exception("Pas de cookie retourné !"); | |
// On retourne l'identifiant de la session. | |
return $matches[1]; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Inclusion de la classe FreeboxClient | |
require('FreeboxClient.classe.php'); | |
// Connectez-vous en utilisant vos identifiants (le login est freebox par défaut). | |
$freebox = new FreeboxClient('http://mafreebox.fr', 'freebox', 'monmdp'); | |
// Listons maintenant le contenu du disque dur interne de la Freebox. | |
$contenu = $freebox->interroger_api( 'fs.list', array('/Disque dur') ); | |
print_r( $contenu ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
merci pour ce code. Ca m'a bien servi pour récupérer les graph RRD. J'ai mis en place un dépot GITHUB avec une API assez complète pour langage PHP + Ruby : https://github.com/mqu/mafreebox ; y'a plus qu'à coder. A vos claviers.