Je vous propose cette semaine un petit article fort sympathique, nous allons quitter totalement le monde Joomla PHP et mon monde professionnel, pour nous rapprocher d'un petit besoin personnel, que j'avais notamment lorsque je fus animateur multimédia. À cet antique évoque, nous n'avions malheureusement pas le navigateur Firefox de la fondation Mozilla existant. Nous devions nous contenter de l'horrible Internet Explorer version 5 de mémoire. Autant dire une période fort révolue que je ne souhaiterais pas revivre.
Mon besoin
Je vais vous présenter le besoin que j'avais à l'époque, mais vous comprendrez rapidement que ce besoin est encore un besoin courant de beaucoup de personnes. Lorsque vous animez un pôle multimédia à destination d'un public, il n'est pas rare que certains souhaitent mettre en favoris leurs propre bookmarks, pour continuer leurs navigations ultérieurement lorsqu'ils reviennent sur la machine.
Je me suis heurté à un souci simple : comment faire pour que l'ensemble des machines et tous leurs propres bookmark identiques.
À l'époque, j'avais trouvé un outil client pour Windows, qui était relié à un serveur en ligne, qui permettait régulièrement de réuploader les bookmarks de chacune de mes machines sur un compte commun. Après configuration, dans le logiciel client, nous pouvions lui dire s'il fallait écraser, mettre à jour, supprimer des bookmarks etc... De mon coté, je demandais simplement aux personnes de faire un "répertoire" à leurs nom pour y mettre leurs favoris.
Et comme ce client était sur chacun des postes, l'ensemble des postes récupéraient l'ensemble des bookmarks. La mise à jour était bi-quotidienne de mémoire.
Mon propre besoin personnel
Vous l'avez sûrement compris, mon besoin actuel se rapproche fort de mon besoin antique qui remonte maintenant à plus de 20 ans. Nous allons donc aujourd'hui découvrir comment nous pouvons, à l'aide de PHP, et récupérer des informations du navigateur Firefox, récupérer notamment les bookmarks de vorte navigateur.
Préambule
Afin de comprendre les manipulations que je vous propose dans cet article, il faut savoir, en préambule, tous les navigateurs Firefox, afin de gérer l'ensemble des paramètres et des données utilisateurs des profils que vous créez dans ce navigateur, sont stockés dans une base de données de type SQLite.
Nous allons donc interroger cette base de données, qui se trouve sous la forme d'un fichier sur votre ordinateur, avec un petit bout de code PHP. Je me suis orienté vers du code PHP, mais vous pouvez aussi en ligne de commande, attaquer cette base de données.
Cette "base" se trouve dans votre répertoire suivant : (en rouge correspont le nom du répertoire de VOTRE PROPRE profil et peut donc changer.
C:\Users\33651\AppData\Roaming\Mozilla\Firefox\Profiles\dag35olk.default-release\places.sqlite
Pourquoi faire un choix PHP ?
Ce choix repose tout simplement sur la possibilité de pouvoir écrire un programme qui va nous permettre des traitements particuliers sur les données que nous allons récupérer. Dans notre cas, l'idée est de récupérer l'ensemble de mes bookmark et ultérieurement, de les uploader sur un serveur web.
Qu'allons-nous faire ?
Nous allons simplement lire une base de données de type SQLite qui se trouve sur votre poste de travail.
Je vous mets tout de suite en garde sur une information et un concept à bien prendre en compte : une base de données de ce type est stocké sous la forme d'un fichier.
Il est donc inutile de faire tourner un serveur de base de données, nous allons directement exécuté des requêtes SQL sur un fichier lui-même. Cela peut paraître choquant, mais c'est comme cela que fonctionne SQLite.
Exécution du code
Comme vous pouvez le voir dans mon code, je commence par déclarer un tableau vide, afin de pouvoir y stocker le contenu que je vais extraire de la base de données. Une fois ce tableau des carrés, je me connecte à la base de données via PDO, j'exécute une simple requête qui permet de récupérer les informations que je souhaite, puis je parcours du résultat du curseur obtenu. Une fois ce parcours effectué, je sauvegarde continue dans un fichier, cette ligne est en facultative.
Bref, c'est une simple requête de type SELECT qui est parcourue pour récupérer les informations.
<?php
/*STRUCTURE DE LA BASE MOOZILLA : https://wiki.mozilla.org/images/d/d5/Places.sqlite.schema3.pdf
URL locale de la base : C:\Users\33651\AppData\Roaming\Mozilla\Firefox\Profiles\dag35olk.default-release\places.sqlite
ATTENTION : la chaine dag35olk.default-release correspond au profil utilisateur de firefox
*/
$T = array();
/* Create / Connection to sqlite using PDO and set error mode */
$db = new PDO('sqlite:places.sqlite');
$stmt = $db -> prepare("SELECT * FROM moz_places");
$stmt -> execute();
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($res as $row){
array_push($T,$row);
echo "<pre>";
print_r($row);
echo "</pre>";
}
file_put_contents('fic.txt', print_r($T, true));
?>
Connaître et comprendre la structure de la base de données.
Afin de pouvoir parcourir cette base de données SQLITE, j'ai dû me renseigner pour comprendre et connaître la structure de la base. Afin d'arriver à comprendre cette structure, j'ai cherché sur internet afin de trouver un modèle conceptuel de données sur la partie places.sqlite, fichier de base de données qui, pour Firefox, stocke les bookmarks.
La structure de la base de données associées à Firefox
Après une brève recherche sur google, j'ai trouvé un fichier PDF qui explique la structure de la base de données associées à d'autres navigateur favoris Firefox. Ce fichier remonte à 2008, n'est peut-être plus forcément à jour, toutefois les tables restent les mêmes pour ce que je souhaitais effectuer.
Je joins à cet article le fichier trouvé sur https://wiki.mozilla.org/images/d/d5/Places.sqlite.schema3.pdf
Mise en ligne des bookmarks
Pour le moment, il n'y a pas de backup online des URL de mes bookmarks. En effet, je voulais me cantonner dans cet article uniquement à la partie lecture des favoris.
Je reviendrai peut-être sur ce deuxième point ultérieurement, mais il suffit tout simplement de stocker chacun des résultats récupérés au cours de la lecture dans la boucle foreach
