Abys (Auteur du topic)
Hobbit de L'Univers

Inscrit le: 21 Jan 2014 Messages: 2
|
Abys (Auteur du topic), Posté le: Mar 21 Jan 2014, 13:00 Sujet du message: Application Freebox Contacts Automatique
Application Freebox Contacts Automatique
96470
89763
|
|
|
Bonjour,
Ci après vous trouverez une application Freebox OS, 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
https://casperjs.org/
https://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 être des améliorations seront necessaire.
Ali
le script PHP : index.php
Code: |
// 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 déjà 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: |
// 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();
}
|
|
|
Domotifred
Hobbit de L'Univers

Inscrit le: 16 Mar 2014 Messages: 1
|
Domotifred, Posté le: Dim 16 Mar 2014, 10:09 Sujet du message:
97994
91160
|
|
|
Bonjour Abys,
Quand je lance index.php, je vois bien la recherche des numéros s'effectuer dans la page Web, mais il n'y a rien d'autre qui se passe, comme si le numéro ne trouvait pas de nom à mettre en face.
Et bien sûr, les contacts ne sont pas mis à jour sur ma Freebox.
Si je teste le lien créé par l'appel de index.php quand il va chercher la correspondance d'un numéro sur pagesblanches en passant par un navigateur, le numéro que je cherche trouve bien un correspondant ?!
As-tu une idée ?
Merci d'avance.
Fred.
|
|