起因
由于最近填坑时没有什么好点子,也算是填累了。然后看了看我的树莓派,打算整点活。
很快啊,我就想起了Hexo。于是立马新建文件夹,开始了这个简单的项目
流程
分析WordPress的REST API
具体看这:https://developer.wordpress.org/rest-api/
我们这里只要用到这种API就行:
xxx.com/wp-json/wp/v2/posts?per_page=10&page=1
意为:获取第一页,每页10篇。
接着分析一下JSON
id | 文章ID |
date | 发布时间 |
slug | 固定链接名称(?) |
link | 原文链接 |
title.rendered | 文章标题 |
content.rendered | 文章内容 |
excerpt.rendered | 文章概要 |
大概我们就用到这么多,接下来我们来分析一下hexo new "Post"时生成的文件
--- title: Post # 文章标题 date: 2021-01-30 23:09:20 # 发布时间 tags: # 标签 --- # 正文
由于标签名称的获取方法比较复杂,可能会调用到很多的API。所以这里就不做这个功能了,可能会被防火墙gank。
代码: PHP
获取文章并写入到文件
这里我就简单粗暴的解决一下获取并解析JSON
// 获取并解析JSON
$json = json_decode(file_get_contents('https://ivampiresp.com/wp-json/wp/v2/posts?per_page=10&page=1'), true);
然后使用foreach遍历数组,在将内容输入到文件即可
foreach ($json as $array) {
$title = $array['title']['rendered'];
$date = str_replace("T", " ", $array['date']);
$content = $array['content']['rendered'];
$write_content = <<<EOF
---
title: $title
date: $date
tags: Fetch
---
$content
EOF;
file_put_contents("_posts/$title.md", $write_content);
}
这是最终的代码
<?php
/**
* 抓取WordPress文章转为hexo
* Author iVampireSP.com
* Blog iVampireSP.com
*/
// 获取并解析JSON
$json = json_decode(file_get_contents('json.json'), true);
foreach ($json as $array) {
$title = $array['title']['rendered'];
$date = str_replace("T", " ", $array['date']);
$content = $array['content']['rendered'];
$write_content = <<<EOF
---
title: $title
date: $date
tags: Fetch
---
$content
EOF;
file_put_contents("_posts/$title.md", $write_content);
}
如果你仔细看我的代码的话,你会发现获取json从文件中获取了。因为这样在开发时可以更快点。
自动部署
将该文件置于hexo同级目录或上级目录下(路径不同,代码也不同)。这里我置于了上级目录,Hexo 的文件夹名称为“Hexo”
其实自动部署非常简单,因为也就是一句命令的事,加个exec函数就行。
// 部署
exec("cd Hexo && hexo g");
完成
至此几乎已经完成了,接下来只要做亿些优化即可
<?php
/**
* 抓取WordPress文章转为hexo
* Author iVampireSP.com
* Blog iVampireSP.com
*/
# Hexo 目录
$hexo_path = "Hexo";
/* 站点列表 */
$site_list = json_decode(file_get_contents('sites.json'), true);
echo '本次要抓取' . count($site_list) . "个站点。\n";
foreach ($site_list as $site_list) {
echo "正在抓取: $site_list ...\n";
$json = json_decode(file_get_contents("https://$site_list/wp-json/wp/v2/posts?per_page=20&page=1"), true);
foreach ($json as $array) {
$title = str_replace("|", "-", $array['title']['rendered']);
$date = str_replace("T", " ", $array['date']);
$content = $array['content']['rendered'];
$link = $array['link'];
$filename = md5($site_list) . '-' . md5($title) . '.md';
$write_content = <<<EOF
---
title: $title 由 $site_list
date: $date
tags: $site_list
---
$content
**该文章来自[$link]($link)**
**原作者同意后,MemoryArt将会拉取文章,但是请不要刻意的爬取本站。**
EOF;
echo <<<EOF
-------------------------------------
操作文件
$site_list -> $title
↓
$filename \n
EOF;
file_put_contents("$hexo_path/source/_posts/$filename", $write_content);
}
}
/* 全部完成后开始部署 */
echo "#####################################\n抓取写入完成,正在生成Hexo静态文件中... \n";
exec("cd $hexo_path && hexo g");
echo "全部完成!\n";
这些站点都是我熟人的站点,并且也和他们说过了。大家千万不能随意爬取别人站点的文章。
Github: https://github.com/iVampireSP/Fetch_WordPress_To_Hexo
这是我的新项目:http://memoryart.nwl.im
尽快代码还有一些不完善的地方,这里就需要大家自由发挥啦
新年快乐!
新年快乐!
tql,这个可以在博客换主题的时候用
嗯,但是换主题时推荐将主题改为wp默认的主题,有些主题是不兼容的,比如Sakura