使用freemarker實現誇克瀏覽器書簽導出


前言

因為誇克越來越臃腫,打算換成via。不過誇克不支持書簽導出,故一番研究后成功實現誇克瀏覽器書簽導出到via瀏覽器。
所需工具
  1. navicat premium或其它能讀取.db文件的數據庫工具
  2.一台安卓模擬器(主要處理手機未root不能操作到.db文件),博主用的是夜神安卓7內核。
步驟1:取出誇克的本地書簽.db文件
  在模擬器上下載對應的誇克瀏覽器,登錄自己的賬號並同步書簽
  具體路徑 /data/data/com.quark.browser/databases( 如果你是安卓9.0,有限制,就需要吧整個database,文件夾導出,否則是空文件。
  
 
 
步驟2:使用navicat premium打開 bookmark.db(直接拖進去)
  
 
查看對應的數據類型,進行轉換(圈出三個主要的字段)
  
 
navicat premium的頂部-工具-數據傳輸-選擇對應的庫表進行傳輸(博主用的是mysql,並刪除了部分不必要字段)
  
注:也可采用導出數據為excel、json等方法,主要是為了能讀取到數據。
 
步驟3:freemarker模版配置並代碼生成對應html書簽
 
生成ftl文件
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
It will be read and overwritten.
DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
<DT><H3 ADD_DATE="1504164055" LAST_MODIFIED="1582180674" PERSONAL_TOOLBAR_FOLDER="true">\u4e66\u7b7e\u680f</H3>
<DL><p>
<#list list as webSite>
<#if webSite.child?? >
<DT><H3 ADD_DATE="1576591875" LAST_MODIFIED="1607497062">${webSite.title}</H3>
<DL><p>
<#list webSite.child as web>
<DT><A HREF="${web.url}" ADD_DATE="1570762339" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACXklEQVQ4jZWTT0hUURjFz3ffn3FGZ9RMTamFBS00KIgiKAIhCIqCiBGCCIKoXbtatchq61JI2gS1GmmR4MrAIGghriKpaJOZ6YzMvHHmvZl377vvfi1egxoV9e0ul/Pju+ecCwAAMwHAiXn/zKk34U38xwgAwDgIAIQW15yO1NTJuebs8dnawX8H3AcDAEtS2oOx3LZzFpwXR6fY+VcAAQCUII5AUVnGrMSQvQ/p5J5F65m/B/wcEwEsQaxgsYTWK9AJgAyIGAW2fgXYO04hCARAEgBiD55z7BUXWJiKIvno3Sh9+/sGIYElwFKAQxJBrVuDeI/dJ24Zx1oYWgjuYWnJ/SOAA4bxGSYw4CZbxTsURLZ5LBtgTbo36sk87Ned08OFLUjLxGSDIILxAeNrmHoc781zeq3LeimbzZLqzdhhsxT1dLVf7B5x8wCAQsFKAJzEaOoG8SbB1GOYumZ3v+cWD6MRdcSjflyfcCrK2+XA5FJ0GgCQz3NiYmIdaz82SBk2UoMJVC/pGCDun15e72RLllZVh3ekiv7LKtGNb6XAAKB9mTahBLOmWBqz8Ql8dqZ6Qxb5gbOZGWj3ypH8aAmzHrwHAAxP044i5QZRiaoN+F/9yLYiXJjIzrlu+xNLYIBUXWa6dzspJ14OV9RzAMDYWJy0i5lAxFc+80h50V/UfiyyB9qMSFltsugrVRWurmXhr27OBI3m7Q+Tg8utFLbq2YJ856sUYTJuIKdrgPIMwrXgS7CB8bd3c0+36XgnYBvk/Lw8lMral0yItCoHXqMSPnt9vW8daP0H4pbkB1H4QbCB//9FAAAAAElFTkSuQmCC">${web.title}</A>
</#list>
</DL><p>
<#else>
<DT><A HREF="${webSite.url}" ADD_DATE="1579405324" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACXklEQVQ4jZWTT0hUURjFz3ffn3FGZ9RMTamFBS00KIgiKAIhCIqCiBGCCIKoXbtatchq61JI2gS1GmmR4MrAIGghriKpaJOZ6YzMvHHmvZl377vvfi1egxoV9e0ul/Pju+ecCwAAMwHAiXn/zKk34U38xwgAwDgIAIQW15yO1NTJuebs8dnawX8H3AcDAEtS2oOx3LZzFpwXR6fY+VcAAQCUII5AUVnGrMSQvQ/p5J5F65m/B/wcEwEsQaxgsYTWK9AJgAyIGAW2fgXYO04hCARAEgBiD55z7BUXWJiKIvno3Sh9+/sGIYElwFKAQxJBrVuDeI/dJ24Zx1oYWgjuYWnJ/SOAA4bxGSYw4CZbxTsURLZ5LBtgTbo36sk87Ned08OFLUjLxGSDIILxAeNrmHoc781zeq3LeimbzZLqzdhhsxT1dLVf7B5x8wCAQsFKAJzEaOoG8SbB1GOYumZ3v+cWD6MRdcSjflyfcCrK2+XA5FJ0GgCQz3NiYmIdaz82SBk2UoMJVC/pGCDun15e72RLllZVh3ekiv7LKtGNb6XAAKB9mTahBLOmWBqz8Ql8dqZ6Qxb5gbOZGWj3ypH8aAmzHrwHAAxP044i5QZRiaoN+F/9yLYiXJjIzrlu+xNLYIBUXWa6dzspJ14OV9RzAMDYWJy0i5lAxFc+80h50V/UfiyyB9qMSFltsugrVRWurmXhr27OBI3m7Q+Tg8utFLbq2YJ856sUYTJuIKdrgPIMwrXgS7CB8bd3c0+36XgnYBvk/Lw8lMral0yItCoHXqMSPnt9vW8daP0H4pbkB1H4QbCB//9FAAAAAElFTkSuQmCC">${webSite.title}</A>
</#if>
</#list>
</DL><p>
</DL><p>
 
 
 
生成對應的文件實體(使用json或excel為數據源的同學可略過這步)
package com.mym.pojo;
 
 
 
 
import java.util.List;
 
 
/**
* (Bookmark)實體類
*
* @author makejava
* @since 2021-01-12 13:40:52
*/
public class Bookmark {
 
private Integer luid;
 
private String guid;
 
private Integer parentId;
 
private String title;
 
private String url;
 
private String path;
 
private Integer orderIndex;
 
private Integer property;
 
private Integer folder;
 
private List<Bookmark> child;
 
 
 
public Integer getLuid() {
return luid;
}
 
 
public void setLuid(Integer luid) {
this.luid = luid;
}
 
public String getGuid() {
return guid;
}
 
 
public void setGuid(String guid) {
this.guid = guid;
}
 
public Integer getParentId() {
return parentId;
}
 
 
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
 
public String getTitle() {
return title;
}
 
 
public void setTitle(String title) {
this.title = title;
}
 
public String getUrl() {
return url;
}
 
 
public void setUrl(String url) {
this.url = url;
}
 
public String getPath() {
return path;
}
 
 
public void setPath(String path) {
this.path = path;
}
 
public Integer getOrderIndex() {
return orderIndex;
}
 
 
public void setOrderIndex(Integer orderIndex) {
this.orderIndex = orderIndex;
}
 
public Integer getProperty() {
return property;
}
 
 
public void setProperty(Integer property) {
this.property = property;
}
 
public Integer getFolder() {
return folder;
}
 
 
public void setFolder(Integer folder) {
this.folder = folder;
}
 
 
public List<Bookmark> getChild() {
return child;
}
 
 
public void setChild(List<Bookmark> child) {
this.child = child;
}
}
 
maven引入freemarker
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
 
生成書簽文件代碼(博主寫到了某個項目的接口里)
此處因為本人的書簽只有簡單兩層,所以代碼如此,大家根據自己實際需求改動
public String createHtml(Bookmark bookmark) {
Writer out = null;
Writer writer = null;
try {
//查詢父級書簽(即無文件夾書簽和文件夾)
List<Bookmark> list = bookmarkService.findBookmark(bookmark);
//查詢文件夾內的書簽
List<Bookmark> list2 = bookmarkService.findBookmarkChild(bookmark);
for (int i = 0; i <list.size() ; i++) {
if(list.get(i).getFolder() == 1){
list.get(i).setChild(list2);
}
}
 
//使用Configuration配置freemarker的路徑
Configuration cc = new Configuration();
cc.setDirectoryForTemplateLoading(new File("d:/freemarker/templates"));
Map root = new HashMap();
root.put("list", list);
System.out.println("===="+list.size());
//讀取ftl模版
Template template = cc.getTemplate("bookmarker.ftl");
//設置輸出編碼
template.setEncoding("UTF-8");
out = new OutputStreamWriter(System.out,"UTF-8");
template.process(root, out);
//生成html文件路徑
File fileDir = new File("d:/freemarker/create/");
FileUtils.forceMkdir(fileDir);
//輸出的文件名
File output = new File((new StringBuilder()).append(fileDir).append("1.html").toString());
// Writer writer = new FileWriter(output);
writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(output),"UTF-8"));
template.process(root, writer);
writer.close();
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(writer != null){
writer.close();
}
if(out != null){
out.close();
}
}catch (Exception e){
 
}
 
}
return null;
}
 
運行即可
via瀏覽器的書簽格式和chrome的書簽格式一致,其它書簽格式需要改模版。各位同學自行研究
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM