将Typecho文章、评论数据转换到Hexo格式的PHP脚本。
代码中有详细的注释,你可以进行深度定制。
可以将文章从Typecho格式转换为Hexo格式,保留分类与标签,且可以处理图片。
会将原来Typecho的cid保存到文章内的pid参数,在设置文章链接时可以直接使用:pid来载入,方便保留原来Typecho文章URL格式,如果你原来在文章URL里使用到了cid
如果图片是网络图片,也会下载下来存入相应的位置,且修改文章内的图片链接。
评论迁移是转换到ValineJS + leancloud评论系统方案的格式。
phpmyadmin: 4.7.9
typecho: 1.1 (17.10.30)
mysql: 5.6
hexo: 4.2.0
以上是我的环境。并不是说不是这个环境版本就不能用本方案,而是不保证非此版本一定能正常使用本方案。
请确保已安装PHP并设置好环境变量。
建议使用PHP7
进入phpmyadmin,选择typecho的数据库,依次将以下数据库表导出,格式为Json,放到脚本根目录。
数据库表前缀根据你的设置而异。如果你的数据库表前缀不是默认的"typecho_",在导出到Json文件后请将文件重命名,将表前缀改为默认的"typecho_"方便脚本读取。
typecho_comments
typecho_contents
typecho_metas
typecho_relationships
将你Typecho网站根目录的/usr文件夹复制到脚本根目录,目的是为了处理上传的文章附件。/usr下只需要uploads文件夹就够了。
请设置Hexo配置文件_config.yml
,将post_asset_folder
的值设置为true
为方便接下来程序的处理,先要执行另一个程序构建一个pid、category、type关系表的Json文件。
在脚本根目录执行以下指令构建配置文件:
php -f "./post_info.php"
执行完毕后即可。
程序不会自动创建文件夹,所以需要手动创建
在脚本根目录创建posts
,draft
,hidden
,waiting
文件夹。
其中,posts储存普通文章,draft储存草稿文章,waiting储存待审核文章,hidden储存隐藏的文章。
至此,全部准备工作已经完成,目录下的文件结构应该如下图所示,缺一不可。
编辑post.php
文件
找到第六行左右的$repo
变量,将内容改为你的Github Pages仓库信息,格式为user/repo@brunch
,分支为构建的静态文件分支。
可以参考默认值是如何填写的,比如我的是AyagawaSeirin/Blog@gh-pages
。
用来将图片链接换为JsDelivr链接。
如果你不想使用JsDelivr,想直接从源站读取图片,请编辑post.php
文件,找到第123~129行左右,将注释有"方案1"的代码解除注释,将注释有"方案2"的代码删除。
在脚本根目录执行以下指令执行文章迁移程序:
php -f "./post.php"
迁移时可能会比较慢,是因为正在处理文章中的图片文件,请耐心等待。
若出现Notice报错,请无视。
迁移完毕后,根目录下posts储存普通文章,draft储存草稿文章,hidden储存隐藏的文章。
建议进行手动检查是否有出错的地方。
鉴于独立页面较少,没有开发独立页面迁移的程序,建议手动迁移。
评论迁移是转换到ValineJS + leancloud评论系统方案的格式。
在脚本根目录执行以下指令执行文章评论迁移程序:
php -f "./comments_post.php"
迁移完毕后会将数据储存在根目录的comments_post.json
文件内。
登录LeanCloud,进入控制台,选择你的应用,“存储”=》“导入导出”=》“数据导入”
Class名称填写Comment
,然后“选择文件”,上传刚刚的comments_post.json
文件,单击“导入”按钮即可导入数据。
评论迁移是转换到ValineJS + leancloud评论系统方案的格式。
一次只能迁移一个独立页面,需要修改变量内容来决定当前迁移哪个独立页面。
编辑comments_page.php
文件
找到第5~6行左右,
编辑$url
变量内容,修改为你在Hexo的页面的相对链接(不需要斜杠\),
编辑$cid
变量内容,修改为独立页面在Typecho的cid。
可以参考默认值是如何填写的。
在脚本根目录执行以下指令执行独立页面评论迁移程序:
php -f "./comments_page.php"
迁移完毕后会将数据储存在根目录的comments_page_页面名称.json
文件内。
登录LeanCloud,进入控制台,选择你的应用,“存储”=》“导入导出”=》“数据导入”
Class名称填写Comment
,然后“选择文件”,上传刚刚生成的json文件,单击“导入”按钮即可导入数据。