如何导出我的书签并将它们导入 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 并且,如果 hrefhttphttps,它将它添加到具有正确日期的 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 形式应该相当简单。