Puppeteer 使用实战:如何将自己的 CSDN 专栏文章导出并用于 Hexo 博客(三)


往期


效果

  • 写了一个 node 脚本用来批量处理 md 文件

  • 本期用的基本上是 node

    请添加图片描述

  • 添加终端控制

    在这里插入图片描述

将文章信息导出

首先在爬取专栏页数的时候就收集好了信息,我们把信息导出到外部 json

在这里插入图片描述

然后再脚本里引入 ,就可以使用这个 json

const id2info = JSON.parse(
  await fs.readFileSync(`${__dirname}\\id2info.json`, "utf-8")
);

适配 hexo 的文章模板

我们可以看到 hexo 的每一个 page 是有一些配置的,我也想给导出的这些文章批量设置一下

在这里插入图片描述

观察一下导出的文件,可以得出一些规律

  • 文章开头有 @toc[] 或者 @toc[](文字),然而 hexo 并不支持,需要替换掉
  • 有些文章没有这些,就可以在内容开头直接添加即可

在这里插入图片描述
这里我是使用正则直接匹配分割

const reg = /\@\[toc\]\(.*?\)|\@\[toc\]/i;
// ....
const content = fs.readFileSync(eachArticlePath, "utf8");
/**
 * 拼接文章内容:文章分两种情况
 * - 一种是头部有 @[toc]()之类的
 * - 另一种是什么都没有的
 */
if (content.match(reg) !== null) {
  const splitContent = content.split(reg)[1];
  afterContent = `${replaceContent}\n${splitContent}`;
} else {
  afterContent = `${replaceContent}\n${content}`;
}

导出的文章路径问题

通过 csdn 导出的文章,如果 title 中有一些特殊符号的,那么导出的时候会帮你替换成 _,因为 Windows 中不允许特殊字符在路径中

在这里插入图片描述
为了不改变之前的 title,我又写了一个 filePath 专门用来读文章
在这里插入图片描述

终端控制执行脚本

这里写了个终端的函数,如果选择 y,那么就执行脚本

在这里插入图片描述
需要引入 readline 以及 exec ,简单的使用逻辑可以看一下我写的:

import readline from "readline";
import { exec } from "node:child_process";
// ...
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
rl.question("是否立即处理成 hexo 文章? y/n:", (answer) => {
  if (answer === "y") {
    // 执行 npm run build 命令
    exec("modify.cmd", (err, stdout, stderr) => {
      if (err) {
        console.error(err);
        return;
      }
      console.log("处理完成");
      rl.close();
    });
  } else {
    rl.close();
  }
});

其中的 cmd 命令很简单,就是 node 脚本.js 即可运行

代码整理

花了点时间抽离了一下代码,这样入口文件更简洁了,每个功能也都独立出来,方便修改和查错,欢迎使用并 start ~代码仓库

在这里插入图片描述

结尾

基本上文章已经批量处理好了,可以放到 hexo 里生成了!

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值