抓取 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

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

评论

  1. 4 年前
    2021-2-12 0:21:10

    新年快乐!

    • 博主
      阿小州
      4 年前
      2021-2-12 11:35:04

      新年快乐!

  2. 笔稽菌
    4 年前
    2021-2-02 22:37:38

    tql,这个可以在博客换主题的时候用

    • 博主
      笔稽菌
      4 年前
      2021-2-04 12:12:42

      嗯,但是换主题时推荐将主题改为wp默认的主题,有些主题是不兼容的,比如Sakura

发送评论 编辑评论


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