我正在尝试编写一个firefox 3插件,它可以让我轻松地重新标记书签。例如,我有一些标记为“开发”的书签和一些标记为“开发”的书签,我希望有一种方法可以轻松地将所有“删除”标记更新为“开发”。不幸的是,我找不到一个附加组件来做这个,所以我想我会创建自己的。
在我掌握了基础知识并发现firefox将所有书签存储在一个名为places.sqlite的sqlite数据库中之前,我还没有开发一个插件。在这个数据库中有一个名为moz_bookmarks的表,其中包含了bookmarks目录中的所有书签、标签和文件夹。书签文件夹及其子书签的结构使用一个外键ID表示,该外键ID指向同一表中父文件夹的ID,该表再次向上递归到父文件夹的ID,直到到达书签根。
然而,我陷入困境的是你在火狐中应用的标签是如何与书签相关的。每个标记的类型为2,父ID为4。但是,我看不到这与使用标签的实际书签之间的关联。如果我在火狐中添加一个书签到没有特定文件夹,但给它2或3个标签,那么它的父文件夹ID是5,对应于“未归档”,但我看不到与之相关的标签的进一步关联。
我发现了这一点,但并没有真正的帮助。
我快疯了:(请帮忙…

最佳答案

您可能已经了解了自己,但标记应用如下:
数据库中所有URL的中心位置是moz_places。表moz_bookmarks通过外键列fk引用它。
如果标记书签,则在moz_bookmarks中有多个条目,所有条目都具有相同的引用:第一个条目是书签本身(在fk列中具有标题),对于每个标记,title中有一个附加条目具有相同的外键,并引用moz_bookmarks中的标记(它指向标记的fk行)。
如果您有一个标题为“stackoverflow”的书签“http://stackoverflow.com”,带有标记“programming”和“info”,您将得到:

moz_places
----------
id    url   (some more)
3636  http://stackoverflow.com

moz_bookmarks
-------------
id    type    fk     parent    title          (other columns omitted...)
332   1       3636   5         Stackoverflow  (parent=5 -> unfiled folder)
333   2       (NULL) 4         programming    (programming tag, parent=4 -> tags folder)
334   1       3636   333       (NULL)         (link to 'programming' tag)
335   2       (NULL) 4         info           (info tag, parent=4 see above)
336   1       3636   335       (NULL)         (link to 'info' tag)

希望这有帮助…

关于sqlite - Firefox书签SQLite结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/464516/

10-13 06:55