亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nodejs抓取notion?emoji?svg資源的腳本示例

 更新時(shí)間:2023年02月05日 11:08:17   作者:杰出D  
這篇文章主要為大家介紹了nodejs抓取notion?emoji?svg資源腳本實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

最近在做emoji表情,在windows環(huán)境預(yù)覽效果不太理想,也缺少很多字體圖標(biāo)的顯示,為了讓各種環(huán)境顯示一致,決定用svg圖片代替字體圖標(biāo)。讓設(shè)計(jì)去搞這些資源,有一千多個(gè)圖標(biāo),比較費(fèi)力。于是決定自己寫(xiě)個(gè)腳本去抓這些資源。notion有這些資源,開(kāi)始去抓。

調(diào)研準(zhǔn)備工作

之前在做emoji的時(shí)候,有Unicode Id,notion中的資源名稱(chēng)也是用Unicode id做文件名。根據(jù)id關(guān)聯(lián),我們就可以直接開(kāi)始了。

emoji.json 文件

 {
    "id": "u1f600",
    "name": "嘿嘿",
    "font": "??",
    "keyword": "??^嘿嘿^笑^^嘿嘿|(zhì)笑臉|臉"
 }
 ....

node腳本準(zhǔn)備

俗話說(shuō),工欲善其事必先利其器,在寫(xiě)腳本之前,我們先搞幾個(gè)操作文件的工具方法,服務(wù)于正式腳本的使用。

// 讀文件
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);
        })
    })
}
// 寫(xiě)文件
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);
        })
    })
}
/**
 * 獲取網(wǎng)絡(luò)文件到本地
 * @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');
  • 讀取文件抓取,寫(xiě)文件
// 獲取文件并下載
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)
    }
  }
}
// 開(kāi)始抓取
grabImages();
  • 設(shè)置啟動(dòng)命令 在package.json中添加命令
"scripts": {
    "grab": "node ./src/index.js"
},

4.運(yùn)行命令

npm run grab

大家看上邊的腳本,可以發(fā)現(xiàn)我們用了asycawait, 串行去下載資源。有興趣的小伙伴可以嘗試改下,看看怎么改成并行去下載資源,還可以控制并發(fā)的數(shù)量,面試中經(jīng)常會(huì)問(wèn)到。

結(jié)語(yǔ)

代碼已上傳github,有需要可自行查看

以上就是nodejs抓取notion emoji svg資源的腳本示例的詳細(xì)內(nèi)容,更多關(guān)于nodejs腳本notion emoji svg的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs實(shí)現(xiàn)百度輿情接口應(yīng)用示例

    nodejs實(shí)現(xiàn)百度輿情接口應(yīng)用示例

    這篇文章主要介紹了nodejs實(shí)現(xiàn)百度輿情接口應(yīng)用,結(jié)合實(shí)例形式分析了node.js調(diào)用百度輿情接口的具體使用技巧,需要的朋友可以參考下
    2020-02-02
  • npm?install總是卡住不動(dòng)問(wèn)題的解決辦法

    npm?install總是卡住不動(dòng)問(wèn)題的解決辦法

    在我們安裝完Node.js之后,需要使用npm命令來(lái)安裝一些工具,下面這篇文章主要給大家介紹了關(guān)于npm?install總是卡住不動(dòng)問(wèn)題的解決辦法,需要的朋友可以參考下
    2022-05-05
  • nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    這篇文章主要介紹了nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳,需要的朋友可以參考下
    2015-02-02
  • npm dose not support Node.js v10.15.3的解決方法

    npm dose not support Node.js v10.15

    這篇文章主要給大家介紹了關(guān)npm dose not support Node.js v10.15.3的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • NodeJS?基于?Dapr?構(gòu)建云原生微服務(wù)應(yīng)用快速入門(mén)教程

    NodeJS?基于?Dapr?構(gòu)建云原生微服務(wù)應(yīng)用快速入門(mén)教程

    Dapr?是一個(gè)可移植的、事件驅(qū)動(dòng)的運(yùn)行時(shí),它使任何開(kāi)發(fā)人員能夠輕松構(gòu)建出彈性的、無(wú)狀態(tài)和有狀態(tài)的應(yīng)用程序,并可運(yùn)行在云平臺(tái)或邊緣計(jì)算中,它同時(shí)也支持多種編程語(yǔ)言和開(kāi)發(fā)框架,本文重點(diǎn)介紹NodeJS云原生微服務(wù)應(yīng)用,感興趣的朋友一起看看吧
    2022-07-07
  • nodeJS進(jìn)程管理器pm2的使用

    nodeJS進(jìn)程管理器pm2的使用

    這篇文章主要介紹了nodeJS進(jìn)程管理器pm2的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Node.js?子線程Crash?問(wèn)題的排查方法

    Node.js?子線程Crash?問(wèn)題的排查方法

    這篇文章主要介紹了Node.js?子線程Crash?問(wèn)題的排查,本文通過(guò)代碼例子給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Nodejs實(shí)戰(zhàn)心得之eventproxy模塊控制并發(fā)

    Nodejs實(shí)戰(zhàn)心得之eventproxy模塊控制并發(fā)

    本篇文章給大家分享我的nodejs實(shí)戰(zhàn)心得,如何使用eventproxy模塊控制并發(fā),感興趣的朋友可以參考下
    2015-10-10
  • 安裝node.js和npm的一些常見(jiàn)報(bào)錯(cuò)

    安裝node.js和npm的一些常見(jiàn)報(bào)錯(cuò)

    NVM(Node?Version?Manager)是一個(gè)用于在同一機(jī)器上同時(shí)安裝并管理多個(gè)Node.js版本的工具,這篇文章主要給大家介紹了關(guān)于安裝node.js和npm的一些常見(jiàn)報(bào)錯(cuò),需要的朋友可以參考下
    2023-06-06
  • node.js中的buffer.slice方法使用說(shuō)明

    node.js中的buffer.slice方法使用說(shuō)明

    這篇文章主要介紹了node.js中的buffer.slice方法使用說(shuō)明,本文介紹了buffer.slice的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12

最新評(píng)論