之前用Excel的Power Query 或者 VBA的方式抓取網路上的Json資料
現在改用Google Apps Script 以及 Google試算表
藉由Google Apps Script作為後端來進行抓取、處理資料,然後輸出儲存在 Google試算表
Google Apps Script 可以透過 UrlFetchApp.fetch( ) 建立連結
以及 JSON.parse( ) 解析回傳的資料為Json物件
這樣就可以用物件方法來取出屬性值 → 物件.屬性名稱=值
程式碼就相對單純多了
比較麻煩的就是要搞懂不同層的Key : Value的對應
也就是上一層的Vaule存的是下一層 Key : Value資料
這樣才能設定正確的外迴圈、內迴圈的數值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
function jsonFetch() { var url="https://data.epa.gov.tw/api/v1/aqx_p_432?limit=1000&api_key=9be7b239-557b-4c10-9775-78cadfc555e9&format=json"; var jsondata = UrlFetchApp.fetch(url); var rowData = JSON.parse(jsondata.getContentText()); //Logger.log(rowData); //Logger.log(typeof(rowData)); var ss=SpreadsheetApp.openById("************************"); var dataS=ss.getSheets()[1]; dataS.clear(); //Logger.log(rowData.records[0]); var jK=rowData.records; //取得 records的所有資料 //Logger.log(jK); //所有資料 var iR=jK.length; //Logger.log(iR); //資料筆數 //Logger.log(Object.keys(jK[0])); //jK第一筆資料的key值 //Logger.log(Object.values(jK[0])); //jK第一筆資料的vaule值 var iC=Object.values(jK[0]).length; //欄位數 //Logger.log(iC); //var k=Object.keys(jK[0]); //var j=Object.values(jK[0]); //Logger.log(k[1]); //Logger.log(j[1]); for(var i=0 ; i < iR ; i++){ //外迴圈 列 筆數 for(var j=0 ; j < iC ; j++){ //內迴圈 欄 欄位數 var k1=Object.keys(jK[i]); var j1=Object.values(jK[i]); //Logger.log(k1); //Logger.log(j1); //Logger.log(k1[j]); //Logger.log(j1[j]); if(i<1){ dataS.getRange(i+1,j+1).setValue(k1[j]); dataS.getRange(i+2,j+1).setValue(j1[j]); }else{ dataS.getRange(i+2,j+1).setValue(j1[j]); } } } } //清除舊資料 function dataSclear(){ var ss=SpreadsheetApp.openById("**************************************"); var dataS=ss.getSheets()[1]; dataS.clear(); } |