iVampireSP.com
我们一直都在为梦想而前进着。
iVampireSP的物语

抓取WordPress文章转为Hexo并自动发布

起因

由于最近填坑时没有什么好点子,也算是填累了。然后看了看我的树莓派,打算整点活。

很快啊,我就想起了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

尽快代码还有一些不完善的地方,这里就需要大家自由发挥啦

iVampireSP.com

文章作者

即使有些奇怪,那也是你的可爱之处。

发表评论

textsms
account_circle
email

iVampireSP的物语

抓取WordPress文章转为Hexo并自动发布
这些站点都是我熟人的站点,并且也和他们说过了。大家千万不能随意爬取别人站点的文章。
扫描二维码继续阅读
2021-01-31