2009-06-03 3 views
7

Используя C#, мне нужно получить все закладки Firefox для их импорта в нашу базу данных. Как я могу это сделать?Прочтите закладки Firefox, используя C#

Я знаю вопрос SO, Read FF 3 bookmarks in Java, но ответы там все, кажется, вращаются вокруг драйверов Java-драйверов, и я не уверен, что некоторые из этих ответов не являются специфичными для Java.

Мой основной вопрос:, «Как читать закладки Firefox на C#?»

Дополнительные вопросы: Я вижу \% профиль пользователя% \ данные приложения \ mozilla \ firefox \ profiles \ bookmarkbackups \ bookmarks- [date] .json files - могу ли я просто разобрать это? Если да, существуют ли для этого существующие синтаксические анализаторы?

Вопрос о риторическом вопросе: почему это не так легко, как IE, где я просто читал файлы .url в \% пользовательском профиле% \ избранное? Ба.

+0

это не так просто, как IE, так как закладки в Firefox являются более сложными, чем IEA-й, потому что Firefox должен быть кросс-платформенным. Более сложные требования => более сложный код. –

+3

IE сохраняет их в текстовом формате в виде обычных файлов. Как это не перекрестная платформа? –

+0

IE способ делать вещи не так лучше, как FF по крайней мере по одной причине. Имя файла не может содержать некоторые специальные символы, такие как косая черта (/). Не говоря уже о том, что FF также поддерживает маркировку по закладкам. –

ответ

7

Используйте SQLite драйвер для .Net и получить доступ к файлу places.sqlite его можно найти на
Application Data/Mozilla/Firefox/Profiles/$this_varies/places.sqlite
на моем компьютере. Вам не должно быть трудно найти на ваших целевых компьютерах.


Edit 1:
Вот надрез кода, который выводит URL-адреса из базы данных:

using System.Data.SQLite; // downloaded from http://sourceforge.net/projects/adodotnetsqlite 

namespace sqlite_test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var path_to_db = @"C:\places.sqlite"; // copied here to avoid long path 
      SQLiteConnection sqlite_connection = new SQLiteConnection("Data Source=" + path_to_db + ";Version=3;New=True;Compress=True;"); 

      SQLiteCommand sqlite_command = sqlite_connection.CreateCommand(); 

      sqlite_connection.Open(); 

      sqlite_command.CommandText = "select * from moz_places"; 

      SQLiteDataReader sqlite_datareader = sqlite_command.ExecuteReader(); 

      while (sqlite_datareader.Read()) 
      { 
       // Prints out the url field from the table: 
       System.Console.WriteLine(sqlite_datareader["url"]); 
      } 
     } 
    } 
} 

Edit 2:
Как наконечник. Я действительно должен рекомендовать плагин SQLite Manager для Firefox. Это очень полезно для работы с базами данных sqlite.

+0

Спасибо, я отметил это как правильный ответ. Похоже, что файлы резервных копий хранятся в формате .json, но только для FF3 и более поздних версий. Для людей, читающих это, нижняя строка такова: -FF3 использует SQLLite для хранения закладок. Он использует файлы .json для хранения резервных копий закладок. -FF2 использует файл bookmarks.html для хранения закладок. –

+1

Стоит упомянуть, что фактический официальный сайт для SQLite lib - http://sqlite.phxsoftware.com - потрясающий продукт, поэтому он отполирован и в общественном достоянии! –

+1

FYI, поставщик SQLite ADO.NET, о котором вы упомянули, больше не поддерживается. Я рекомендую это вместо этого: http://sqlite.phxsoftware.com/. Это очень полно и даже поддерживает Entity Framework. –

1

Есть драйвер SQLite для .Net. Как только вы получите эту работу, я бы предположил, что решение будет одинаковым как в .NET, так и в Java.

+0

Как только разбор файлов резервных закладок .json? Было бы проще? –

+0

Кроме того, допустим, что я использую драйвер SQLLite для .NET, где находится файл базы данных SQLLite? –

+0

Посмотрите на эту статью в блоге, в которой объясняется больше об закладках FF и где они хранятся: http://www.lytebyte.com/2008/06/19/understanding-how-and-where-firefox-3- bookmarks-are-saved/ –

2

Несомненно, это работает так же, как предложено в Java-вопросе, просто получите SQLite .NET provider и используйте его для доступа к файлу базы данных FF.

+0

Как насчет разбора файлов резервных закладок .json? Было бы проще? –

1

Мне пришлось немного переделать этот проект для моего проекта http://www.codertakeout.com. Надеюсь, что этот пересмотр поможет прояснить некоторые вещи благодаря некоторым предложениям со всего Интернета.

using System.Data.SQLite; // need to install sqlite .net driver 

String path_to_db = @"C:\Documents and Settings\Jeff\Application Data\Mozilla\Firefox\Profiles\yhwx4xco.default\places.sqlite"; 
String path_to_temp = System.IO.Path.GetTempFileName(); 

System.IO.File.Copy(path_to_db, path_to_temp, true); 
SQLiteConnection sqlite_connection = new SQLiteConnection("Data Source=" + path_to_temp + ";Version=3;Compress=True;Read Only=True;"); 

SQLiteCommand sqlite_command = sqlite_connection.CreateCommand(); 

sqlite_connection.Open(); 

sqlite_command.CommandText = "SELECT moz_bookmarks.title,moz_places.url FROM moz_bookmarks LEFT JOIN moz_places WHERE moz_bookmarks.fk = moz_places.id AND moz_bookmarks.title != 'null' AND moz_places.url LIKE '%http%';"; 

SQLiteDataReader sqlite_datareader = sqlite_command.ExecuteReader(); 

while (sqlite_datareader.Read()) 
    { 
     System.Console.WriteLine(sqlite_datareader[1]); 
    } 
sqlite_connection.Close(); 
System.IO.File.Delete(path_to_temp); 
1

Посетить http://myexps.blogspot.com для реализации в java.

import java.sql.*; 

public class helloWorld { 
    public static void main(String[] args) throws Exception { 
     Class.forName("org.sqlite.JDBC"); 
     Connection conn = DriverManager.getConnection("jdbc:sqlite:/home/deepak/.mozilla/firefox/yvf7p20d.default/places.sqlite//"); 
    if(conn==null) 
    { 
    System.out.println("ERROR"); 
    } 
    System.out.println(conn.toString()); 

    Statement stat = conn.createStatement(); 

    ResultSet rs = stat.executeQuery("select * from moz_bookmarks;"); 
    while (rs.next()) { 
     System.out.println("id = " + rs.getString("id")); 
     System.out.println("keyword = " + rs.getString("keyword_id")); 
     System.out.println("title = " + rs.getString("title")); 
    } 
    rs.close(); 
    conn.close(); 
    } 
} 

Это будет реализация Java

Смежные вопросы