2009-06-03 17 views
7

Sử dụng C#, tôi cần nhận tất cả dấu trang của Firefox để nhập chúng vào cơ sở dữ liệu của chúng tôi. Tôi có thể làm cái này như thế nào?Đọc các dấu trang của Firefox bằng cách sử dụng C#

Tôi biết câu hỏi SO, Read FF 3 bookmarks in Java, nhưng câu trả lời có vẻ xoay quanh trình điều khiển cơ sở dữ liệu Java và tôi không chắc rằng một số câu trả lời đó không phải là Java cụ thể.

Câu hỏi chính của tôi là, "Làm cách nào để đọc dấu trang của Firefox trong C#?"

Câu hỏi phụ: Tôi thấy \% hồ sơ người dùng% \ application data \ mozilla \ firefox \ profiles \ bookmarkbackups \ bookmarks- [date] .json tệp - tôi có thể phân tích cú pháp đó không? Nếu vậy, có bất kỳ trình phân tích cú pháp hiện tại nào không?

Câu hỏi than thở về tu từ: Tại sao điều này không dễ dàng như IE, tôi chỉ đọc tệp .url trong \% hồ sơ người dùng% \ yêu thích? Bah.

+0

nó không phải dễ dàng như IE vì bookmark trong Firefox là phức tạp hơn IEA nd vì Firefox phải cross-platform. Các yêu cầu phức tạp hơn => mã phức tạp hơn. –

+3

IE lưu trữ chúng ở định dạng văn bản thuần túy dưới dạng tệp thông thường. Làm thế nào mà không phải là nền tảng chéo? –

+0

Cách làm việc của IE không tốt bằng FF vì ít nhất một lý do. Tên tệp không được chứa một số ký tự đặc biệt như dấu gạch chéo (/). Chưa kể FF cũng hỗ trợ gắn thẻ vào bookmark. –

Trả lời

7

Sử dụng các tài xế SQLite cho Net và truy cập các tập tin places.sqlite nó có thể được tìm thấy tại
Application Data/Mozilla/Firefox/Profiles/$this_varies/places.sqlite
trên máy tính của tôi. Nó không phải là khó khăn cho bạn để xác định vị trí trên máy tính mục tiêu của bạn.


Sửa 1:
Đây là một snip mã mà in ra các url từ cơ sở dữ liệu:

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"]); 
      } 
     } 
    } 
} 

Chỉnh sửa 2:
Như tip. Tôi thực sự phải đề xuất plugin Trình quản lý SQLite cho firefox. Nó rất hữu ích để làm việc với cơ sở dữ liệu sqlite.

+0

Cảm ơn, tôi đã đánh dấu đây là câu trả lời đúng. Có vẻ như các tệp sao lưu được lưu trữ ở định dạng .json, nhưng chỉ dành cho FF3 trở lên. Đối với những người đọc này, dòng dưới cùng là: -FF3 sử dụng SQLLite để lưu trữ dấu trang. Nó sử dụng các tệp .json để lưu trữ các bản sao lưu của các dấu trang. -FF2 sử dụng tệp bookmarks.html để lưu trữ dấu trang. –

+1

Đáng nói đến là trang web chính thức thực sự cho lib SQLite là http://sqlite.phxsoftware.com - sản phẩm tuyệt vời, được đánh bóng và cũng thuộc phạm vi công cộng! –

+1

FYI, nhà cung cấp ADO.NET SQLite bạn đã đề cập không được duy trì nữa. Tôi khuyên bạn nên thay vào đó: http://sqlite.phxsoftware.com/. Nó rất hoàn chỉnh và thậm chí còn hỗ trợ Entity Framework. –

1

Có trình điều khiển SQLite cho .Net. Một khi bạn nhận được rằng làm việc tôi tưởng tượng các giải pháp sẽ giống nhau trong cả hai. Net và Java.

+0

Chỉ phân tích cú pháp tệp sao lưu dấu trang .json? Điều đó có dễ hơn không? –

+0

Ngoài ra, giả sử tôi đi với trình điều khiển SQLLite cho .NET, tệp cơ sở dữ liệu SQLLite ở đâu? –

+0

Hãy xem bài viết trên blog này giải thích thêm về các dấu trang FF và nơi chúng được lưu trữ: http://www.lytebyte.com/2008/06/19/understanding-how-and-where-firefox-3- bookmarks-are-saved/ –

2

Chắc chắn nó hoạt động theo cách tương tự như được đề xuất trong câu hỏi Java, chỉ cần lấy SQLite .NET provider và sử dụng để truy cập tệp cơ sở dữ liệu FF.

+0

Làm cách nào để phân tích cú pháp tệp sao lưu dấu trang .json? Điều đó có dễ hơn không? –

1

Tôi phải làm lại điều này một chút cho dự án của mình http://www.codertakeout.com. Hy vọng bản sửa đổi này sẽ giúp làm rõ một vài điều nhờ một số đề xuất từ ​​khắp nơi trên web.

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

Truy cập http://myexps.blogspot.com để thực hiện trong 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(); 
    } 
} 

này sẽ được thực hiện java

Các vấn đề liên quan