Gg / 抓取網路 JSON資料

之前用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();
}