Désolé j'aurai du le publier ici :
Bonjour,
Ci après vous trouverez une application freeboxOS, composée de 2 scripts permettant d'ajouter les nom, prénoms, adresses, cp, ville,tél des numéros présents dans le journal des appels de la freebox, comme ça plus besoin de les rentrer manuellement (bien entendu si les coordonnées sont dispo sur l'annuaire inversé des pagesjaunes);
Cette application nécessite PHP avec curl, CasperJS et la ClassePhpFreebox de DjMomo.
https://github.com/DjMomo/ClassePhpFreebox http://casperjs.org/ http://fr2.php.net/downloads.php Ils ont été testés sur ubuntu, windows XP.
Dans un premier temps l'application doit être executée en local, apres vous pourrez l'utiliser sur un serveur distant.
Ensuite vous pourrez l'utiliser en tache CRON ou lanceur de tache sur XP, tout se fera automatiquement.
C'est une premiere version donc peut etre des améliorations seront necessaire.
Ali
le script PHP : index.php
- Code : Tout sélectionner
// Abys 21/01/2014
require 'freebox.class.php';
// A modifier en fonction de votre config
DEFINE('SCRIPT' ,'./includes/casperjs/bin/casperjs annuaire.js');
DEFINE('URL','http://www.pagesjaunes.fr/pagesblanches/aquiestcenumero.do');
$config = array (
'url' => 'http://mafreebox.freebox.fr',
'port' => 80,
'app_id' => 'AnnuaireInverse',
'app_name' => 'Annuaire inversé',
'app_version' => '1.0',
'server_name' => 'Abys'
);
$freebox = new apifreebox($config);
$call = new Calls_Contacts($freebox);
// On recupere la liste des appels
$contacts = $call->GetCallsList();
// et on supprime les doublons
$contacts['result'] = unique_sort($contacts['result'],'number');
// On recherche le tel sur les pagesjaunes
if ($contacts['success'] == 1) {
foreach ($contacts['result'] as $c => $v) {
// On nettoie le numero de tel
$v['number'] = preg_replace("/^\+33/", "", $v['number']);
$v['number'] = preg_replace("/\W|_/", "", $v['number']);
// On enleve les mobiles
$ind = substr($v['number'],0,2);
if ($ind != '06' && $ind != '07' && strlen($v['number']) == 10) {
// On ne prend que les appels sans contact_id, avec un tel et qui n'a pas deja ete recherché
if ($v['contact_id'] == 0 && $v['number'] != "" && $v['new'] != true) {
echo "Tel a rechercher : ".$v['number']."\n";
echo "URL : ".URL.' '.$v['number']."\n";
// On lance le script CasperJS
$result = shell_exec(SCRIPT . ' ' . URL . ' ' .$v['number']);
echo "Résultat de la recherche : $result \n";
// Si on trouve un résultat on l'enregistre dans l'annuaire freebox
if ($result!="") {
insertContact($call, json_decode($result),$v['number']);
} else {
// Si pas de résultat dans les pagesjaunes, on flag l'appel pour ne plus le rechercher
$call->UpdateCallEntry( $v['id'], array('new'=>true) );
}
echo "\n"; // pour la mise en forme
}
}
}
}
function insertContact($call, $contact,$tel) {
// On recherche la rue, code postal, ville
preg_match("/(.*)([0-9]{5})([^|]*)/", $contact->street, $matches);
// On créer le contact
$NomPrenom = explode (' ', $contact->display_name);
// Si on a 2 occurence, on dispatche dans nom et prénom
if (count($NomPrenom) == 2) {
$newContact['last_name'] = $NomPrenom[0];
$newContact['first_name'] = $NomPrenom[1];
} else {
$newContact['last_name'] = "";
$newContact['first_name'] = "";
}
// Attention visiblement il y a des limites en nombre de caracteres
$newContact['display_name'] = substr($contact->display_name,0,64);
$newContact['company'] = "";
$newContact['photo_url'] = "";
$newContact['birthday'] = null;
$newContact['notes'] = "";
$newContact['display_name_pretty'] = "";
$newContact['display_name_pretty_lower'] = "";
// On ajoute le contact
$result = $call->CreateContact($newContact);
if ($result['success'] == 1) {
// On creer le ContactNumber
$ContactId = $result['result']['id'];
$ContactTel['contact_id'] = $ContactId;
$ContactTel['number'] = $tel;
$ContactTel['type'] = 'fixed';
$result = $call->CreateContactNumber($ContactTel);
// On creer le ContactAddress
if ($result['success'] == 1) {
preg_match("/^([0-9]){0,4}/", $matches[1], $num);
if (count($num) > 0) {
$numero = $num[0];
$matches[1] = str_replace($numero,"",$matches[1]);
} else {
$numero = "0";
}
$ContactAddress['type'] = 'home';
$ContactAddress['contact_id'] = $ContactId;
$ContactAddress['number'] = trim($numero);
$ContactAddress['street'] = trim($matches[1]);
$ContactAddress['street2 '] = null;
$ContactAddress['zipcode'] = trim($matches[2]);
$ContactAddress['city'] = trim($matches[3]);
$ContactAddress['country '] = null;
$result = $call->CreateContactAddress($ContactAddress);
if ($result['success'] == 1) {
echo "Contact enregistré avec succès\n";
} else {
echo "Erreur impossible de créer l'adresse\n";
}
} else {
echo "Erreur impossible de créer le téléphone\n";
}
} else {
echo "Erreur impossible de créer le contact\n";
}
}
// Suppression des doublons dans un array
function unique_sort($arrs, $id) {
$unique_arr = array();
$ret = array();
foreach ($arrs AS $k=>$arr) {
if (!in_array($arr[$id], $unique_arr)) {
$unique_arr[] = $arr[$id];
$ret[$k] = $arr;
}
}
sort($ret);
return $ret;
}
Le script CasperJS : annuaire.js
- Code : Tout sélectionner
// Abys 21/01/2014
var system = require('system');
var utils = require('utils');
var casper = require('casper').create({
pageSettings: {
// clientScripts: ['includes/jquery.min.js'],
javascriptEnabled : true,
loadImages: false,
loadPlugins: true
},
logLevel: "debug",
verbose: false,
userAgent : 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
});
if (casper.cli.args.length == 2) {
var page = require('webpage').create();
var url = casper.cli.get(0);
var phone = casper.cli.raw.get(1);
casper.start(url, function() {
this.fill('form#searchFormAITop', { foneNumber: phone }, false);
this.click('#btnValidSearch');
this.wait(2000, function() {
});
});
casper.run(function() {
if (this.exists('div[class=visitCardContent]')) {
var oDIVs = this.evaluate(function() {
return __utils__.findOne('div[class=visitCardContent]').innerHTML;
});
var coord = new Object();
this.page.content = oDIVs;
if (this.exists('h2[class^=titleMain]')) {
coord.display_name = this.fetchText('h2[class^=titleMain] span:first-child').replace(/(^\s+|\s+$)/g, '');
if (coord.display_name == "") {
coord.display_name = this.fetchText('h2[class^=titleMain] :first-child').replace(/(^\s+|\s+$)/g, '');
}
}
oPs = this.evaluate(function() {
return __utils__.findOne('p.itemAdresse').innerHTML;
});
coord.street = oPs.replace('\n', '');
coord.street = coord.street.replace(/(^\s+|\s+$)/g, '');
this.echo(JSON.stringify(coord));
}
this.exit();
});
} else {
casper.echo("Manque d'arguments");
casper.exit();
}