首先描述產生這篇隨筆的場景:我需要獲取項目在jenkins構建的最新Javascript Coverage顯示在供管理層次查看的項目情況Report上,但是由於jenkins沒有直接的API取得數據所需數據,所以我們只能從自建的容器發布Javascript Coverage數據API,供Report項目使用。
由於采用簡單的數據分析,只是Host一個簡單的web Server,所以本人不喜歡Tomcat,IIS這類大型工具,顯得有點殺雞用牛刀,班門弄斧。我更喜歡node.js這類簡易的web容器。所以項目采用node.js,並node.js天然的javascript與html操作的天然一體,借助DOM結構使得解析Html更容易,簡潔。
Node.js解析HTML DOM的當然是htmlpaser,jsdom。然而個人更喜歡jQuery的風格,與web jQuery的統一API,所以選擇了node-jquery.其代碼部署在Github的https://github.com/coolaj86/node-jquery.
下面是本人寫個一個簡單demo: 抓取Github Popular project打印在控制台輸出。
1 var $ = require('jquery'); 2 3 4 5 String.format = function() { 6 7 var s = arguments[0]; 8 9 for (var i = 0; i < arguments.length - 1; i++) { 10 11 var reg = new RegExp("\\{" + i + "\\}", "gm"); 12 13 s = s.replace(reg, arguments[i + 1]); 14 15 } 16 17 18 19 return s; 20 21 }; 22 23 24 25 $.get("https://github.com/popular/forked",function(html){ 26 27 28 29 var $doc = $(html); 30 31 console.log("No. name language star forks ") 32 33 $doc.find("ul.repolist li.source").each(function(i,project){ 34 35 36 37 var $project = $(project); 38 39 var name = $project.find("h3").text().trim(); 40 41 var language = $project.find("li:eq(0)").text().trim(); 42 43 var star = $project.find("li.stargazers").text().trim(); 44 45 var forks = $project.find("li.forks").text().trim(); 46 47 var row =String.format("{4} {0} {1} {2} {3}",name, 48 49 language,star,forks,i + 1 ); 50 51 52 53 console.log(row); 54 55 }); 56 57 });
此項目寄宿在我Github https://github.com/greengerong/node-jquery-demo。僅供了解node-jquery學習demo,歡迎指教。