【问题标题】:How can I export my bookmarks and import them into a table?如何导出书签并将其导入表格?
【发布时间】:2017-04-14 02:26:32
【问题描述】:

多年来我收集了数百个书签,我想将它们放入可搜索的表格中,其中包含类别、类型、描述等额外信息。

我的第一次尝试是手动将它们放入 JSON 文件,然后使用 DataTables 插件显示它们,但是,这既乏味又耗时。

第二次尝试是使用 Wordpress 并使用高级自定义字段来执行此操作,但仍然非常乏味。

显然,我可以将我的书签导出为 HTML 文件,并且我正在考虑编辑和设置此文件的样式以满足我的需要,但它绝对是巨大的,并且还包含大量无关信息。我一直在尝试使用此文件的 CSV 转换将其导入到各种 Wordpress 插件中,这些插件说它们提供了这个确切的功能来了解可用性。我也尝试过对导出到 JSON 文件的 Firefox 备份做类似的事情,但还是没有运气。

我知道我必须手动输入一些信息,但我正试图将工作量减少大约三分之一。我会以错误的方式解决这个问题吗?甚至可能吗?只是想知道是否有人尝试过同样的事情以及他们是如何做到的。

【问题讨论】:

  • 您要为哪个浏览器导出书签?
  • Chrome,但据我所知,它们都导出为 html,firefox 也以 JSON 格式备份。我一直在寻找可以做我想做的插件 - 到目前为止没有运气。
  • 是的,同意。实现此目的的一种方法是再见解析导出的 html 文件,然后从中提取所有超链接和书签文本。
  • 我不久前写了一些东西,它使用 Papa Parse 来解析 CSV 文件并用结果填充 DataTable。如果您认为这会有所帮助,请告诉我,我会为您记录整个过程。

标签: html json csv datatables bookmarks


【解决方案1】:

这是一个很好的挑战,谢谢。基本上,我所做的是将导出的书签保存为 HTML,然后创建一个带有空表的简单页面。然后我的 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();
            });
        }
    });
});

基本上它gets HTML 并在dl 内迭代dts,如果hrefhttphttps,它会将其添加到具有正确日期的表中(由于我在英国并且我使用的是momentjs,因此您的约会功能可能会有所不同。)希望对您有所帮助。

【讨论】:

  • 你是救生员!我将在今天晚些时候尝试这个,但只要阅读它,我就能看到它是如何工作的。幸运的是我也在英国所以不应该改变太多/任何东西。非常感谢!
  • 只是给未来用户使用此示例代码的说明,您需要datatables.net 和 jQuery 以及如前所述的 momentjs(或者您可以删除日期代码)。
【解决方案2】:

您可以使用以下方法解析从 chrome 导出的文件:

这里我使用 SAX 解析器从书签中解析和提取 url 和链接。

以下三个类将解析xml并打印书签url标题和链接。

您可以将其导出到 csv 中,或者您可以以更好的方式使用它来动态生成可以搜索的表格。

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

【讨论】:

  • 这看起来很棒,不幸的是我根本不懂Java!也许我应该指定。但是,我可以阅读那里发生的一些事情,并且可以看到它是如何工作的——我想。请问,这会创建一个CSV文件吗?当您说使用它从 chrome 导出时,您是否将其作为另一个程序运行?抱歉,当谈到 Java 时,我完全是个菜鸟。我仍然给你打勾,因为我认为从 Java 的角度来看这是正确的。谢谢!
  • Chrome 会将文件导出为 html,如果您要打开文件,则它将为 xml 格式。然后该文件将成为该程序的输入。这个程序只会在 java 控制台上打印,如果你希望它导出为 csv,那么我会再次更新这个。
  • 因为我了解 JS 并且将使用 DataTables,所以我将使用 animatemouse 的解决方案,但是您的答案可能对使用 Java 遇到此问题的其他人有用,所以如果您认为这会有所帮助那就太好了!
【解决方案3】:

Firefox 书签到 .xlsm [已解决]


我想出了如何将我的书签从 Firefox 中取出并放入 Excel 中。一个宏会处理它们,而其他宏可以让您了解工作表。

它使用:1.) Firefox,2.) SQLite3,3.) DOS,4.) Excel VBA,5.) NirCmd(可选)

您所要做的就是对您的书签进行分类,然后单击排序按钮。

这两个 PDF 提供了 BAT 文件的代码,并解释了如何设置宏的路径。更多指令在 xlsm 的 VBA 中。这三个文件在我的 Google Docs 上。

我想我会分享这个,因为它很酷,可能对其他人有用。 . .也许有人可以改进我所拥有的,或者给我更多的想法。 . .也许这篇文章可以保持打开状态。


书签转CSV.pdf 。 . .这第一页提供了您需要知道的所有内容,将您的书签放入 .CSV 文件(这不会对您的实际书签做任何事情,它只是提取它们的副本。)。 . .然后,接下来的几页提供了正在发生的事情的详细信息。 . . https://drive.google.com/open?id=1xYWPQtijqCzk-1nzTsTb0ZUVKYJNFokR

自定义 UI 编辑器.pdf 。 . .支持信息,以及要设置的BAT文件代码。 . . https://drive.google.com/open?id=1G2AWBamOrbAo2ZNDtUyYdzegjKzz34DA

书签-p.xlsm 。 . . Google Docs 上的预览不是那么好。一些支持信息在前四个工作表中。书签在第五个工作表中(见底部的标签)。 . . https://drive.google.com/open?id=1ZOuOBkdJjMx1T4xMUNG7sf6MDWurUqqy

【讨论】:

    【解决方案4】:

    使用 Chrome 商店中的扩展程序生成 JSON/CSV 输出。将其转换为表格形式应该相当简单。

    【讨论】:

      猜你喜欢
      • 2022-06-20
      • 2014-01-22
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2011-09-14
      • 2021-07-28
      相关资源
      最近更新 更多