nodejs抓取notion?emoji?svg資源的腳本示例
前言
最近在做emoji表情,在windows環(huán)境預(yù)覽效果不太理想,也缺少很多字體圖標(biāo)的顯示,為了讓各種環(huán)境顯示一致,決定用svg圖片代替字體圖標(biāo)。讓設(shè)計去搞這些資源,有一千多個圖標(biāo),比較費(fèi)力。于是決定自己寫個腳本去抓這些資源。notion
有這些資源,開始去抓。
調(diào)研準(zhǔn)備工作
之前在做emoji的時候,有Unicode Id
,notion中的資源名稱也是用Unicode id
做文件名。根據(jù)id關(guān)聯(lián),我們就可以直接開始了。
emoji.json 文件
{ "id": "u1f600", "name": "嘿嘿", "font": "??", "keyword": "??^嘿嘿^笑^^嘿嘿|(zhì)笑臉|臉" } ....
node腳本準(zhǔn)備
俗話說,工欲善其事必先利其器,在寫腳本之前,我們先搞幾個操作文件的工具方法,服務(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); }) }) } // 寫文件 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');
- 讀取文件抓取,寫文件
// 獲取文件并下載 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();
- 設(shè)置啟動命令 在package.json中添加命令
"scripts": { "grab": "node ./src/index.js" },
4.運(yùn)行命令
npm run grab
大家看上邊的腳本,可以發(fā)現(xiàn)我們用了asyc
和await
, 串行去下載資源。有興趣的小伙伴可以嘗試改下,看看怎么改成并行去下載資源,還可以控制并發(fā)的數(shù)量,面試中經(jīng)常會問到。
結(jié)語
代碼已上傳github,有需要可自行查看
以上就是nodejs抓取notion emoji svg資源的腳本示例的詳細(xì)內(nèi)容,更多關(guān)于nodejs腳本notion emoji svg的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
nodejs實現(xiàn)百度輿情接口應(yīng)用示例
這篇文章主要介紹了nodejs實現(xiàn)百度輿情接口應(yīng)用,結(jié)合實例形式分析了node.js調(diào)用百度輿情接口的具體使用技巧,需要的朋友可以參考下2020-02-02nodejs 整合kindEditor實現(xiàn)圖片上傳
這篇文章主要介紹了nodejs 整合kindEditor實現(xiàn)圖片上傳,需要的朋友可以參考下2015-02-02npm dose not support Node.js v10.15
這篇文章主要給大家介紹了關(guān)npm dose not support Node.js v10.15.3的解決方法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11NodeJS?基于?Dapr?構(gòu)建云原生微服務(wù)應(yīng)用快速入門教程
Dapr?是一個可移植的、事件驅(qū)動的運(yùn)行時,它使任何開發(fā)人員能夠輕松構(gòu)建出彈性的、無狀態(tài)和有狀態(tài)的應(yīng)用程序,并可運(yùn)行在云平臺或邊緣計算中,它同時也支持多種編程語言和開發(fā)框架,本文重點介紹NodeJS云原生微服務(wù)應(yīng)用,感興趣的朋友一起看看吧2022-07-07Nodejs實戰(zhàn)心得之eventproxy模塊控制并發(fā)
本篇文章給大家分享我的nodejs實戰(zhàn)心得,如何使用eventproxy模塊控制并發(fā),感興趣的朋友可以參考下2015-10-10