[英]Loop function on Apps Scripts & Google Natural Language API
如果這太基本了,我正在學習如何編碼,很抱歉,但我在這里遇到了麻煩:
我一直在嘗試調用 Google Natural Language API,為我提供有關我的 Google 電子表格 210 行信息的信息(整個表格有 211 行)。 我想將結果保存在 1 個 Json 文件中。
我正在嘗試使用下面的代碼運行一個循環,但我得到的 Json 文件僅包含與第一行對應的信息。 也嘗試將“Driveapp.createFile 代碼行”放在循環 function 內,但后來我有很多 Json 文件,每個文件都有對應於一行的信息。 我想要的是1個Json文件,210行的相應信息。
我會很感激你的幫助,拜托。
function analyzeText() {
var client = "Spreadsheet_ID";
var query = SpreadsheetApp.openById(client).getSheetByName("1. Template");
var result = SpreadsheetApp.openById(client).getSheetByName("Teste - Natural Language API");
var lrow = query.getLastRow();
for(var i=2; i<=211;i++)
{
var text = query.getRange(i,211).getValue()
var requestUrl = [
'https://language.googleapis.com/v1beta2/documents:analyzeEntities?key=',
'API_KEY_XXXXXXXXXXXXXXXXXXX'
].join("");
var data = {
"document": {
"language": "en-us",
"type": "PLAIN_TEXT",
"content": text
},
"encodingType": "UTF8"
};
var options = {
method : "POST",
contentType: "application/json",
payload : JSON.stringify(data)
};
var response = UrlFetchApp.fetch(requestUrl, options);
var data = JSON.parse(response);
}
DriveApp.createFile('response3.json', response, MimeType.PLAIN_TEXT);
}
我建議您代替您正在采用的方法(使用for
循環和方法getValue()
,這是一種在循環中調用的緩慢方法),考慮一下我給您的代碼:
function analyzeText() {
var clientId = "your-sheet-id";
var ss = SpreadsheetApp.openById(clientId);
var templateSheet = ss.getSheetByName("1. Template");
// .getRange(row, column, numRows) -> From the first row and col, take the next 4 rows
// Modify these arguments depending in where you want to start and how many rows you want
var data = templateSheet.getRange(1, 1, 4).getValues();
// You will get an array 2D, using join you will able to get an string from
// all the elements in that array
var text = data.join();
var requestUrl = [
'https://language.googleapis.com/v1beta2/documents:analyzeEntities?key=',
'API_KEY_XXXXXXXXXXXXXXXXXXX'
].join("");
// Now text will have all your cell values and you only need to do one request
var data = {
"document": {
"language": "en-us",
"type": "PLAIN_TEXT",
"content": text
},
"encodingType": "UTF8"
};
var options = {
method : "POST",
contentType: "application/json",
payload : JSON.stringify(data)
};
var response = UrlFetchApp.fetch(requestUrl, options);
var data = JSON.parse(response);
DriveApp.createFile('response3.json', response, MimeType.PLAIN_TEXT);
}
這樣,您只需要發出一個請求,它會比運行 211 次循環更快。 我還建議您檢查:
Apps Script Quotas :運行你的代碼,它會給你更多達到這些配額的機會。
最佳實踐:您可以查看有關最佳實踐的更多信息,以便更好地了解我為什么要告訴您在循環中避免使用getValue()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.