Sp4ce.net rss

Import des contacts google dans un Nokia C3

Après mon passage chez Free Mobile, j'ai acheté un Nokia C3, et j'ai ensuite importé mes contacts depuis google vers mon nouveau téléphone.

J’ai récemment changé d’opérateur téléphonique: je suis passé de Bouygues Télécom à Free Mobile. Depuis novembre 2011 jusqu’à la semaine dernière, de peur de me ré engager avec Bouygues, et en attendant les offres de Free, j’avais un Nokia 1616, qui est un des téléphones les plus simples du marché.

Après etre abonné chez Free, et constaté que le prix du téléphone que j’aurais aimé avoir (à savoir un android) dépassait largement le budget que j’alloue pour ce genre de choses, j’ai décidé de jeter un oeil sur les entrées de gamme. J’ai donc choisi le Nokia C3 après 10 minutes de réflexion (j’ai aussi un budget temps de réflexion pour ce genre de choses que je devrais d’ailleurs revoir à la hausse).

Toujours est-il que maintenant j’ai mon téléphone Nokia tout vide, sans aucun contact à l’intérieur. Le temps de pleurer sur les bienfaits de la synchronization avec son compte gmail, fonctionalité proposée par les androids, que me vient l’idée d’essayer d’importer mes contacts. Grâce à l’application Nokia Suite je peux synchroniser mon téléphone avec un fichier de sauvegarde sur mon pc. Le fichier de sauvegarde se trouve dans ~\AppData\Local\Nokia\Nokia Data Store\DataBase\MDataStore.db3 et c’est une base de données SQLite. Un peu de reverse engineering dans leur base de données et j’ai accouché cet après midi d’un petit script ruby d’import depuis le fichier CSV que l’on peut facilement obtenir depuis l’interface web de Google.

import.rb

require 'csv'
require 'rubygems'
require 'sqlite3'
require 'uuid'

# Parameters
GOOGLE_EXPORT='google.csv'
NOKIA_DATABASE='C:\Users\bpernetmugnier.VIRTUOZ\AppData\Local\Nokia\Nokia Data Store\DataBase\MDataStore.db3'

# Read the csv file and create a array of hash table
csv_data = CSV.read GOOGLE_EXPORT
headers = csv_data.shift.map {|i| i.to_s }
string_data = csv_data.map {|row| row.map {|cell| cell.to_s } }
users = string_data.map {|row| Hash[*headers.zip(row).flatten] }

# Create sqlite connection.
database = SQLite3::Database.new(NOKIA_DATABASE)
uuid_lib = UUID.new
users.each { |user|
    if (user['Name'].start_with? '.')
        next
    end

    rows = database.execute('SELECT * FROM Contact WHERE GivenName="%s" AND LastName="%s"' %
        [user['Given Name'], user['Family Name']])
    if (rows.size != 0)
        next
    end

    uuid = uuid_lib.generate
    database.execute("INSERT INTO Contact (GUID, GivenName, LastName, GeneralMobile) VALUES ('{%s}', '%s', '%s', '%s');" % [uuid, user['Given Name'], user['Family Name'], user['Phone 1 - Value']])
    database.execute("INSERT INTO Contact_NOS (GUID, PreferredNumberId) VALUES ('{%s}', 1);" % uuid)
    database.execute("INSERT INTO Item (GUID, CreationDate, LastModifiedDate, ImportDate, ItemType) VALUES ('{%s}', 40931.58788489, 40931.58788489, 40931.58788489, 'application/vnd.nokia.nos.contact');" % uuid)
}

Petite remarque concernant Google et Nokia, si le premier offre de nombreuses possibilités pour importer, exporter, merger ses contacts, le deuxième n’y a pas pensé. J’était trčè surpris de ne pas trouver, même une basique fonction “export” dans Nokia Suite. Est-ce un manque de temps ? d’investissement ? ou tout simplement d’idée ?

Et sinon, dans la base de données, les timestamp sont représentés sous un format de nombres réels qui m’est totalement inconnu. J’ai essayé de faire des soutraction, division, regression affine, etc. Mais je n’ai rien trouvé de très logique.

40931.58788489 == le 23 janvier 2012 à environ 15h06
40931,6428253646 == le 23 janvier 2012 à environ 16h25