用Web前端技術(shù)打造Github最有毒的8.8K老哥Star的表情包博物館

github.com/zhaoolee/ChineseBQB

隨著Web前端技術(shù)迅猛發(fā)展琳拭,Gmail, Word, Excel, PowerPoint等工具都可以通過(guò)瀏覽器使用懈贺。Web前端不只和瀏覽器打交道堂氯,Node.js的發(fā)展讓前端的舞臺(tái)進(jìn)一步擴(kuò)展得院,前端不僅可以使用Node.js打包復(fù)雜的js, css, html 構(gòu)建優(yōu)化前端工程, 還能配合Github柿扣,做出喜聞樂(lè)見(jiàn)的表情包開(kāi)源項(xiàng)目肖方。

github.com/zhaoolee/ChineseBQ

本文提到的開(kāi)源代碼倉(cāng)庫(kù)

https://github.com/zhaoolee/ChineseBQB

如何用前端打造一個(gè)受歡迎的開(kāi)源項(xiàng)目?

好的工具要走群眾路線未状,在中國(guó)俯画,人人聊微信,人人要斗圖司草,那就做個(gè)表情包博物館艰垂,方便人們斗圖吧~

搜索表情包,長(zhǎng)按表情包圖片埋虹,發(fā)給朋友(微信和QQ好友皆可)

搜索表情包猜憎,長(zhǎng)按表情包圖片,發(fā)給朋友

將表情包圖片鏈接搔课,發(fā)到不支持表情包的朋友圈

將表情包圖片鏈接胰柑,發(fā)到不支持表情包的朋友圈

以上工具所有的表情包和工具源碼均開(kāi)源在 https://github.com/zhaoolee/ChineseBQB

開(kāi)發(fā)ChineseBQB過(guò)程中的技術(shù)選型思考與實(shí)現(xiàn)

  • 表情包工具采用H5構(gòu)建,通過(guò)固定的網(wǎng)址打開(kāi) https://www.v2fy.com/asset/0i/ChineseBQB/爬泥,這樣可以保證在任何App內(nèi)打開(kāi)柬讨,也能交給搜索引擎抓取,逐步進(jìn)行SEO袍啡,獲得自然流量
  • 表情包工具適配PC端和移動(dòng)端踩官,給任何尺寸屏幕的用戶最好的體驗(yàn)
PC端
移動(dòng)端
  • 表情包工具支持關(guān)鍵詞查詢,并通過(guò)url參數(shù)分享搜索結(jié)果頁(yè)


    分享搜索結(jié)果

這是奧特曼表情包的分享頁(yè)面(未來(lái)最好的兼容性境输,參數(shù)已encode): https://www.v2fy.com/asset/0i/ChineseBQB/?key_val=%E5%A5%A5%E7%89%B9%E6%9B%BC

  • 為提升表情包搜索準(zhǔn)確性蔗牡,zhaoolee對(duì)所有表情包進(jìn)行了人工標(biāo)注,并將標(biāo)注數(shù)據(jù)導(dǎo)出為json文件

生成json的程序

// 本程序用于創(chuàng)建表情包圖片列表
const fse = require('fs-extra');
const fs = require('fs');
const path = require('path');

function get_bqb_dir(){
  let file_list = fs.readdirSync(path.join(__dirname, "./"));
  let md_dir_list = [];
  file_list.map((file_name_value, file_name_index)=>{
      if(file_name_value.endsWith("BQB")){
          md_dir_list.push(file_name_value);
      }
  });
  return md_dir_list 
}

function get_json_data(bqb_dir_list, prefix){
  let json_data = [];
  // 遍歷表情包文件夾
  for(let i = 0, bqb_dir_list_length = bqb_dir_list.length; i< bqb_dir_list_length;i++){
    let absolute_bqb_path = path.join(__dirname, bqb_dir_list[i]);
    // 獲取文件夾內(nèi)所有表情包圖片
    let file_list = fs.readdirSync(absolute_bqb_path);
    for(let n = 0, file_list_length = file_list.length; n < file_list_length; n++){
      let tmp_img_url = prefix + path.join(bqb_dir_list[i] ,file_list[n]);
      // 忽略一切隱藏文件
      if(file_list[n].startsWith(".") === false){
        let tmp_img_info = {
          name: file_list[n],
          category: bqb_dir_list[i],
          url: tmp_img_url
        }
        json_data.push(tmp_img_info);
      }
    }
  }
  return json_data;
}
function main() {
  // 創(chuàng)建Json文件嗅剖,ChineseBQB_github.json ChineseBQB_v2fy.json
  // 創(chuàng)建最終寫(xiě)入的數(shù)據(jù)結(jié)構(gòu) chinesebqb_github_json  chinesebqb_v2fy_json
  // 獲取所有以BQB為后綴的文件夾路徑
  let bqb_dir = get_bqb_dir()
  console.log("bqb_dir::", bqb_dir);
  // 將圖片地址添加到 chinesebqb_github_json_data  chinesebqb_v2fy_json_data  
  let chinesebqb_github_json_data = get_json_data(bqb_dir, "https://raw.githubusercontent.com/zhaoolee/ChineseBQB/master/");
  let chinesebqb_github_json = {
    status: 1000,
    info: "ChineseBQB的Github數(shù)據(jù)源",
    data: chinesebqb_github_json_data
  };
  
  let chinesebqb_v2fy_json_data = get_json_data(bqb_dir, "https://v2fy.com/asset/0i/ChineseBQB/")
  let chinesebqb_v2fy_json = {
    status: 1000,
    info: "ChineseBQB的V2方圓數(shù)據(jù)源",
    data: chinesebqb_v2fy_json_data
  };

  // 創(chuàng)建Json文件蛋逾,ChineseBQB_github.json ChineseBQB_v2fy.json
  fse.writeJsonSync('./chinesebqb_github.json', chinesebqb_github_json);
  fse.writeJsonSync('./chinesebqb_v2fy.json', chinesebqb_v2fy_json);
}
main();

生成的標(biāo)注好的json文件
https://raw.githubusercontent.com/zhaoolee/ChineseBQB/master/chinesebqb_github.json

導(dǎo)出json文件

對(duì)編程感興趣的小伙伴,可以將json文件作為開(kāi)放數(shù)據(jù)源窗悯,開(kāi)發(fā)微信小程序,制作爬蟲(chóng)Demo偷拔,甚至作為機(jī)器學(xué)習(xí)的數(shù)據(jù)源

  • 如何低成本維護(hù)項(xiàng)目蒋院?

表情包工具背后的數(shù)據(jù)源需要長(zhǎng)期維護(hù)亏钩,最好的方式是讓程序自動(dòng)讀取特定文件夾中的表情包數(shù)據(jù)

自動(dòng)讀取特定格式文件夾內(nèi)表情包數(shù)據(jù),并統(tǒng)計(jì)數(shù)量

文件夾內(nèi)表情包數(shù)據(jù)

按照特定命名規(guī)則標(biāo)注表情包

生成的json數(shù)據(jù)欺旧,可作為表情包工具的前端數(shù)據(jù)庫(kù)姑丑,查詢速度極快,無(wú)需網(wǎng)絡(luò)交互~

生成的json數(shù)據(jù)

數(shù)量統(tǒng)計(jì)與文件夾同名的超鏈接

數(shù)量統(tǒng)計(jì)與文件夾同名的超鏈接

自動(dòng)生成的網(wǎng)頁(yè)

自動(dòng)生成的網(wǎng)頁(yè)

一個(gè)好玩的前端項(xiàng)目辞友,需要好玩的想法栅哀,也需要合理的技術(shù)選型,表情包工具的搜索速度非吵屏快留拾,因?yàn)樗饕龜?shù)據(jù)已經(jīng)提前加載到前端,瀏覽器本地的查詢要比網(wǎng)絡(luò)請(qǐng)求快的多鲫尊。

小結(jié)

現(xiàn)代產(chǎn)生的巨量數(shù)據(jù)痴柔,催生了數(shù)據(jù)云的出現(xiàn),數(shù)據(jù)云的出現(xiàn)疫向,可以讓80%的軟件直接上云咳蔚,比如Word, Excel, PowerPoint大多數(shù)常用功能都可以通過(guò)在線版實(shí)現(xiàn)。

大量在線版工具的涌現(xiàn)搔驼,對(duì)前端技術(shù)提出了更高的要求谈火,對(duì)于一名程序員,如果想成為獨(dú)立開(kāi)發(fā)者舌涨,打造充滿個(gè)性且實(shí)用的軟件或工具糯耍, 對(duì)前端領(lǐng)域的深入思考會(huì)變得不可或缺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泼菌,一起剝皮案震驚了整個(gè)濱河市谍肤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哗伯,老刑警劉巖荒揣,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異焊刹,居然都是意外死亡系任,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門虐块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俩滥,“玉大人,你說(shuō)我怎么就攤上這事贺奠∷桑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵儡率,是天一觀的道長(zhǎng)挂据。 經(jīng)常有香客問(wèn)我以清,道長(zhǎng),這世上最難降的妖魔是什么崎逃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任掷倔,我火速辦了婚禮,結(jié)果婚禮上个绍,老公的妹妹穿的比我還像新娘勒葱。我一直安慰自己,他們只是感情好巴柿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布凛虽。 她就那樣靜靜地躺著,像睡著了一般篮洁。 火紅的嫁衣襯著肌膚如雪涩维。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天袁波,我揣著相機(jī)與錄音瓦阐,去河邊找鬼。 笑死篷牌,一個(gè)胖子當(dāng)著我的面吹牛睡蟋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播枷颊,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼戳杀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了夭苗?” 一聲冷哼從身側(cè)響起信卡,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎题造,沒(méi)想到半個(gè)月后傍菇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡界赔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年丢习,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淮悼。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咐低,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出袜腥,到底是詐尸還是另有隱情见擦,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站锡宋,受9級(jí)特大地震影響儡湾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜执俩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望癌刽。 院中可真熱鬧役首,春花似錦、人聲如沸显拜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)远荠。三九已至矮固,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間譬淳,已是汗流浹背档址。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邻梆,地道東北人守伸。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浦妄,于是被迫代替她去往敵國(guó)和親尼摹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容