Firefox 3 structure de places.sqlite

Le
unbewusst.sein
j'ai besoin de corriger ma base de bookmarks.

par exemple :
changer les URIs "http://mon.domain.org" en "http://127.0.0.1"
changer les labels (title) qui ont des champs comme :
\\\\\\\\\\\U3044\\\\\\\\U308d

mais j'avoue avoir quelques difficultés à piger la structure du fichier
"places.sqlite"

notamment je ne vois pas comment obtenir, pour une uri donnée le label
(title) associé et l'id du dossier parent.



--
Une Bévue
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
unbewusst.sein
Le #11195191
Une Bévue
j'ai besoin de corriger ma base de bookmarks.



je viens d'ajouter le add-on "SQLite Manager 0.2.46" à FF3.
ça marche pas mal.

j'arrive même à ouvrir cette base places.sqlite quand FF3 tourne.

--
Une Bévue
unbewusst.sein
Le #11198301
Une Bévue

notamment je ne vois pas comment obtenir, pour une uri donnée le label
(title) associé et l'id du dossier parent.



bon, en fait, c'est "simple" ;-)

prendre dans moz_bookmarks les bookmarks (et pas les dossiers) :
"SELECT DISTINCT * FROM moz_bookmarks WHERE type = 1 ;"

ensuite, pour chaque ligne, retrouver l'url :
places_id=row['fk']
"SELECT DISTINCT url FROM moz_places WHERE id = #{places_id} ;"

pour retrouver les dossiers contenant ce signet :

parent_id=row['parent'].to_i
"SELECT DISTINCT parent, title FROM moz_bookmarks WHERE id #{parent_id} ;"
new_parent_id=row[0] => boucler sur la ligne précédente...
tant que new_parent_id n'est pas == à 1 (qui est le root)

that's all folks ;-)

en ruby, brut de fonderie, ça donne :
#! /usr/bin/env ruby

require 'rubygems'
require 'sqlite3'

def get_folder_path(db,parent_id,pathes=[])
new_parent_id=nil
db.execute( "SELECT DISTINCT parent, title FROM moz_bookmarks WHERE
id = #{parent_id} ;" ) do |row|
pathes<<row[1]
new_parent_id=row[0].to_i
end
return pathes if new_parent_id == 1
return get_folder_path(db,new_parent_id,pathes)
end
file='places.sqlite'
#file=Dir.glob("#{ENV['HOME']}/Library/Application
Support/Firefox/Profiles/*.default/places.sqlite").last
db = SQLite3::Database.new( "#{file}" )

db.results_as_hash = true

rows=[]
db.execute( "SELECT DISTINCT * FROM moz_bookmarks WHERE type = 1 ;" ) do
|row|
rows<<row
end

puts
puts
puts
rows.each do |row|
places_id=row['fk'] #.to_i
db.execute( "SELECT DISTINCT url FROM moz_places WHERE id #{places_id} ;" ) do |a_row|
row['url']=a_row[0]
end
parent_id=row['parent'].to_i
row['pathes']=get_folder_path(db,parent_id)
row['path']='/'+row['pathes'].reverse.join('/')
end
puts
puts
puts
rows.each do |row|
row['dateAdded']=row['dateAdded'] ? row['dateAdded'].to_i/1000000 :
Time.now.to_i
row['lastModified']=row['lastModified'] ?
row['lastModified'].to_i/1000000 : Time.now.to_i
puts "title = #{row['title']}, url = #{row['url']}, path #{row['path']}, dateAdded = #{row['dateAdded']}, lastModified #{row['lastModified']}"
end


--
Une Bévue
Publicité
Poster une réponse
Anonyme