域名过期后重新找回我的域名和wordpress文章

最后更新于 2023-09-24 56 次阅读


域名到期了之后没有及时备份,无法访问里面的文章,服务器里修改一下nginx好像可以但是不会,几个月等待域名过期并回收后,今天刚刚域名可以重新购买了,就重新设置了一下DNS,进入了网站,通过wordpress导出了数据,使用找到的python代码恢复了文章并且备份了所需数据,准备把原来的服务器destroy了看看有没有性价比的选择,毕竟一个服务器加一个GPT4是不能同时订阅的,花销太大了

from xml.dom.minidom import parse
import os

class XmlToMarkdown:
    """一个xml转markdown的小工具

        解析wordpress导出的xml文件, 并将其中的文章批量转换成markdown文件

    Args
    ----
    file : str
        指定从wordpress导出的xml文件  
    """

    def __init__(self, file: str) -> None:
        self.file = "WordPress-2023-06-24.xml"

    def _read_wordpress_xml(self) -> list:
        """解析wordpress导出的xml文件, 返回解析出的数据
        """
        posts = []

        # 解析 wordpress 导出的 xml 文件,并将内容写入字典
        with parse(self.file) as dom:
            elements = dom.documentElement
            items = elements.getElementsByTagName('item')

            for item in items:
                # 只解析 post_type 为 post 节点,即只解析文章,过滤掉附件、菜单等
                if item.getElementsByTagName('wp:post_type')[0].childNodes[0].data == 'post':
                    try:
                        # 单篇文章的内容
                        post = {
                            "title": item.getElementsByTagName('title')[0].childNodes[0].data,
                            "slug": item.getElementsByTagName('wp:post_name')[0].childNodes[0].data,
                            "date": item.getElementsByTagName('wp:post_date')[0].childNodes[0].data,
                            "lastmod": item.getElementsByTagName('wp:post_modified')[0].childNodes[0].data,
                            "content": item.getElementsByTagName('content:encoded')[0].childNodes[0].data,
                            "categories": [],
                            "tags": []
                        }
                        # 分类和标签的 Tag 都是 category, 而且可能有多条,此处做一个循环和判断
                        if item.getElementsByTagName('category'):
                            for cat in item.getElementsByTagName('category'):
                                if cat.getAttribute("domain") == 'category':
                                    post['categories'].append(cat.childNodes[0].data)
                                elif cat.getAttribute("domain") == 'post_tag':
                                    post['tags'].append(cat.childNodes[0].data)
                        # 单篇文章字典追加到文章列表中
                        posts.append(post)
                    except:
                        pass

        print(f"一共解析了{len(posts)}篇文章")
        return posts

    def to_md(self, path: str = None) -> None:
        """将解析出的数据写入markdown文件, 命名为`文章日期+文章名称.md`

        输出到指定位置或当前目录下的`output`文件夹中

        Args
        ----
        path : str
            指定输出文件的位置, 不指定默认为当前所在的目录
        """
        data = self._read_wordpress_xml()
        # 不指定 path, 则默认为当前文件所在的目录
        if path:
            path = path + "\\output"
        else:
            path = os.getcwd() + "\\output"

        # 创建 output 文件夹
        if not os.path.exists(path):
            os.mkdir(path)

        for post in data:
            # 定义 markdown 文件名
            filename = f"{post['date'][:10].replace('-', '')}-{post['title']}.md"

            with open(os.path.join(path, filename), encoding='utf-8', mode='a') as f:
                # 根据自己的文章模板构造写入内容
                text = f"""---
title: "{post['title']}"
slug: "{post['slug']}"
date: {post['date'].replace(' ', 'T') + '+08:00'}
lastmod: {post['lastmod'].replace(' ', 'T') + '+08:00'}
keywords: ""
description: ""\n
categories: {str(post['categories']).replace("'", '"')}
tags: {str(post['tags']).replace("'", '"')}
featuredImage: ""
toc: false
---\n
{post['content']}"""

                f.write(text)
        print('转换完成!')

if __name__ == '__main__':

    file = 'WordPress.xml'

    tool = XmlToMarkdown(file)
    tool.to_md()

参考:
将WordPress导出的xml转换为Markdown - NoteSth
MTools/XmlToMarkdown.py at 7ef55bd862d15dec72eb925c3dd59e58d92807e9 · sky123060/MTools · GitHub

最后更新于 2023-09-24