nodejs抓取notion?emoji?svg資源的腳本示例
前言
最近在做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)我們用了asyc
和await
, 串行去下載資源。有興趣的小伙伴可以嘗試改下,看看怎么改成并行去下載資源,還可以控制并發(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)用,結(jié)合實(shí)例形式分析了node.js調(diào)用百度輿情接口的具體使用技巧,需要的朋友可以參考下2020-02-02npm?install總是卡住不動(dòng)問(wèn)題的解決辦法
在我們安裝完Node.js之后,需要使用npm命令來(lái)安裝一些工具,下面這篇文章主要給大家介紹了關(guān)于npm?install總是卡住不動(dòng)問(wèn)題的解決辦法,需要的朋友可以參考下2022-05-05nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳
這篇文章主要介紹了nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳,需要的朋友可以參考下2015-02-02npm 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-11NodeJS?基于?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-07Nodejs實(shí)戰(zhàn)心得之eventproxy模塊控制并發(fā)
本篇文章給大家分享我的nodejs實(shí)戰(zhàn)心得,如何使用eventproxy模塊控制并發(fā),感興趣的朋友可以參考下2015-10-10安裝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-06node.js中的buffer.slice方法使用說(shuō)明
這篇文章主要介紹了node.js中的buffer.slice方法使用說(shuō)明,本文介紹了buffer.slice的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12