2009-01-21 51 views
14

我想寫一個Firefox 3插件,這將使我可以輕鬆地重新標記書籤。例如,我有一些書籤標記爲「開發」,一些標記爲「開發」,我想要一種方法將所有「發行」標籤輕鬆更新爲「開發」。不幸的是我找不到一個插件來做到這一點,所以我想我會創建自己的。Firefox書籤SQLite結構

在我設法掌握基本知識之前還沒有開發附加組件,並發現FireFox將所有書籤存儲在名爲Places.sqlite的SQLite數據庫中。在該數據庫中有一個名爲moz_bookmarks的表,其中包含書籤目錄中的所有書籤,標籤和文件夾。書籤文件夾及其子書籤的結構使用指向同一個表中父文件夾的id的外鍵id來表示,該表中的父文件夾的ID再次向上遞歸到該父文件夾的Id,直到它到達書籤根目錄爲止。

但是,我陷入困境的是你在Firefox中應用的標籤與書籤的關係。每個標記都有一個類型= 2和父代ID = 4。但是,我看不到它與使用該標記的實際書籤之間的關聯。如果我在firefox中將書籤添加到沒有特定文件夾但給它2或3個標籤,那麼它的父文件夾ID是5對應於「unfiled」,但我看不到與其關聯的標籤的進一步關聯。

我發現這個Wiki page on the structure但它並沒有真正的幫助。

它的駕駛我堅果:(請幫助...

+0

相關:* [如何從SQLite文件恢復Firefox書籤文件?](http://stackoverflow.com/questions/11769524)* – 2016-05-26 20:28:55

回答

25

你可能已經發現了自己,但標籤應用如下:

的中心位置爲數據庫中的所有URL是moz_places。表moz_bookmarks通過外鍵列fk引用它。

如果標記書籤,有多個條目moz_bookmarks,都具有相同的參考fk:首先是書籤本身(具有在title列標題)對於每一個標籤,還有一個額外的entriy在moz_bookmarks有相同的外鍵fk並引用parent coumn中的標籤(指向標籤的moz_bookmarks行)。

如果你有一個書籤「http://stackoverflow.com」標題爲「#1」與標籤「寫入」和「信息」,您將獲得:

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) 

希望這有助於...

+0

謝謝馬丁這麼久以後回到這個問題。我有點感動,但沒有更新這個,所以謝謝你,並保持良好的工作。 – 2009-04-14 04:45:03

3

我確實不能幫助你的操作方法,然而,也許是延長「SQLite的經理」將幫助你至少在部分地方你想知道該怎麼做,該插件是一個總經理,但它包含了默認的數據庫作爲Firefox的標準選項。

使用該擴展應該是相對簡單的重命名關鍵字如果你只是想找一種方法來解決它,這可能會起作用,如果你仍然喜歡編寫自己的工具,也許這個至少可以幫助查詢;)。

+0

感謝您的評論,我發現了這個插件。它對於開發和一般Firefox的好奇心非常有用。 – 2009-01-29 14:09:37

3

由於MartinStettner建議標籤結構基於標籤ID的外鍵,因此您首先必須確定目標標籤的moz_bookmark.id。

This Mozilla PDF解釋sqllite的關係......

標籤導致 moz_bookmarks兩個新項。第一個是標籤 ,其中parent = 4(標籤),fk = NULL。 第二個條目跟在第一個條目之後,並具有 前一個標籤作爲其父代,並且fk指向 到moz_places中的正確條目。

使用作爲指導......一旦你知道你可以加入moz_places.id ON moz_bookmarks.fk標籤的ID ...

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 

導出...

0

由於我不得不深入尋找這些信息,下面是請求獲取所有書籤的URL,標題和創建日期的請求:

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

我希望它能幫助人們尋找這個答案。