1. 程式人生 > 其它 >匯出部落格園的內容並生成markdown檔案

匯出部落格園的內容並生成markdown檔案

作者:Grey
原文地址:匯出部落格園的內容並生成markdown檔案

部落格園支援備份功能:

操作時間是:

工作日18:00之後、8點之前或週六、週日進行備份。

點選備份,可以選擇時間段,匯出以後,是xml格式,樣例格式如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
    <channel>
        <title>部落格園-xxx</title>
        <link>https://www.cnblogs.com/xxx</link>
        <description>xxxx</description>
        <language>zh-cn</language>
        <lastBuildDate>Mon, 28 Jun 2021 12:48:06 GMT</lastBuildDate>
        <pubDate>Mon, 28 Jun 2021 12:48:06 GMT</pubDate>
        <ttl>60</ttl>
        <item>
            <title>文章3</title>
            <link>http://www.baidu.com</link>
            <dc:creator>作者名稱</dc:creator>
            <author>作者名稱</author>
            <pubDate>Mon, 21 Jun 2021 14:01:00 GMT</pubDate>
            <guid>http://www.baidu.com</guid>
            <description><![CDATA[這裡是正文資訊]]></description>
        </item>
        <item>
            <title>文章1</title>
            <link>http://www.baidu.com</link>
            <dc:creator>作者名稱</dc:creator>
            <author>作者名稱</author>
            <pubDate>Mon, 21 Jun 2021 14:01:00 GMT</pubDate>
            <guid>http://www.baidu.com</guid>
            <description><![CDATA[這裡是正文資訊]]></description>
        </item>
        <item>
            <title>文章2</title>
            <link>http://www.baidu.com</link>
            <dc:creator>作者名稱</dc:creator>
            <author>作者名稱</author>
            <pubDate>Mon, 21 Jun 2021 14:01:00 GMT</pubDate>
            <guid>http://www.baidu.com</guid>
            <description><![CDATA[這裡是正文資訊]]></description>
        </item>
    </channel>
</rss>

可以通過解析xml,拿到每篇文章的內容標題,並且生成markdown文件,程式碼如下:

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.ParseException;
import java.util.Date;
import java.util.Iterator;

/**
 * 部落格園xml轉md文件
 */
public class App {
    // 指定你要匯出的目錄
    static final String path = "C:\\Users\\zhuiz\\OneDrive\\blogs";

    public static void main(String[] args) throws DocumentException, IOException, ParseException {
        SAXReader reader = new SAXReader();
        URL url = App.class.getClassLoader().getResource("sample.xml");
        Document document = reader.read(url);
        Element root = document.getRootElement();
        Element channel = null;
        for (Iterator<Element> it = root.elementIterator(); it.hasNext(); ) {
            channel = it.next();
        }
        for (Iterator<Element> it = channel.elementIterator("item"); it.hasNext(); ) {
            Element item = it.next();
            String title = item.element("title").getTextTrim();
            String link = item.element("link").getTextTrim();
            String prefix = "---\n" +
                    "title: '" + title + "'\n" +
                    "date: " + format(item.element("pubDate").getTextTrim()) + "\n\n\n\n" +
                    "---\n\n\n\n" +
                    "<meta name = \"referrer\" content = \"no-referrer\" />\n\n\n\n";
            inputFile(title(title), link + "\n\n\n\n\n" + prefix + item.element("description").getText());
        }
    }

    // 替換windows中非法檔名
    public static String title(String invalidTitle) {
        return invalidTitle.replaceAll("[/\\\\:*?<>|]", "") + ".md";
    }

    public static void inputFile(String title, String content) throws IOException {
        File file = new File(path, title);
        file.createNewFile();
        FileUtil.appendString(content, file, "UTF-8");

    }

    static String format(String stringDate) {
        return DateUtil.format(new Date(stringDate), "yyyy-MM-dd HH:mm:ss");
    }
}

使用說明:

  1. path指定你要匯出的markdown檔案放到哪裡
  2. 使用者匯出的xml檔案重新命名成sample.xml放在resources資料夾中
  3. 執行App.java

效果

原始碼地址:

xml-handler

待完善:

  1. 處理重名部落格。

  2. 程式碼可以重構一下。