前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抓取WordPress文章转为Hexo并自动发布

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

作者头像
iVampireSP.com
发布2021-03-12 10:12:28
5940
发布2021-03-12 10:12:28
举报
文章被收录于专栏:iVampireSPの物语

结构目录

起因

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

很快啊,我就想起了Hexo。于是立马新建文件夹,开始了这个简单的项目

流程

分析WordPress的REST API

具体看这:https://developer.wordpress.org/rest-api/

我们这里只要用到这种API就行:

代码语言:javascript
复制
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"时生成的文件

代码语言:javascript
复制
---
title: Post # 文章标题
date: 2021-01-30 23:09:20 # 发布时间
tags: # 标签
---
# 正文

由于标签名称的获取方法比较复杂,可能会调用到很多的API。所以这里就不做这个功能了,可能会被防火墙gank。

代码: PHP

获取文章并写入到文件

这里我就简单粗暴的解决一下获取并解析JSON

代码语言:javascript
复制
// 获取并解析JSON
$json = json_decode(file_get_contents('https://ivampiresp.com/wp-json/wp/v2/posts?per_page=10&page=1'), true);

然后使用foreach遍历数组,在将内容输入到文件即可

代码语言:javascript
复制
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);
}

这是最终的代码

代码语言:javascript
复制
<?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函数就行。

代码语言:javascript
复制
// 部署
exec("cd Hexo && hexo g");

完成

至此几乎已经完成了,接下来只要做亿些优化即可

代码语言:javascript
复制
<?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

这是我的新项目:https://memory.lo-li.art

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构目录
  • 起因
  • 流程
    • 分析WordPress的REST API
    • 代码: PHP
      • 获取文章并写入到文件
        • 自动部署
        • 完成
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档