JavaでGoogleChromeとMozillaFirefoxからエクスポートされたブックマークファイルを解析するにはどうすればよいですか。それらを直接解析してURLを取得するために利用できるライブラリはありますか。
また、Javaでそれらを解析するためのサンプルコードを歓迎します。
JavaでGoogleChromeとMozillaFirefoxからエクスポートされたブックマークファイルを解析するにはどうすればよいですか。それらを直接解析してURLを取得するために利用できるライブラリはありますか。
また、Javaでそれらを解析するためのサンプルコードを歓迎します。
ほとんどの場合、HTMLファイルを実際に解析する必要はありません。ChromeはブックマークをJSONファイルに保存します。JSONパーサーを使用してそのファイルを読み取る方がはるかに簡単です。
興味のあるファイルは次の場所にあります(Linuxの場合、とにかく、他のO / Sの場合はGoogle):
/home/your_name/.config/google-chrome/Default/Bookmarks
JSONの解析は簡単です。Googleの周り、またはJavaでJSONを解析する方法から始めます。
掘り下げる前にJSONデータを視覚化したい場合は、http://chris.photobooks.com/json/default.htmも参照してください。
投稿された新しいコメントによると、解決策はJSOUPオープンソースプログラムを使用してこれを行うことです。JSOUPはHTTPまたはHTTPSプロトコルのみを受け入れるため、エクスポートされたブックマークHTMLをtomcatなどのローカルサーバーでホストし、そのDOMを取得することをお勧めします。
http://yourip:<port>/<yourProject>/<bookmark.html>.
JSOUPはかなり自明です。
他の簡単な方法:
ChromeとFirefoxのブックマークは、以下のようにJSONとして保存されます。
Javaの方法:JSONを使用してこれらを解析することをお勧めします。以下の構造に基づいて参照Javaオブジェクトを作成します。
または、UNIXコマンドプロンプトを使用して、
grep -i "url" <bookmark file path> | cut -d":" -f2
ただし、Chrome APIを引き続き使用する場合は、http://developer.chrome.com/extensions/bookmarks.htmlにアクセスしてください。
{
"checksum": "702d8e600a3d70beccfc78e82ca7caba",
"roots": {
"bookmark_bar": {
"children": [ {
"date_added": "12939920104154671",
"id": "3",
"name": "Development/Tutorials/Git/git-svn - KDE TechBase",
"type": "url",
"url": "http://techbase.kde.org/Development/Tutorials/Git/git-svn"
}, {
"date_added": "12939995405838705",
"id": "4",
"name": "QJson - Usage",
"type": "url",
"url": "http://qjson.sourceforge.net/usage.html"
私はこの質問に少し遅れています。しかし、それでも関連性がある場合は、同じことを実行し(他のブックマークソース:GitHub Stars、Netscape、Googleブックマークも)、独自に作成する必要がありました。あなたは私のリポジトリからそれを見てそして取ることができます:https ://github.com/IvoLimmen/mystart 。
誰かが興味を持っている場合:ChromeのブックマークJSONファイルの解析に取り組む方法のスニペットを次に示します(ただし、アイデアを得るために、徹底的にテストされていません)。
import org.json4s.DefaultFormats
import org.json4s.native.JsonMethods
import org.junit.Test
class BookmarksImporterTest {
implicit val formats: DefaultFormats.type = DefaultFormats
def analyse(element: Node): List[Node] = {
element.children.flatMap(c => {
c.`type` match {
case Some("folder") => c.children.flatMap(r => analyse(r))
case Some("url") => List(c)
case _ => println("???"); List()
}
})
}
@Test
def test(): Unit = {
val source = scala.io.Source.fromFile("bookmarks.json")
val json = JsonMethods.parse(source.reader())
val bookmarks = json.extract[ChromeBookmarks]
val bms = bookmarks.roots.flatMap {
case (name, elements) => analyse(elements)
}
println("found " + bms.size + " entries")
}
}
case class ChromeBookmarks(checksum: String, roots: Map[String, Node], version: Int)
case class Node(
id: Option[String],
name: Option[String],
url: Option[String],
children: List[Node],
`date-added`: Option[Long],
`date-modified`: Option[Long],
`type`: Option[String]
)