14

我正在尝试编写一个 Firefox 3 插件,它可以让我轻松地重新标记书签。例如,我有一些标记为“开发”的书签和一些标记为“开发”的书签,我想要一种方法可以轻松地将所有“开发”标签更新为“开发”。不幸的是,我找不到一个插件来做到这一点,所以我想我会创建自己的。

在我设法掌握基础知识并发现 FireFox 将所有书签存储在名为 Places.sqlite 的 SQLite 数据库中之前,我还没有开发过插件。在该数据库中有一个名为 moz_bookmarks 的表,其中包含书签目录中的所有书签、标签和文件夹。书签文件夹及其子书签的结构使用外键 id 表示,该外键 id 指向同一个表中的父文件夹的 id,该表再次向上递归到该父文件夹的 Id,直到它到达书签根。

但是,我陷入困境的地方是您在 Firefox 中应用的标签与书签的关系。每个标签都有一个类型 = 2 和父 ID = 4。但是我看不出这与使用该标签的实际书签之间没有关联。如果我在 Firefox 中将书签添加到没有特定文件夹但给它 2 或 3 个标签,那么它的父文件夹 ID 为 5,对应于“未归档”,但我看不到与它关联的标签的进一步关联。

在结构上找到了这个 Wiki 页面,但它并没有真正帮助。

这让我发疯了:(请帮助...

4

5 回答 5

28

您可能已经发现自己,但标签应用如下:

数据库中所有 URL 的中心位置是moz_places. 该表moz_bookmarks通过外键列引用它fk

如果您标记书签,则 中有多个条目moz_bookmarks,所有条目都具有相同的引用fk:第一个是书签本身(在title列中具有标题)对于每个标记,moz_bookmarks具有相同外键fk并引用列中的标签parent(指向标签所在的行moz_bookmarks)。

如果您有一个标题为“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)

希望这可以帮助...

于 2009-04-11T14:30:45.787 回答
5

正如 MartinStettner 建议的标签结构基于标签 id 的外键,因此您首先必须确定目标标签的 moz_bookmark.id。

这个 Mozilla PDF解释了 sqllite 中的关系......

标签会在 moz_bookmarks 中产生两个新条目。第一个是标签,parent=4(标签),fk=NULL。第二个条目跟在第一个条目之后,并以前一个标签作为其父项,fk 指向 moz_places 中的正确条目。

以此为指导...一旦您知道标签的 ID,您就可以加入 moz_places.id ON moz_bookmarks.fk ...

    SELECT moz_places.id, moz_places.url, moz_places.title, moz_bookmarks.parent    
    FROM moz_places    
    LEFT OUTER JOIN moz_bookmarks    
    ON moz_places.id = moz_bookmarks.fk    
    WHERE moz_bookmarks.parent = N

出口 ...

于 2012-12-20T09:48:53.047 回答
3

我不能完全帮助您了解操作方法,但是,也许扩展“SQLite Manager”至少会在您试图弄清楚该做什么的部分帮助您。该插件是一个通用管理器,但它也包含 Firefox 使用的默认数据库作为标准选项。

使用该扩展名,重命名您喜欢的关键字应该相对简单。如果您只是在寻找一种修复它的方法,这可能会起作用,如果您仍然喜欢编写自己的工具,也许这个工具至少可以帮助查询;)。

于 2009-01-24T00:39:51.830 回答
2

我也帮不上什么忙-发现您的问题正在寻找相同的答案...

我设法找到的是相关的 Mozilla 文档。书签系统称为 Places,数据库表在https://developer.mozilla.org/en-US/docs/The_Places_database中进行了描述。

于 2009-11-27T01:12:08.757 回答
1

因为我必须深入挖掘才能找到这些信息,所以这里是获取所有书签的 url、标题和创建日期的请求:

SELECT h.url, b.title, b.dateAdded
FROM moz_places h
JOIN moz_bookmarks b
ON h.id = b.fk;

我希望它会帮助人们寻找这个答案。

于 2016-05-07T10:05:02.353 回答