【问题标题】:Firefox Bookmarks SQLite structureFirefox 书签 SQLite 结构
【发布时间】:2009-01-21 09:06:42
【问题描述】:

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

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

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

我找到了这个Wiki page on the structure,但它并没有真正的帮助。

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

【问题讨论】:

标签: sqlite firefox-addon firefox-3 bookmarks


【解决方案1】:

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

数据库中所有 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)

希望这会有所帮助...

【讨论】:

  • 感谢 martin 这么久后回到这个问题。我有点继续前进,但未能更新,所以谢谢你,继续努力。
【解决方案2】:

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

This Mozilla PDF解释sqllite中的关系...

标签导致两个新条目 moz_书签。第一个是标签, 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

导出...

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 感谢您的评论,我发现了这个插件。它对于开发和一般的 Firefox 好奇心非常有用。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      我希望它能帮助寻找这个答案的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多