如何导出我的书签并将它们导入 table?
How can I export my bookmarks and import them into a table?
多年来我收集了数百个书签,我想将它们放入可搜索的 table 中,其中包含类别、类型、描述等额外信息。
我的第一次尝试是手动将它们放入 JSON 文件中,然后使用 DataTables 插件显示它们,但是,这既乏味又耗时。
第二次尝试是使用 Wordpress 并使用高级自定义字段来执行此操作,但仍然非常乏味。
显然,我可以将我的书签导出为 HTML 文件,我正在考虑对该文件进行编辑和样式化以满足我的需要,但它绝对是巨大的,并且还包含大量无关信息。我一直在尝试使用此文件的 CSV 转换将其导入到各种 Wordpress 插件中,这些插件说它们提供了确切的功能以了解其用途。我也尝试过对导出到 JSON 文件的 firefox 备份做类似的事情,但还是没有成功。
我知道我将不得不手动输入一些信息,但我正在尝试将工作量减少大约三分之一。我会以错误的方式解决这个问题吗?有可能吗?只是想知道是否有人尝试过做同样的事情以及他们是如何做到的。
您可以使用以下方法解析从 chrome 导出的文件:
这里我使用 SAX 解析器从书签中解析和提取 url 和 link。
下面三个类将解析xml并打印书签url标题和link.
您可以将它导出到 csv 中,或者您可以以更好的方式使用它来动态生成 table,您可以从中进行搜索。
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
public class BookmarkReader {
public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
try {
xmlReader.setFeature(
"http://apache.org/xml/features/continue-after-fatal-error",
true);
} catch (SAXException e) {
System.out.println("error in setting up parser feature");
}
xmlReader.setContentHandler(new ContentHandler());
xmlReader.setErrorHandler(new MyErrorHandler());
xmlReader.parse("C:\Users\chetankumar.p\Documents\bookmarks_12_2_16.html");
} catch (Throwable e) {
System.out.println(e.getMessage());
}
}
}
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ContentHandler extends DefaultHandler {
class Bookmark {
public String title;
public String href;
}
Bookmark bookmark;
List<Bookmark> bookmarks = new ArrayList<>();
@Override
public void endDocument() throws SAXException {
for (Bookmark bookmark1 : bookmarks) {
System.out.println("title : " + bookmark1.title);
System.out.println("title : " + bookmark1.href);
}
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("a")) {
bookmark = new Bookmark();
System.out.println("href ::: " + attributes.getValue("HREF"));
bookmark.href = attributes.getValue("HREF");
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("a")) {
bookmarks.add(bookmark);
bookmark = null;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (bookmark != null) {
bookmark.title = new String(ch, start, length);
}
}
}
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class MyErrorHandler implements ErrorHandler {
private String getParseExceptionInfo(SAXParseException spe) {
String systemId = spe.getSystemId();
if (systemId == null) {
systemId = "null";
}
String info = "URI=" + systemId + " Line="
+ spe.getLineNumber() + ": " + spe.getMessage();
return info;
}
public void warning(SAXParseException spe) throws SAXException {
System.out.println("Warning: " + getParseExceptionInfo(spe));
}
public void error(SAXParseException spe) throws SAXException {
String message = "Error: " + getParseExceptionInfo(spe);
System.out.println(message);
}
public void fatalError(SAXParseException spe) throws SAXException {
String message = "Fatal Error: " + getParseExceptionInfo(spe);
System.out.println(message);
}
}
这是一个很好的挑战,谢谢。基本上,我所做的是将导出的书签保存为 HTML,然后创建一个包含空 table 的简单页面。然后我的 JS 这样做:
$(function() {
var example = $("#example").DataTable({
"responsive": true,
"columns": [
{
"title": "Title",
"data": "text"
},{
"title": "Date added",
"data": "date",
"render": function(d){
return moment(d, "X").format("DD/MM/YYYY");
}
},{
"title": "URI",
"data": "href",
"render": function(d){
return $("<a></a>",{
"text": d,
"href": d
}).prop("outerHTML");
}
}
],
"initComplete": function(settings, json) {
$.get("bookmarks_12_2_16.html", function( data ) {
$(data).find("dl").children("dt").children("a").each(function(k, v){
if(!~~$(v).attr("href").indexOf("http")){
example.row.add({
"href": $(v).attr("href"),
"text": $(v).text(),
"date": $(v).attr("add_date")
});
}
});
example.draw();
});
}
});
});
基本上它 get
是 HTML 并在 dl
中迭代 dt
并且,如果 href
是 http
或 https
,它将它添加到具有正确日期的 table(你的日期函数可能必须有所不同,因为我在英国并且我正在使用 momentjs).希望对您有所帮助。
Firefox 书签到 .xlsm [已解决]
我想出了如何将我的书签从 Firefox 中取出并放入 Excel。一个宏处理它们,其他宏可以让您了解工作表。
它使用:1.) Firefox,2.) SQLite3,3.) DOS,4.) Excel VBA,5.) NirCmd(可选)
您所要做的就是对书签进行分类,然后单击排序按钮。
这两个 PDF 提供了 BAT 文件的代码,并解释了如何设置宏的路径。更多说明在 xlsm 的 VBA 中。这三个文件在我的 Google 文档中。
我想我会分享这个,因为它很酷,可能对其他人有用。 . .也许有人可以改进我所拥有的,或者给我更多的想法。 . .也许这个 post 可以保持打开状态。
书签到CSV.pdf。 . .第一页提供了将您的书签放入 .CSV 文件所需了解的所有信息(这不会对您的实际书签做任何事情,它只是提取它们的副本。)。 . .然后,接下来的几页提供了正在发生的事情的详细信息。 . . https://drive.google.com/open?id=1xYWPQtijqCzk-1nzTsTb0ZUVKYJNFokR
自定义 UI Editor.pdf 。 . .配套信息,以及待设置的BAT文件代码。 . . https://drive.google.com/open?id=1G2AWBamOrbAo2ZNDtUyYdzegjKzz34DA
书签-p.xlsm。 . . Google Docs 上的预览不是很好。一些支持信息位于前四个工作表中。书签在第五张工作表中(见底部的标签)。 . . https://drive.google.com/open?id=1ZOuOBkdJjMx1T4xMUNG7sf6MDWurUqqy
使用 Chrome 商店的扩展来生成 JSON/CSV 输出。将其转换为 table 形式应该相当简单。
- Bookmarks to JSON/CSV(包括chrome历史记录)
- 书签到
JSON(基于根或文件夹)
- Bookmarks Table(仅查看,按日期)
多年来我收集了数百个书签,我想将它们放入可搜索的 table 中,其中包含类别、类型、描述等额外信息。
我的第一次尝试是手动将它们放入 JSON 文件中,然后使用 DataTables 插件显示它们,但是,这既乏味又耗时。
第二次尝试是使用 Wordpress 并使用高级自定义字段来执行此操作,但仍然非常乏味。
显然,我可以将我的书签导出为 HTML 文件,我正在考虑对该文件进行编辑和样式化以满足我的需要,但它绝对是巨大的,并且还包含大量无关信息。我一直在尝试使用此文件的 CSV 转换将其导入到各种 Wordpress 插件中,这些插件说它们提供了确切的功能以了解其用途。我也尝试过对导出到 JSON 文件的 firefox 备份做类似的事情,但还是没有成功。
我知道我将不得不手动输入一些信息,但我正在尝试将工作量减少大约三分之一。我会以错误的方式解决这个问题吗?有可能吗?只是想知道是否有人尝试过做同样的事情以及他们是如何做到的。
您可以使用以下方法解析从 chrome 导出的文件:
这里我使用 SAX 解析器从书签中解析和提取 url 和 link。
下面三个类将解析xml并打印书签url标题和link.
您可以将它导出到 csv 中,或者您可以以更好的方式使用它来动态生成 table,您可以从中进行搜索。
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
public class BookmarkReader {
public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
try {
xmlReader.setFeature(
"http://apache.org/xml/features/continue-after-fatal-error",
true);
} catch (SAXException e) {
System.out.println("error in setting up parser feature");
}
xmlReader.setContentHandler(new ContentHandler());
xmlReader.setErrorHandler(new MyErrorHandler());
xmlReader.parse("C:\Users\chetankumar.p\Documents\bookmarks_12_2_16.html");
} catch (Throwable e) {
System.out.println(e.getMessage());
}
}
}
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ContentHandler extends DefaultHandler {
class Bookmark {
public String title;
public String href;
}
Bookmark bookmark;
List<Bookmark> bookmarks = new ArrayList<>();
@Override
public void endDocument() throws SAXException {
for (Bookmark bookmark1 : bookmarks) {
System.out.println("title : " + bookmark1.title);
System.out.println("title : " + bookmark1.href);
}
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("a")) {
bookmark = new Bookmark();
System.out.println("href ::: " + attributes.getValue("HREF"));
bookmark.href = attributes.getValue("HREF");
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("a")) {
bookmarks.add(bookmark);
bookmark = null;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (bookmark != null) {
bookmark.title = new String(ch, start, length);
}
}
}
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class MyErrorHandler implements ErrorHandler {
private String getParseExceptionInfo(SAXParseException spe) {
String systemId = spe.getSystemId();
if (systemId == null) {
systemId = "null";
}
String info = "URI=" + systemId + " Line="
+ spe.getLineNumber() + ": " + spe.getMessage();
return info;
}
public void warning(SAXParseException spe) throws SAXException {
System.out.println("Warning: " + getParseExceptionInfo(spe));
}
public void error(SAXParseException spe) throws SAXException {
String message = "Error: " + getParseExceptionInfo(spe);
System.out.println(message);
}
public void fatalError(SAXParseException spe) throws SAXException {
String message = "Fatal Error: " + getParseExceptionInfo(spe);
System.out.println(message);
}
}
这是一个很好的挑战,谢谢。基本上,我所做的是将导出的书签保存为 HTML,然后创建一个包含空 table 的简单页面。然后我的 JS 这样做:
$(function() {
var example = $("#example").DataTable({
"responsive": true,
"columns": [
{
"title": "Title",
"data": "text"
},{
"title": "Date added",
"data": "date",
"render": function(d){
return moment(d, "X").format("DD/MM/YYYY");
}
},{
"title": "URI",
"data": "href",
"render": function(d){
return $("<a></a>",{
"text": d,
"href": d
}).prop("outerHTML");
}
}
],
"initComplete": function(settings, json) {
$.get("bookmarks_12_2_16.html", function( data ) {
$(data).find("dl").children("dt").children("a").each(function(k, v){
if(!~~$(v).attr("href").indexOf("http")){
example.row.add({
"href": $(v).attr("href"),
"text": $(v).text(),
"date": $(v).attr("add_date")
});
}
});
example.draw();
});
}
});
});
基本上它 get
是 HTML 并在 dl
中迭代 dt
并且,如果 href
是 http
或 https
,它将它添加到具有正确日期的 table(你的日期函数可能必须有所不同,因为我在英国并且我正在使用 momentjs).希望对您有所帮助。
Firefox 书签到 .xlsm [已解决]
我想出了如何将我的书签从 Firefox 中取出并放入 Excel。一个宏处理它们,其他宏可以让您了解工作表。
它使用:1.) Firefox,2.) SQLite3,3.) DOS,4.) Excel VBA,5.) NirCmd(可选)
您所要做的就是对书签进行分类,然后单击排序按钮。
这两个 PDF 提供了 BAT 文件的代码,并解释了如何设置宏的路径。更多说明在 xlsm 的 VBA 中。这三个文件在我的 Google 文档中。
我想我会分享这个,因为它很酷,可能对其他人有用。 . .也许有人可以改进我所拥有的,或者给我更多的想法。 . .也许这个 post 可以保持打开状态。
书签到CSV.pdf。 . .第一页提供了将您的书签放入 .CSV 文件所需了解的所有信息(这不会对您的实际书签做任何事情,它只是提取它们的副本。)。 . .然后,接下来的几页提供了正在发生的事情的详细信息。 . . https://drive.google.com/open?id=1xYWPQtijqCzk-1nzTsTb0ZUVKYJNFokR
自定义 UI Editor.pdf 。 . .配套信息,以及待设置的BAT文件代码。 . . https://drive.google.com/open?id=1G2AWBamOrbAo2ZNDtUyYdzegjKzz34DA
书签-p.xlsm。 . . Google Docs 上的预览不是很好。一些支持信息位于前四个工作表中。书签在第五张工作表中(见底部的标签)。 . . https://drive.google.com/open?id=1ZOuOBkdJjMx1T4xMUNG7sf6MDWurUqqy
使用 Chrome 商店的扩展来生成 JSON/CSV 输出。将其转换为 table 形式应该相当简单。
- Bookmarks to JSON/CSV(包括chrome历史记录)
- 书签到 JSON(基于根或文件夹)
- Bookmarks Table(仅查看,按日期)