Читайте закладки Firefox, используя C # - PullRequest
7 голосов
/ 03 июня 2009

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

Мне известен вопрос SO, Прочитайте закладки FF 3 в Java , но ответы там, похоже, связаны с драйверами базы данных Java, и я не уверен, что некоторые из этих ответов не зависит от Java.

Мой основной вопрос , "Как я могу читать закладки Firefox в C #?"

Вторичные вопросы: я вижу \% профиль пользователя% \ application data \ mozilla \ firefox \ profile \ bookmarkbackups \ bookmarks- [date] .json файлы - могу ли я просто разобрать это? Если так, есть ли какие-либо парсеры для этого?

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

Ответы [ 5 ]

7 голосов
/ 03 июня 2009

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


Редактировать 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"]);
            }
        }
    }
}

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

2 голосов
/ 03 июня 2009

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

1 голос
/ 27 ноября 2009

Посетите 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

1 голос
/ 02 июля 2009

Мне пришлось немного переделать это для моего проекта 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 голос
/ 03 июня 2009

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

...