SQL dans Firefox

Pour remettre un petit peu de vie dans ce blog, je vous propose un article de pure bidouille. On va tripatouiller les fichiers de configuration de firefox pour obtenir des informations telles que l’historique, les marques page …

Quand on fait une recherche  sur l’amélioration des performances de  firefox, on tombe souvent sur ce type d’article par exemple (j’aurais pu choisir un autre site, il y a une foule d’articles sur le sujet). Ça parle d’appliquer l’action vacuum sur les fichiers de configuration de firefox. Ok c’est cool on a un firefox plus speed (je suis pas sur que ça change grand chose) mais c’est pas très fun. Le plus intéressant, les fichiers de configuration sont des basses de données tournant avec sqlite. Donc ça devient super simple de récupérer ces informations pour les utiliser dans une autre application par exemple.

Enfin on arrive aux ligne de commande. Je vous laisse vous débrouiller pour installer sqlite3 sur votre système et je vous conseille de sauvegarder les fichiers sqlite que vous manipulez, on est jamais trop prudent. (même si je n’ai pas suivi mon propre conseil )

Pour commencer, on va aller dans le dossier de votre profil firefox.

$cd ~/.mozilla/firefox/
$ls
mci61le1.default  profiles.ini  se1rptc9.Default User
$cd mci61le1.default

Rien de compliqué ! Voyons voir les fichiers sqlite qu’on peut explorer

 $ls *.sqlite
addons.sqlite           downloads.sqlite    messages.sqlite     signons.sqlite               ubiquity_suggestion_memory.sqlite
chromeappsstore.sqlite  extensions.sqlite   permissions.sqlite  startup.sqlite               urlclassifier3.sqlite
content-prefs.sqlite    formhistory.sqlite  places.sqlite       ubiquity_ann.sqlite          webappsstore.sqlite
cookies.sqlite          jetpack_ann.sqlite  search.sqlite       ubiquity_skin_memory.sqlite

Oui chez moi il y a de quoi s’amuser. Il y a une bonne partie des fichiers sqlite qui viennent d’extensions comme ubiuity, jetpack .…
On va s’intéresser au fichier places.sqlite qui gère l’historique et les marques pages. D’après la doc voila les tables disponibles

  • moz_anno_attributes – Annotation Attributes
  • moz_annos – Annotations
  • moz_bookmarks – Bookmarks
  • moz_bookmarks_roots – Bookmark roots i.e. places, menu, toolbar, tags, unfiled
  • moz_favicons – Favourite icons – including URL of icon
  • moz_historyvisits – A history of the number of times a site has been visited
  • moz_inputhistory – A history of URLS typed by the user
  • moz_items_annos – Item annotations
  • moz_keywords – Keywords
  • moz_places – Places/Sites visited – referenced by moz_historyvisits

On va se connecter pour voir ça.

$sqlite3 places.sqlite

Maintenant on se trouve dans la ligne de commande de sqlite.
J’ai trouvé 3 commandes intéressantes pour commencer
.help listant l’ensemble des commandes.
.tables listant la liste des tables
.schema affiche le schéma de la table donnée en argument.

sqlite> .schema moz_places
CREATE TABLE moz_places (id INTEGER PRIMARY KEY, url LONGVARCHAR, title LONGVARCHAR, rev_host LONGVARCHAR, visit_count INTEGER DEFAULT 0, hidden INTEGER DEFAULT 0 NOT NULL, typed INTEGER DEFAULT 0 NOT NULL, favicon_id INTEGER, frecency INTEGER DEFAULT -1 NOT NULL, last_visit_date INTEGER, guid TEXT);
CREATE INDEX moz_places_faviconindex ON moz_places (favicon_id);
CREATE INDEX moz_places_frecencyindex ON moz_places (frecency);
CREATE UNIQUE INDEX moz_places_guid_uniqueindex ON moz_places (guid);
CREATE INDEX moz_places_hostindex ON moz_places (rev_host);
CREATE INDEX moz_places_lastvisitdateindex ON moz_places (last_visit_date);
CREATE UNIQUE INDEX moz_places_url_uniqueindex ON moz_places (url);
CREATE INDEX moz_places_visitcount ON moz_places (visit_count);

Voila deux exemples d’extraction :
pour afficher les 20 sites les plus visités dans votre historique. Si vous connaissez sql c’est tout simple pour les autres la doc est facile à trouver.

sqlite> select url  from moz_places order by visit_count DESC limit 20;

Attention: quand vous lancez une requête n’oubliez pas le ; à la fin.

la liste des sites en marque page que vous avez le plus visités

select url, visit_count from moz_bookmarks t1
inner join moz_places t2 on t1.fk = t2.id
order by visit_count DESC limit 10;

Je vous laisse maintenant trouver des idées d’utilisation de cette bidouille.

Bonne soirée et à la prochaine

2 commentaires »

  1. LGnap said

    Il y a (d’ailleurs cité dans ta première liste) cookies.sqlite qui peut être aussi intéressant pour les gens cherchant à automatiser des procédures récurrentes via CURL nécessitant d’être authentifié (d’avoir le bon cookie quoi…).

    Tu récupères ton cookie de façon automatisée (Php et PDO)
    Lance CURL avec le cookie fraichement récupéré histoire de te faire passer pour ton browser. Et comme ça à toi les opérations automatisées!

    !!! Certains codeurs (dont moi) utilisent des procédures de test de l’adresse IP ou de l’identifiant du browser afin de vérifier si pas de ‘vol du cookie’, il faudra donc contrer cela !!!

  2. Tony said

    C’est énorme ! Il y a de quoi s’amuser à faire plein de petites recherches et statistiques. Je ne connaissais pas mais c’est très intéressant tout ça. Merci d’avoir rédigé un tel article pour partager l’info.

RSS feed for comments on this post · TrackBack URI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :