Skip to content

Instantly share code, notes, and snippets.

@jpigla
Last active March 2, 2023 13:03
Show Gist options
  • Save jpigla/14469fe3833df4194462249bef45b5b1 to your computer and use it in GitHub Desktop.
Save jpigla/14469fe3833df4194462249bef45b5b1 to your computer and use it in GitHub Desktop.
Get daily visibiliy index from Sistrix with Google Sheets, GAS & DataStudio
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