🚀用脚本助力博客搬家

简介: 🚀用脚本助力博客搬家

image.png

前言

由于某书慢慢变的热门推荐文章标题诡异,内容垃圾,登录麻烦等问题,又由于掘金社区的慢慢壮大,后来就慢慢写文章就主要在掘金社区了,但是在简书上写了好几年的笔记和文章,掘金到目前为止还不支持简书文章直接自动搬运,好在支持通过 Markdown 文件导入的方式搬运,由于之前已经通过脚本下载好了(用js脚本下载某书的所有文章),直接把本地的文章 Markdown 文件导入就行了,没想到,这只是个开始,本地导入后无法直接在线修改文章名称

下载到本地的文章

由于简书是 文集 的方式进行文章的分类,我用脚本下载后文章名称加了一个 文集 并用 - 进行拼接,方便本地浏览分类

image.png

选择文件后如下效果

image.png

发现无法修改要发布文章的名称,手动删除 文集 名称和 - 后发布会把 《》 也带上去,然后根据 文集 类型手动改了一个 文集 中的所有文章,发现手改太痛苦了,由于本地文章和未发布的笔记超过两三百篇,这次要搬运的文章两百多篇,手改好两百个文件名再手动拖上去选择分类和标签岂不是要改死了,要不写个 node 脚本处理一下?

脚本实现的目标

运行脚本,脚本读取某个目录下的 Markdown 文件,然后修改文件名,根据 -《》 来判断,得到导入后发布的文章名称

开始实现

初始化node项目

建立一个 server.js 文件,在同级目录下控制台中执行 npm init 命令,默认一直敲回车 node 项目就初始化好了

image.png

先建一个 test-file 文件,里面放几个 Markdown 文件用来做测试

image.png

安装 pathfs 模块,path 用来读取文件路径, fs 用来修改文件

npm i path fs -D

获取路径

引入 path 模块,使用 path.join 获取 test-file 文件夹路径

const path = require("path");
const url = path.join('C:', 'Users', 'qingy', 'Desktop', '新建文件夹', 'script', 'test-file');
console.log('url: ', url)

image.png

读取路径下的文件并分割

使用 fs.readdir 读取路径下的所有文件,获取文件列表后,循环处理文件,先是将 - 分割文件得到带 《》 文件名的名称数组,再单独分割 就得到了要发布的文章名称,使用 fs.rename 修改原文件名称,这里要注意文件路径的拼接,由于整体逻辑具有关联性,直接把整段代码贴了出来,在代码对应的地方添加注释方便理解,如下

fs.readdir(url, "utf8", (err, fileList) => {
  if (err) throw err;
  console.log(fileList);
  fileList.forEach((item, index) => {
    console.log("index: " + index);
    console.log(item);
    // 第一次分割,得到带《》的文件名称数组
    const arr = item.split(" - ");
    if (arr.length > 1) {
      console.log("arr", arr);
      // 第二次分割《》,得到文章名称和文件后缀名
      const nameArr = arr[1].split("《")[1].split("》");
      console.log("nameArr: ", nameArr);
      // 拼接得到掘金自动导入的文件名称效果
      const fileName = nameArr[0] + nameArr[1];
      console.log("fileName: ", fileName);
      // 更新文件名称
      const old = url + "\\" + item;
      console.log("old: " + old);
      const newName = url + "\\" + fileName;
      console.log("new: ", newName);
      fs.rename(url + "\\" + item, url + "\\" + fileName, (err) => {
        throw err;
      });
    } else {
      console.log("文件名称不符合预期格式");
    }
  });
});

脚本写完后,执行如下命名运行脚本

node server.js

执行脚本后,文件名的效果

image.png

到这里脚本就已经把该做的都做完了,剩下的就是按文集分类导入,这样可以统一选择文章类型和标签

完整代码链接

github.com/gywgithub/F…

文章导入文件失败

在实际操作中发现,如果是一次选择了多篇文章,点击 导入并发布 按钮会出现导入成功 x 篇,失败 x 篇的情况,这部分可能是导入工具的实现没有做相应的优化,继续点击 导入并发布 按钮导入就可以了

image.png

扩展

由于自己日常前端开发为主,node 相关的稍微熟悉一点,脚本以实现目的为主,也有其他的更优雅的实现和思路;关于博客搬家,还有一个 官方协助导入发布,有 JYM 用过这个功能吗?体验如何呢?

image.png


目录
相关文章
|
3月前
|
存储 JavaScript 前端开发
🚀超级加速:轻松发现开源项目的终极秘籍🎁
本文介绍了8种方法,帮助开发者轻松找到适合自己的开源项目。通过利用如 GitHub Trending、Good First Issues 和 OpenSauced 等平台,读者可以有效地筛选和参与开源项目,提升自己的技术能力与社交网络。开源不仅是技术贡献,更是个人成长与机会的宝贵途径。无论是新手还是有经验的开发者,这些资源都能助你一臂之力,让你在开源社区中茁壮成长。
25 1
|
7月前
|
Windows
技术经验分享:bootsect命令
技术经验分享:bootsect命令
|
7月前
技术经验分享:GMU简单使用一
技术经验分享:GMU简单使用一
96 0
|
8月前
|
人工智能 前端开发 机器人
【杂谈】扣子(Coze) 初体验
扣子(Coze)是什么 官方原文如下: 扣子(coze.cn)是一款用来开发新一代 AI Chat Bot 的应用编辑平台,无论你是否有编程基础,都可以通过这个平台来快速创建各种类型的 Chat Bot,并将其发布到各类社交平台和通讯软件上。 我们可以理解为一个聊天🤖️,可以在其他平台上发布。那就让我们快速开始吧
977 0
|
8月前
|
前端开发 JavaScript
🚀用脚本助力博客搬家
🚀用脚本助力博客搬家
58 0
|
分布式计算 算法 NoSQL
去年今日我凭借这份文档,摇身一变成了被BAT大牛们看中的幸运儿
我足够努力,当然也足够幸运。现在把这份文档和这份幸运分享给你们。
84 0
|
机器学习/深度学习 SQL 人工智能
「慕课知识推荐官」特献学习笔记 拓展阅读
「慕课知识推荐官」特献学习笔记 拓展阅读
163 0
|
编译器 程序员 C语言
带领你打开C++神秘之门--入门篇
带领你打开C++神秘之门--入门篇
63 0
|
前端开发
带你读书之“红宝书”:第三章 语法基础(上)之 关键词后续
带你读书之“红宝书”:第三章 语法基础(上)之 关键词后续
106 0
带你读书之“红宝书”:第三章 语法基础(上)之 关键词后续
|
存储 数据采集 弹性计算
阿里云结合大创项目使用心得体会
本文基于本人的大创项目:基于物联网技术的农田远程监控和管理系统设计与实现,结合阿里云ESC使用的心得,主要应用于硬件端数据采集与软件端应用层的数据交互上,期间涉及数据库在服务器上的使用,良好的实现了大创项目所需要的功能。
阿里云结合大创项目使用心得体会