Freezone S'inscrire

FAQ FAQ Rechercher Rechercher Liste des Membres Liste des Membres Groupes d'utilisateurs Groupes d'utilisateurs S'enregistrer S'enregistrer
Application Freebox Contacts Automatique
 

Poster un nouveau sujet    Répondre au sujet
   Univers Freebox Index du Forum -> Freebox / Freebox OS / Les App. (Freebox Connect, Freebox Files...)



 Auteur   Message 
Abys
(Auteur du topic)

Hobbit de L'Univers


Inscrit le: 21 Jan 2014
Messages: 2
 
3 points

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
Répondre en citant

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();
}
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé
Domotifred
Hobbit de L'Univers


Inscrit le: 16 Mar 2014
Messages: 1
 
6 points

Domotifred, Posté le: Dim 16 Mar 2014, 10:09    Sujet du message: 97994 91160 Répondre en citant

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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé

Poster un nouveau sujet     Répondre au sujet

Univers Freebox Index du Forum -> Freebox / Freebox OS / Les App. (Freebox Connect, Freebox Files...)
Page 1 sur 1
Toutes les heures sont au format GMT + 2 Heures
 

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum





CoolVista Thème phpbb
- Site adapté par Vincent Barrier
 © 2005 - 2009 Univers Freebox