README.zh-CN

m2w 2: Markdown to WordPress




基于Python将本地markdown推送和更新至Wordpress

教程: Docker系列 WordPress系列 WordPress上传或更新Markdown的最佳实践-m2w 2.0

注意:m2w v2.5将支持WordPress REST API,但目前还是开发版本。如果m2w v2.5已经开发测试完成,我们会提交一个稳定版本供大家使用。目前仅推荐大家使用m2w v2.2.11。不便之处,敬请谅解!

内容列表

背景

m2w 是一个简单易用的自动上传和更新 markdown 到 WordPress 的工具,m2w 1.0 的开发工作已经在 v1.0.7 中被冻结。 m2w 1.0 对大多数人来说已经足够强大了,但有些特性对使用者不太友好:

  • 必须分配旧的或新的路径来存储博文,这意味着使用者无法随意放置文件。
  • 无法同时对多个站点进行管理。

你仍然可以找到m2w 1.0的使用说明(/),但我原则上不再维护m2w 1.0了。

现在,更强大的m2w 2来和大家见面啦!m2w 2 具有以下特点:

  • m2w 1.0 相比,使用 和config/user.json 略微不同的方式维护用户信息。
  • 可以开心地保留原有的文件结构 (~ ̄▽ ̄)~ 。
  • 通过多个legacy_*.json 同时管理多个网站。
  • 只需要使用1个 python 脚本 myblog.py 而不是两个(m2w 1.0 中的 update.pyupload.py)。
  • 忽略重复的新markdown的上传操作(v2.2.4+)。该特性对于用户从m2w 1.0升级到m2w 2十分友好!
  • 像m2w 1.0 稳定且好用!

安装

  1. poetry 安装方式

有关poetry的安装请查看官方文档Introduction | Documentation | Poetry – Python dependency management and packaging made easy (python-poetry.org)

  1. 下载随2.3.0更新上传的位于poetry 目录下的pyproject.tomlpoetry.lock,放在一个你喜欢并且容易找到的文件夹
  2. 在目录下运行poetry install
  3. 查看接下来的使用教程部分

  4. Anaconda安装

建议使用 Conda 来管理 Python 版本和相关依赖项。这是一个第3方示例教程:《win10安装 Anaconda3》。自己找找,教程很多的 (~ ̄▽ ̄)~

依赖项:

“`python
# Python 3.7.4 is the version I use m2w. I’m not sure whether it could work well in more advanced Python versions.
python_requires=’>=3.7.4′

# Dependencies
install_requires=[
“python-frontmatter>=1.0.0”,
“markdown>=3.3.6”,
“python-wordpress-xmlrpc>=2.3”
]
“`

  1. 官方pip安装

2022-12-10 之后,我将m2w 2 上传到 PyPi,这样你只需要在Shell中运行pip install m2w即可安装。

考虑到不同源同步延迟的可能性,你可以指定m2w 2的版本号和源:

bash
pip install -i https://pypi.org/simple m2w

  1. 直接下载该仓库中的代码(不推荐)

如果你采用这种方式,你还需要在环境中安装以下三个包

python-frontmatter,markdown,python-wordpress-xmlrpc

建议安装最新版本的m2w 2

使用

v2.2.11

  1. 通过pip或这个Github repotory安装 m2w。
  2. 新建文件<path01>/myblog.py文件(名字随便取),这是一个示例。将myblog.py文件中的path_m2w赋值为<path02>
# Absolute path of m2w
path_m2w = '<path02>'
  1. 新建文件<path02>/config/user.json,这是一个示例。根据实际情况修改参数即可。你可以创建很多个类似于web01的网站/帐户喔!参数解释如下:
  2. domain,username,password:WordPress站点相关信息,比如站点URL、帐户名、密码。
  3. path_markdown:添加任意多的顶级文件夹 (~ ̄▽ ̄)~
  4. post_metadata:默认类别信息。有分类(category)、标签(tag)和状态(status)3个属性。
  5. websites:可以添加任意数量的帐户 (~ ̄▽ ̄)~
  6. path_legacy_json:不用改,保持原样。它是记录md5值用的,本质上是一个Python Dict的json版本。
"web01": {
        "domain": "https://domain-01.com",
        "username": "username-01",
        "password": "password-01",
        "path_markdown": [
            "E:/Github/m2w/@test/main",
            "E:/Github/m2w/@test/main2"
        ],
        "post_metadata": {
            "category": ["test"],
            "tag": ["test"],
            "status": "publish"
        },
        "path_legacy_json": "/config/legacy"
    }
  1. 最后,运行脚本:
python '<path01>/myblog.py'

v2.3.0+

  1. 安装步骤中部署的环境中(pip安装方式则是系统环境),下载m2w仓库中的myblog.py文件到环境所在文件夹下

  2. 运行myblog.py文件

  3. 首次运行可能会出现提示配置文件config.ini已在目录下生成,请填写配置后重新启动程序,以下是相关配置项设置

    “`ini
    [path]
    m2w_path = D:\Programing\GitHub\MyGithub\m2w_test

    [upload]
    force_upload = False
    verbose = True

    “`

    • m2w_path安装步骤中环境文件夹所在的位置,默认生成在myblog.py运行的当前文件夹

    • force_upload:是否开启强制上传,默认是False

    • verbose:是否开启控制台打印输出,默认是True

  4. 配置好config.ini后,再次运行myblog.py,有可能出现提示

    配置文件user.json已在目录{config.ini中配置的地址}\config下生成,请填写配置后重新启动程序,以下为相关配置项设置

    json
    {
    "web_test": {
    "domain": "https://domain-01.com",
    "username": "username-01",
    "password": "password-01",
    "application_password":"xxxxxx",
    "path_markdown": [
    "E:/Github/m2w/@test/main",
    "E:/Github/m2w/@test/main2"
    ],
    "post_metadata": {
    "category": [
    "test"
    ],
    "tag": [
    "test"
    ],
    "status": "publish"
    },
    "path_legacy_json": "/config/legacy"
    }
    }

    • domain,username,password:WordPress站点相关信息,比如站点URL、帐户名、密码。

    • application_password:站点的应用程序密码,入口在个人资料->应用程序密码,请和站点密码区别开来。

      注:如果你配置了应用程序密码,程序将默认使用rest_api方式更新文章,反之则使用client方式

    • path_markdown:添加任意多的顶级文件夹(也就是该路径下存有待上传的.md文件)

    • post_metadata:默认类别信息。有分类(category)、标签(tag)和状态(status)3个属性。

    • path_legacy_json:不用改,保持原样。它是记录md5值用的,本质上是一个Python Dict的json版本。

    如果想针对多个网站做同步设置,只需要做如下设置

    json
    {
    "web-1":{xxxxxx},
    "web-2":{xxxxxx},
    "web-3":{xxxxxx},
    ………………
    }

    然后根据配置项所需内容给每个网站填写上对应的参数即可

  5. 当完成前两步配置后,再次运行myblog.py,不出意外的话就会出现上传成功的提示了

项目展示

如下图所示,只需要一行python myblog.py,即可自动更新或上传markdown喔!

Typora_zKwwaE10Qe

Q&A

  1. Q:上传文章的时候报错httpx.ConnectError: [Errno 11001] getaddrinfo failed

A:大概是网站地址没有写对,首先检查地址是否配置正确,请不要在url后面加资源地址如https://xxx.com/xx/xx,只填写到xx.com即可

  1. Q:使用REST_API方式上传的时候可以正常获取文章、tag列表,但是上传却一直失败

A:REST_API使用的是应用程序密码,而不是网站的登录密码,请检查application_password配置项是否类似xxxx xxxx xxxx xxxx xxxx的格式,在最新版本使用Rest_API失败后会自动尝试使用Client重新上传,所以不用担心。

  1. Q:我的服务器在国内但是上传速度慢并且经常失败

A:如果开了代理,请将自己的网站加入到过滤地址内,尤其是CFW(clash for windows)用户。

相关仓库

维护者

@huangwb8

如何贡献

非常欢迎你的加入!提一个 Issue 或者提交一个 Pull Request。

m2w遵循 Contributor Covenant 行为规范。

贡献者

@FoxSuzuran

使用许可

m2w项目采用MIT license。详见LICENSE

No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next