iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
IT管理

「Google Apps Script」 學習筆記系列 第 24

【Day 24】Google Apps Script - API Blueprint 篇 - Google Docs 轉換 API Blueprint 格式(2)

繼續介紹昨天主流程裡的副程式吧。


今日要點:
》Google Docs 轉換 API Blueprint 格式之二


Google Docs 轉換 API Blueprint 格式之二

昨天我們把主程式介紹完了,今天繼續來介紹相關的副程式:

  • 處理表格每一列的內容
  • 處理基本資料的 table 內容
  • 處理 Action 區塊

程式碼

程式碼如下:

處理表格每一列的內容

在文件中,前面幾列是 API 的基本資料,如說明、API 名稱等。

  • 前面第1列,最重要的是 API 的名稱,我們需要先取出 API 的名稱來當成我們群組的名稱。
  • 在其他的列,最重要的是找出每個描述段落的起始位置。
///////////////////////////////////////////////////////
//處理表格每一列的內容
///////////////////////////////////////////////////////
function parseRowData(row, array){
  switch (row) {
    case 0:  
      var title = array[row][2];                  
      title = title.replace(/\(/g, "(").replace(/\)/g, ")");    
      gApibConent = gApibConent + NL + 
                    "## "+ title + " [" + REPLACE_URL + "]" + NL;   
      break;

    default:
      //找尋區塊的開始列
      for ( var index = 0; index < gSegmentTitle.length; ++index ) {
        if(array[row][0].indexOf(gSegmentTitle[index])>-1) { 
          gSegmentIndex[index] = row;
        }
      }
  }
}

 


處理基本資料的 table 內容

在文件中,前面幾列是 API 的基本資料,如說明、API 名稱等。
因為他的格式跟其他的段落不太一樣,所以需要獨立一個副程式來處理。

///////////////////////////////////////////////////////
//處理基本資料的 table 內容
///////////////////////////////////////////////////////
function makeHeaderTable(arr){
  var str = "";
  str = str + 
        "<table>" + NL ;
        
  var len = arr.length;
  for ( var row = 0; row < arr.length; ++row ) {
    var thtd = "th"; //標題的欄位用 th, 前端呈現會是藍色
    
    str = str + 
        "    <tr>" + NL ;
    if(row==1){
      str = str + 

        "        <td>" + arr[row][0] + "</td>"  + NL + 
        "        <td colspan=2>" + arr[row][1] + "</td>" + NL;
    }else{
    
      if(row>0){thtd = "td"}

      for ( var cell = 0; cell < 3; ++cell ) {
          str = str +
          "    <"+ thtd +">" + 
                 arr[row][cell].replace(/ /g, " ").replace(/\n/g, "<br>") + 
               "</"+ thtd +">" + NL ;
      }
    }

    str = str + 
        "    </tr>" + NL;
  }
  
  str = str + "</table>" + NL;
  Logger.log("makeHeaderTable(arr) = \n" + str); // debug
  return str; 

}

Logger.log 的執行結果:

 


 

 

處理 Action 區塊

最後我們組合 Action 區塊,這裡要從 API 文件各段落中,取出 Action 區塊中所需要的變數。主要是:

  • Action 區塊的名稱
  • Parameters 參數
  • Response
///////////////////////////////////////////////////////
//處理 Action 區塊
///////////////////////////////////////////////////////
function makeActions(arr){
  var func = arr[0][1]; 
  var title = arr[0][2]; 
  var method = arr[(gSegmentIndex[2]+1)][1];
  
  var str = "";
  str = str + NL + "### try:" + title + " [" + method + "]" + NL + NL ;

  str = str + "+ Parameters" + NL;
  str = str + "  + name: Jason (string, optional) -查詢人的姓名" + NL;
  str = str + "  + func: "+ func + " (string, required) - 要呼叫的功能名稱" + NL;
  str = str + NL ;
  str = str + "+ Response 200 (application/json)" + NL ;
  str = str + NL ;

  Logger.log("makeActions(arr) = " + str); // debug

  return str; 
}

Logger.log 的執行結果:


 

匯出到 apib 檔

最後我們在雲端硬碟中指定一個建好的資料夾,在這個資料夾中建立一個新的檔案,把組合好的內容,存放進去。

///////////////////////////////////////////////////////
//匯出到 apib 檔
///////////////////////////////////////////////////////

function createGoogleDriveTextFile(content) {
  
  var dir = DriveApp.getFolderById("1qihF3An6UJykI8TEii...");  
  fileName = "鐵人賽-API-文件-Demo-程式自動產生-" + VER + "-" + getTimestemp() + ".apib";
  var file = dir.createFile(fileName, content);
};

 
以上就是 Google Docs 轉換 API Blueprint 格式的全部轉換程式碼了。有些地方還可以寫的更彈性,後續有時間的話再進行修正優化,讓這專案的程式可以適應更多的表格型式。
 

參考


上一篇
【Day 23】Google Apps Script - API Blueprint 篇 - Google Docs 轉換 API Blueprint 格式(1)
下一篇
【Day 25】Google Apps Script - API Blueprint 篇 - 執行專案取得 .apib 檔
系列文
「Google Apps Script」 學習筆記30

尚未有邦友留言

立即登入留言