Gg / 從Google Spreadsheets建立查詢ISBN的AppSheet APP 版本3

曾經在 Gg / App 從Google Spreadsheets建立查詢ISBN的AppSheet APP

以及 Gg / 從Google Spreadsheets建立查詢ISBN的AppSheet APP 版本2

結合Google AppSheet簡易製作查詢ISBN App

原理是透過AppSheet掃描書籍ISBN條碼、寫入Google Sheet中

再透過Google Apps Script設定當文件被編輯時,觸發查詢的程式,將抓取到的書籍資料寫入Google Sheet

而因為AppSheet的資料是基於相同的Google Sheet

所以重整之後就可以顯示書籍資料

整體流程可以分為三個步驟

1.建立Google Sheet工作表,設定需要的資料欄位,除了是儲存抓取的資料之外,同時也是AppSheet的資料架構

2.在Google Sheet擴充功能新增Google Apps Script程式碼,並且設定觸發條件-當文件被編輯時觸發程式

3.在Google Sheet擴充功能新增AppSheet,設定介面與調整資料表設定

當初查詢書籍資料的方式是爬取全國新書網的內容

而現在這個練習修改自彰化一整天在2021年發布的教學範例

【Google教學】如何利用ISBN查詢圖書相關資訊

【Appsheet教學】如何在appsheet使用掃描ISBN就自動出現圖書相關資訊

其中最大的修改是爬蟲抓取資料的程式碼

這是因為用來查詢書籍資料的網站改版

所以配合目前網站的DOM架構調整抓取的內容/位置

 

而跟我原本方式的差異是這個範例沒有解析Html DOM

純粹把抓回來的Html當成文字資料來處理

透過javascript的indexOf()substring() 擷取需要的文字資料

然後透過正則表示法配合replace()除去Html標籤與多餘的空格

 

以下說明三個步驟的內容

1.建立Google Sheet工作表,設定需要的資料欄位,除了是儲存抓取的資料之外,同時也是AppSheet的資料架構

根據網站資料設定要抓取的資料,建立sheet欄位

主要有:ISBN    書名    出版社    作者    出版日期,利用 輸入日期作為唯一值(KEY)

2.在Google Sheet擴充功能新增Google Apps Script程式碼,並且設定觸發條件-當文件被編輯時觸發程式

程式碼主要修改如下

#18
var url = “https://findbook.com.tw/”+ isbn;

#28 增加判斷式,”沒有符合查詢條件的圖書!!”

#39
var title=stripHTML(get_content(html,”<h1 id=\”lblMessage\” style=\”display: inline; color: Red\”>”,”</h1>”));

#45
var publishDate=stripHTML(get_content(html,”出版日期:”,”</span><“));

#48
var publisherName=stripHTML(get_content(html,”出版社:”,”</a>”));

 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
55
56
57
58
59
function bestdaylong_read_isbn() {
  var sheet=  SpreadsheetApp.getActiveSpreadsheet();
  
  //var isbn="9789574429608";
  
  var html="";//儲存抓回的內容
  
    //取得目前所在的列數
  //var lastrow = sheet.getLastRow();

  //取得目前所在列數
  var lastrow=sheet.getActiveRange().getRow();

  var isbn=sheet.getRange("a" + lastrow).getValue();

  var title=sheet.getRange("b" + lastrow).getValue();

  var url = "https://findbook.com.tw/"+ isbn;

  if(isbn!="" && title=="")
  {
      Logger.log(url);

      var response= UrlFetchApp.fetch(url);   
      
      html=response.getContentText();

      var noData = stripHTML(get_content(html,"<td background=\"/images/up_bar.gif\" style=\"vertical-align: middle; height: 25px\">","</td>"));
      noData = noData.split(';')[1].trim();
      Logger.log(noData);

      if(noData =="沒有符合查詢條件的圖書!!")
      {
        sheet.getRange("B"+lastrow).setValue(noData);
        sheet.getRange("F"+lastrow).setValue(new Date());
      }
      else{ 
      //
      var title=stripHTML(get_content(html,"<h1 id=\"lblMessage\" style=\"display: inline; color: Red\">","</h1>"));
      Logger.log(title);

      var author=stripHTML(get_content(html,"作者:","</a>"));
      Logger.log(author);

      var publishDate=stripHTML(get_content(html,"出版日期:","</span><"));
      Logger.log(publishDate);
      
      var publisherName=stripHTML(get_content(html,"出版社:","</a>"));
      Logger.log(publisherName);

      sheet.getRange("B"+lastrow).setValue(title);
      sheet.getRange("C"+lastrow).setValue(publisherName);      
      sheet.getRange("D"+lastrow).setValue(author);
      sheet.getRange("E"+lastrow).setValue(publishDate);
      sheet.getRange("F"+lastrow).setValue(new Date());
      // 
      }
  }
}

3.在Google Sheet擴充功能新增AppSheet,設定介面與調整資料表設定

將預設的以”_RowNumber”為KEY,改為以”輸入日期”為KEY

ISBN不顯示千位數分隔符號

編輯ISBN欄位

取消原本的勾取

 

已經沒有顯示千位數分隔符號

 

基本上這樣就可以完成一個簡易查詢ISBN獲取書籍資料的App了

並且資料是寫在Google Sheet裡,所以也可以直接進行資料的整理