2016-11-01 3 views
-1

Ich bin ein junior javascript/google-apps-script-Entwickler und ich wollte einige meiner Arbeitsblätter in Google Tabellen etwas Funktionalität hinzufügen. Ich arbeite mit vielen URLs und muss verfolgen, zu welcher Zeit sie vom Autor zuletzt geändert wurden.JSON.parse funktioniert nicht mit URL-Links

Ich habe ein Skript geschrieben, von dem ich dachte, dass es funktionieren wird, aber anscheinend (nach einigem Lesen) braucht es einen professionellen Touch.

Die Idee besteht darin, durch eine Spalte von URLs (2500 ~) zu iterieren und das geänderte Datum jeder URL (aus ihren Metadaten) in eine Zelle von rechts auszugeben. Hier ist mein Code:

function iteration1() { 
     var ss = SpreadsheetApp.getActiveSpreadsheet(); 
     **//The list to iterate on.** 
     var sheet = ss.getSheetByName("Fund List"); 
     **//The column of which the links are stored** 
     var urls = sheet.getRange("D2:D150").getValues(); 

     for (var row = 0; row < urls.length; row++) { 
      for (var col = 0; col < urls[row].length; col++) 
       **//Varifying if there is a URL within the cell** 
       if (urls[row][col] != '') { 
        **//Storing each URL in a new array** 
        var url = UrlFetchApp.fetch(urls[row][col].valueOf()); 
        **//Parsing the meta-data of the URL into an array** 
        var tweets = JSON.parse(url); 
        **//Retrieve the link modification date from the meta-data array & outputs to the cell from the right respectivley.** 
        sheet.getRange(row+2, 13).setValue(Logger.log(tweets[4][2]).getLog()); 
      } 
     } 
    } 

Beispiel: der Link http://documents.financialexpress.net/Literature/37773008.pdf

Die Meta-Daten:

{Accept-Ranges=bytes, X-Robots-Tag=noindex, nofollow, noarchive,nosnippet, Cache-Control=max-age=604800, Server=Microsoft-IIS/7.0, ETag="01827159b1d11:0", Access-Control-Allow-Origin=*, Access-Control-Allow-Methods=GET,PUT,POST,DELETE,OPTIONS, Last-Modified=Wed, 18 May 2016 23:00:00 GMT, Content-Length=113029, Access-Control-Allow-Headers=Content-Type, Date=Thu, 01 Sep 2016 11:43:52 GMT, Content-Type=application/pdf} 

Ich brauche nur das Last-Modified-Feld Datum innerhalb dieses Meta-Daten-Array und es von rechts in die Zelle ausgeben.

Vielen Dank im Voraus für die Helfer! großartige Gemeinschaft hier!

Ich habe einen Screenshot von meinem aktuellen Code und den Debugger-Modus hinzugefügt, die ich arbeite ein Beispiel für die Verbindungen gibt: enter image description here

Antwort

0

Nach einigen Tagen habe ich es geschafft, den Wert für den Last-Modified-Datumsschlüssel für jede URL in meinem Blatt abzurufen.


Mein Code:

function iteration1() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    //The Google sheet to access 
    var sheet = ss.getSheetByName("Sheet Name"); 
    //The array of URLs to check 
    var urls = sheet.getRange("D2:D150").getDisplayValues(); 

    for (var row = 0; row < urls.length; row++) { 
     for (var col = 0; col < urls[row].length; col++) { 
     if (urls[row][col].toString() != '') { 
      //Converting each URL to string and retrieving its Properties into a new Array 
      var url = UrlFetchApp.fetch(urls[row][col].toString()); 
      var tweets = url.getAllHeaders(); 

      //Forming an array of Properties by Keys & Values 
      var userProperties = PropertiesService.getUserProperties(); 
      userProperties.setProperties(tweets); 
      var tweetsKeys = Object.keys(tweets); 
     } 
     } 

     //Retrieving the link modification date from the property meta-data & outputs it as a String to the cell from the right respectivley. 
     sheet.getRange(row+2, 12).setValue(userProperties.getProperty(tweetsKeys[7])); 
    } 
} 

Vielen Dank für Ihre Antworten!

0

Von dem, was ich aus der Google-Dokumentation (https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String)) das Ergebnis sehen Sie in der Variablen url speichern ist keine Zeichenfolge.

JSON.parse eine Zeichenfolge annehmen und verwandeln es in ein JavaScript-Objekt/Array/String/was auch immer

Sie müssen statt JSON.parse (url) verwenden, JSON.parse (url.getContentText ('utf -8 ')) wie hier dokumentiert: https://developers.google.com/apps-script/reference/url-fetch/http-response

+0

Ich habe es versucht und es zeigte mir diesen Fehler, nachdem ich es ausgeführt: SyntaxError: Unerwartetes Token:% (Zeile 12, Datei "Iteration1") –

+0

@TomerLevi Ich brauche mehr Informationen, können Sie ein Beispiel für den Inhalt bereitstellen von url.getContentText ('utf-8')? –

+0

Hallo Maurizio, ich habe einen Screenshot mit dem Fehler und dem Array von Inhalten, mit denen ich arbeite, hinzugefügt. Vielen Dank;) –