Last active
March 2, 2023 13:03
-
-
Save jpigla/14469fe3833df4194462249bef45b5b1 to your computer and use it in GitHub Desktop.
Get daily visibiliy index from Sistrix with Google Sheets, GAS & DataStudio
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function daily_si() { | |
const sistrix_key = 'XXX'; | |
// Führe die Funktion 'append_date' aus, welche das heutige Datum in die Datumsspalte schreibt. | |
append_date(); | |
let ss_si_data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tägliche Sichtbarkeit'); | |
let cell_wip = ss_si_data.getRange('A2'); | |
cell_wip.setValue('Update...'); | |
cell_wip.setBackground('#2ecc71'); | |
// Ermittle die Anzahl der Zeilen im Sheet (letzte Zelle ist befüllende Zellen mit SI-Daten) | |
let count_rows = ss_si_data.getLastRow(); | |
Logger.log('count_rows: ' + count_rows); | |
// Ermittle die Anzahl der Spalten im Sheet (zu durchlafende Spalten) | |
let count_columns = ss_si_data.getMaxColumns(); | |
Logger.log('count_columns: ' + count_columns); | |
// Setzte Pointer auf das aktuelle Datum | |
let cell_today = 'A' + count_rows; | |
Logger.log('cell_today: ' + cell_today); | |
// Setzte die Range auf den kompletten Datenbereich inkl. Zeile mit Typ (Domain, Host, Path) und URL | |
// ==> Range muss *manuell* angepasst werden, falls Spalten entfernt werden <== | |
let cells_range = ss_si_data.getRange('B2:DO' + count_rows); | |
Logger.log('cells_si: ' + cells_range); | |
// Durchlaufe alle Spalten | |
for (let i = 1; i <= count_columns-1; i++) { | |
Logger.log('Durchgang (Spalte): ' + i + '/' + count_columns); | |
// Setzte den Pointer auf die richtige Zelle (aktuelles Datum -> Ende jeder Spalte) | |
let cell_si = cells_range.getCell(count_rows-1,i) | |
//Logger.log('Zelle für SI: ' + cell_si); | |
// Lese den Typ von abzufragender URL (Domain, Host, Path) | |
let type = cells_range.getCell(1, i).getValue(); | |
//Logger.log('type: ' + type); | |
// Lese die zu prüfende URL | |
let url = cells_range.getCell(2, i).getValue(); | |
//Logger.log('url: ' + url); | |
// Setzte die Sistrix API URL zusammen (API-Key, Datum, Typ, URL) | |
let api_url = 'https://api.sistrix.com/domain.sichtbarkeitsindex?api_key=' + sistrix_key + '&date=' + ss_si_data.getRange(cell_today).getValue() + '&daily=true&mobile=true&' + type + '=' + url; | |
Logger.log('api_url: ' + api_url); | |
// Lade den Inhalt der XML | |
let xml = UrlFetchApp.fetch(api_url).getContentText(); | |
// Parse das XML | |
let document = XmlService.parse(xml); | |
// Wähle das Node "sichtbarkeitsindex" | |
let node = document.getRootElement().getChild("answer").getChild("sichtbarkeitsindex"); | |
// Extrahiere den Wert des Attributes "value" der API-Abfrage -> Sichtbarkeitsindex | |
let si = node.getAttribute('value').getValue(); | |
// Bereinige den SI-Wert (Punkt zu Komma) | |
let si_clean = si.toString().replace(".", ","); | |
Logger.log('si: ' + si + ' (si_clean: ' + si_clean + ')'); | |
// Schreibe Sichtbarkeitsindex (Wert aus API-Abfrage) in die jeweilige Zelle | |
cell_si.setValue(si_clean); | |
// Pausiere 0,5 Sekunden, um das Rate-Limit (0,3s) der Sistrix-API nicht zu erreichen (https://www.sistrix.de/api/). | |
// ~118 (URLs) * 0,5s = 60s Laufzeit | |
Utilities.sleep(500); | |
} | |
cell_wip.clear(); | |
cell_wip.clearFormat(); | |
} | |
function append_date() { | |
// let today = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd"); | |
let ss_uebersicht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Übersicht'); | |
let ss_si_data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tägliche Sichtbarkeit'); | |
// Lese das heutige Datum aus dem Sheet (in Zelle A1) | |
let today = ss_si_data.getRange('A1').getValue(); | |
// Ermittle die Anzahl der Zeilen und addiere 1, um die erste leere Zeile zu erhalten (wird befüllt) | |
let count_rows = ss_si_data.getLastRow() + 1; | |
// Befülle die erste leere Zeile in der Datumsspalte mit dem Wert des heutigen Datums | |
ss_si_data.getRange('A' + count_rows).setValue(today) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment