Appels manqués sur ma FreeBox V6

Avec  les Freebox nous avons une interface web a l’adresse : http://mafreebox.free.fr. Beaucoup d’informations sont disponibles en particulier dans « téléphone – Journal d’appels » sont affichés les appels manqués, et oui tout le monde ne laisse pas un message sur le répondeur. personnellement j’ai voulu me faire une petite interface pour me signaler ces appels manqués, uniquement cela et sans login.

Puisque je suis principalement sous LMDE, j’ai choisi conky pour l’affichage et un flux RSS pour les données. Avec RSS je peut aussi choisir simplement mon navigateur pour l’affichage (pour les jours ou je suis sous Windows).
Un autre choix, aurait été de développer une petite appli android…

#!/usr/bin/php
<?php

$server='http://mafreebox.freebox.fr/';
$password=isset($_GET['pass'])? $_GET['pass'] : 'monpasspar_defaut';

// charge une page et retourne le contenu
function getPage($url){
    global $server,$ch;
    curl_setopt ($ch, CURLOPT_URL, $server.$url );
    return curl_exec ( $ch );
}

$ch = curl_init() ;
$myfile = "/tmp/cookiefile.txt" ;
curl_setopt($ch, CURLOPT_COOKIEJAR, $myfile) ;
curl_setopt($ch, CURLOPT_HEADER, false) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;

// je me log
getPage('login.php?'."login=freebox&passwd=$password");

J’ai fait au plus simple, j’ai utilisé curl, que j’utilise dans la seule fonction du script : getPage qui me retourne normalement le contenu brut (html) de l’url passée en paramètre.

Maintenant il faut interpréter le résultat de la requête, la le plus simple est d’utiliser des regex, comme :

$html=getPage('settings.php?page=conn_status');
if (preg_match('/"conn_ipaddr">+(?P<ip>.*?)\<+/',$html,$matchs))
    $freebox['ip']=$matchs['ip'];
if (preg_match('/"conn_bytes_down">+(?P.*?)\<+/',$html,$matchs))
     $freebox['recu']=$matchs['recu'];
if (preg_match('/"conn_bytes_up">+(?P.*?)\<+/',$html,$matchs))
    $freebox['envoi']=$matchs['envoi'];

la j’ai récupéré mon adresse ip (fixe), et la taille des flux de données

$html=getPage('settings.php?page=nas_storage');
if (preg_match('/Espace libre :+(?P<libre>.*)<+/',$html,$matchs))
    $freebox['libre']=$matchs['libre'];

l’espace encore libre sur mon disque dur.

Pour les appels manqués, je vais utiliser plutôt Xpath

$html=getPage('settings.php?page=phone_calls');
$dom = new DOMDocument;
@$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DOMXpath($dom);
$matchs = $xpath->query('//table[@class="bloc"]//tr[@id]/td[text()="appel manqué"]');

$appels=array();
foreach ($matchs as $match) {
    $ligne=$match->parentNode;
    if ($ligne instanceof DOMNode){ 
	    $appel= new stdClass;
    	$appel->date=$ligne->firstChild->nodeValue;
    	$appel->tel=$match->previousSibling->previousSibling->nodeValue;
    	if (count($appels)>4) break;
    	$appels[]=$appel;
	}
}

$freebox['appels']=$appels;

curl_close($ch);

voila, toutes mes infos sont dans la tableau $freebox[], il ne reste plus qu’a afficher ce que nous souhaitons :

//nous sommes en france :)  mais pour une sortie RSS
function dateFR2Time($date){
    $mois=array('','janvier','février','mars','avril','mai','juin','juillet','aout','Septembre','octobre','novembre','décembre');
  list($jour, $day, $month, $year) = explode(' ', $date);
  $month=(int)array_search($month,$mois);
  return date( 'r', @mktime(0, 0, 0, $month, $day, date('Y') ));
}

$html='<channel&gp;<title>Ma FreeBox</title><link></link><description></description>';
foreach($freebox['appels'] as $appel){
    $html.='<item><title>'.$appel->tel.' '.$appel->date.'</title><description>appel manqué</description><pubDate>'.dateFR2Time($appel->date).'</pubDate></item>';
}
$html.='<item><title>ip</title><description>'.$freebox['ip'].'</description></item>';
// ...
//$html.='Allumée depuis'.$freebox['depuis'].'';

$html.='</channel>';
$html='<!--?xml version="1.0" encoding="utf-8"?--><rss version="2.0">'.$html.'</rss>';

header("Content-type: application/rss+xml");
echo $html;

ou, une sortie directe dans conky

${color4}${offset 20}Appels manqués${offset}${color}
<?php
foreach($freebox['appels'] as $appel){
    echo ''.$appel->tel."\t".$appel->date."\n";
}

Dans un script conky il est possible de charger directement un flux RSS

${color1}${font Ubuntu:size=12:bold}planet-php.fr${font}${color}
${rss http://planete-php.fr/rss.php 800 item_titles 6}

${color1}${font Monospace:size=12:bold}mafreebox.freebox.fr${font}${color}
${execpi 120 php ~/.conky/freebox.php}

 

 

Share Button

Vous devriez aimer...

1 Response

  1. martin dit :

    genial, je vais tester cela!

    Pourrais tu me refiler le code en .PHP sur tonton_bens@yahoo.fr ?

    Par avance merci

    Amicalement