Das Ziel ist es, etwa 10.000 Zeilen von Links zu durchlaufen. Bestimmen Sie, welche Seitenzahlen> 3 haben und markieren Sie die erste Spalte. Ich habe das alles erledigt, aber das Problem ist, dass es dauert Url Fetch zu lang, ich renne in einen maximalen Laufzeitfehler. Kann ich diesen Code trotzdem beschleunigen, damit ich die 10.000 Zeilen durchgehen kann?Beschleunigen UrlFetch Google App Scripts?
function readColumns() {
//program is going to run through column 3 by going through the amount of rows, truncating last three characters to see if pdf, then highlighting first column
var sheet = SpreadsheetApp.getActiveSheet();
var columns = sheet.getDataRange();
var rowNum = columns.getNumRows();
var values = columns.getValues();
var html;
var htmlString;
for(var i = 1; i <= rowNum; i++){
var columnLogger = values[i][2];
try{
html = UrlFetchApp.fetch(values[i][2],
{
muteHttpExceptions: true,
}
);
}catch(e){
Logger.log("Error at line " + i);
var error = true;
}
htmlString = html.getContentText();
var index = htmlString.indexOf("Pages") + 6;
var pageNumber = parseInt(htmlString.charAt(index),10);
var lastChars = "" + columnLogger.charAt(columnLogger.length-3) + columnLogger.charAt(columnLogger.length-2) + columnLogger.charAt(columnLogger.length-1);
if((error) || (!lastChars.equals("pdf") && values[i][6].equals("") && !pageNumber >= 3)){
//goes back to first column and highlights yellow
var cellRange = sheet.getRange(1, 1, rowNum, 3)
var cell = cellRange.getCell(i+1, 1)
cell.setBackground("yellow");
}
}
}
Bearbeiten - kurze Skripte:
function foreverCall(){
var start = 1480;
for(;;){
readColumns(start);
start = start + 100;
}
}
function readColumns(start) {
//program is going to run through column 3 by going through the amount of rows, truncating last three characters to see if pdf, then highlighting first column
var sheet = SpreadsheetApp.getActiveSheet();
var columns = sheet.getDataRange();
var rowNum = columns.getNumRows();
var values = columns.getValues();
var html;
var htmlString;
var error;
for(var i = start; i < start+100; i++){
if(loop(values, error, html, htmlString, rowNum, sheet, columns, i)){
var cellRange = sheet.getRange(1, 1, rowNum, 3)
var cell = cellRange.getCell(i, 1)
cell.setBackground("yellow");
}
}
}
function loop(values, error, html, htmlString, rowNum, sheet, columns, i){
var columnLogger = values[i][2];
var lastChars = columnLogger.slice(-4);
if(!lastChars.equals(".pdf") && values[i][6].equals("")){
return true;
}else{
try{
error = false
html = UrlFetchApp.fetch(values[i][2].toString());
if(html == null){
error = true;
}
}catch(e){
Logger.log("Error at line " + i);
error = true;
}
if(!error){
htmlString = html.getContentText();
var index = htmlString.indexOf("Pages") + 6;
var pageNumber = parseInt(htmlString.charAt(index),10);
}
//goes back to first column and highlights yellow
if(error || !pageNumber >= 3){
return true;
}
}
return false;
}
Danke für die Antwort. Also, ich brauche wirklich nur die ersten 50 Zeichen dieser URL-Fetch-App, aber es muss immer die ganze Seite geladen werden. Gibt es trotzdem, um die Ausführungszeit zu beschleunigen, um es nur eine kleine Menge des HTML zu laden? Vielleicht eine Art Timeout (dh 20 ms), die diesen Befehl überspringen würde? Dies würde den HTML-Code hoffentlich kürzen. –
Ich weiß es nicht wirklich, aber ich frage mich, ob Sie vielleicht Javascript und oder Cookies für den Abruf deaktivieren könnten. Sie können eine deutlich andere Seite erhalten, aber Sie können möglicherweise den Text erhalten, den Sie brauchen. Wirklich, das ist eine totale Vermutung meinerseits. – Cooper
Ok, das ist in Ordnung. Ist das das, was Sie vorgeschlagen haben, um es unter dem Skript-Limit zu halten? Ich habe die Frage bearbeitet –