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
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

Poser une question


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
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