nodejs抓取notion emoji svg资源的脚本示例

 更新时间:2023年02月05日 11:08:17   作者:杰出D  
这篇文章主要为大家介绍了nodejs抓取notion emoji svg资源脚本实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

最近在做emoji表情,在windows环境预览效果不太理想,也缺少很多字体图标的显示,为了让各种环境显示一致,决定用svg图片代替字体图标。让设计去搞这些资源,有一千多个图标,比较费力。于是决定自己写个脚本去抓这些资源。notion有这些资源,开始去抓。

调研准备工作

之前在做emoji的时候,有Unicode Id,notion中的资源名称也是用Unicode id做文件名。根据id关联,我们就可以直接开始了。

emoji.json 文件

 {
    "id": "u1f600",
    "name": "嘿嘿",
    "font": "😀",
    "keyword": "😀^嘿嘿^笑^^嘿嘿|笑脸|脸"
 }
 ....

node脚本准备

俗话说,工欲善其事必先利其器,在写脚本之前,我们先搞几个操作文件的工具方法,服务于正式脚本的使用。

// 读文件
const readFile = async (path) => {
    return new Promise((resolve, reject) => {
        fs.readFile(path, 'utf8', (err, data) => {
            if (err) {
                console.log(err);
                reject(err);
                return;
            }
            resolve(data);
        })
    })
}
// 写文件
const writeFile = async (path, data) => {
    return new Promise((resolve, reject) => {
        fs.writeFile(path, data, { flag: 'w' }, (err) => {
            if (err) {
                console.log(err);
                reject(err);
                return;
            }
            resolve(true);
        })
    })
}
/**
 * 获取网络文件到本地
 * @param {*} webUrl 
 * @param {*} path 
 */
const downloadHttpFile = async (webUrl, folderPath) => {
    return new Promise((resolve, reject) => {
        const fileName = path.basename(webUrl);
        let stream = fs.createWriteStream(path.join(folderPath, fileName));
        request(webUrl).pipe(stream).on("close", function (err) {
            if (err) {
                console.log(err);
                reject(err);
                return;
            }
            resolve(true)
            console.log("文件[" + fileName + "]下载完毕");
        });
    })
}

正式脚本

  • 定义路径变量
// emoji 路径
const emojiPath = path.join(__dirname, '../assets/emoji.json');
// notion 路径
const emojiSvgBase = 'https://notion-emojis.s3-us-west-2.amazonaws.com/prod/svg-twitter'; // 1f604.svg
// svg图片下载文件夹
const downloadFolder = path.join(__dirname, 'images');
  • 读取文件抓取,写文件
// 获取文件并下载
const getEmojiSvgFile = async (id) => {
  const fileName = id + '.svg';
  const webUrl = `${emojiSvgBase}/${fileName}`;
  const exist = fs.existsSync(downloadFolder);
  if (!exist) {
    fs.mkdirSync(downloadFolder);
  }
  return await downloadHttpFile(webUrl, downloadFolder);
}
// 从notion抓取所有的图片
const grabImages = async () => {
  const data = await readFile(emojiPath)
  const emojiJson = JSON.parse(data.toString());
  for (const first of emojiJson) {
    for (const second of first.children) {
      const id = handleUnicodeId(second.id);
      // 串行抓取
      await getEmojiSvgFile(id)
    }
  }
}
// 开始抓取
grabImages();
  • 设置启动命令 在package.json中添加命令
"scripts": {
    "grab": "node ./src/index.js"
},

4.运行命令

npm run grab

大家看上边的脚本,可以发现我们用了asycawait, 串行去下载资源。有兴趣的小伙伴可以尝试改下,看看怎么改成并行去下载资源,还可以控制并发的数量,面试中经常会问到。

结语

代码已上传github,有需要可自行查看

以上就是nodejs抓取notion emoji svg资源的脚本示例的详细内容,更多关于nodejs脚本notion emoji svg的资料请关注脚本之家其它相关文章!

相关文章

  • 浅谈Node新版本13.2.0正式支持ES Modules特性

    浅谈Node新版本13.2.0正式支持ES Modules特性

    这篇文章主要介绍了浅谈Node新版本13.2.0正式支持ES Modules特性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发)

    nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发)

    FFmpeg是一套开源的音视频处理工具,通俗地讲,可以对音视频文件进行剪切、拼接、水印、转码等处理,这篇文章主要介绍了nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发),需要的朋友可以参考下
    2023-05-05
  • node.js中path路径模块的使用方法实例分析

    node.js中path路径模块的使用方法实例分析

    这篇文章主要介绍了node.js中path路径模块的使用方法,结合实例形式分析了node.js path路径模块的基本功能、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Node.js断点续传的实现

    Node.js断点续传的实现

    最近做了个项目,应项目需求,需要传图片、Excel等,几M的大小可以很快就上传到服务器,但是大的就需要断点上传,本文就介绍一下,感兴趣的可以了解一下
    2021-05-05
  • Node中文件断点续传原理和方法总结

    Node中文件断点续传原理和方法总结

    在之前做过一个小项目,涉及到了文件上传,在大文件上面使用了断点续传,降低了服务器方面的压力,现在小编把Node中文件断点续传原理和方法总结分享给大家,感兴趣的朋友一起看看吧
    2022-01-01
  • Elasticsearch插件及nodejs的安装配置

    Elasticsearch插件及nodejs的安装配置

    这篇文章主要为大家介绍了Elasticsearch插件及nodejs的安装配置,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 使用forever管理nodejs应用教程

    使用forever管理nodejs应用教程

    这篇文章主要介绍了使用forever管理nodejs应用教程,本文介绍了forever的安装、常用命令等,最有用的莫过于文件改动监听并自动重启了,这可以增加开nodejs应用的效率,需要的朋友可以参考下
    2014-06-06
  • nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)

    nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)

    这篇文章主要介绍了nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 浅析Node.js的Stream模块中的Readable对象

    浅析Node.js的Stream模块中的Readable对象

    这篇文章主要介绍了浅析Node.js的Stream模块中的Readable对象,是Node.js入门学习中的基础知识,需要的朋友可以参考下
    2015-07-07
  • nodejs搭建本地服务器轻松解决跨域问题

    nodejs搭建本地服务器轻松解决跨域问题

    这篇文章主要介绍了利用nodejs搭建本地服务器 解决跨域问题,需要的朋友可以参考下
    2018-03-03

最新评论