Heim  >  Artikel  >  Web-Frontend  >  Schreiben Sie aus einem lokalen Skript über die gcloud-CLI-Authentifizierung in Google Sheets

Schreiben Sie aus einem lokalen Skript über die gcloud-CLI-Authentifizierung in Google Sheets

Susan Sarandon
Susan SarandonOriginal
2024-09-26 08:38:22987Durchsuche

Write to Google Sheets from a local script via gcloud CLI authentication

Kürzlich musste ich Daten aus der GitHub-API abrufen und in einem Google Sheet veröffentlichen, damit ich einige Diagramme zur Codeüberprüfungs-Arbeitslast teilen konnte. In diesem Beitrag geht es darum, wie ich die Authentifizierung zum Laufen gebracht habe.

Ich habe ein Node.js-Skript geschrieben, weil mein Anwendungsfall für BASH zu komplex und für Go zu temporär erschien. Zunächst generierte das Skript Ad-hoc-CSV-Daten, die ich mithilfe der Funktion „Als CSV einfügen“ manuell in Google Sheets kopieren konnte. Nach ein paar Runden manuellen Kopierens wollte ich meine Zeit sinnvoll nutzen: Ich schätzte, dass ich eine Sheets-Integration innerhalb von ein paar Stunden zum Laufen bringen könnte, und wenn ja, würde das auch so sein
wird sich wahrscheinlich innerhalb weniger Monate amortisieren.

Nebenbei: Sheets ist nicht meine Datenbank. Es ist meine Benutzeroberfläche für die Datenberichterstattung. Verwenden Sie Tabellen nicht als Datenbank.

Es hat fast 4 Stunden gedauert, bis dies funktionierte, da die Authentifizierung schwierig ist. Dieser Beitrag zeigt den direkteren Weg zu einer funktionierenden Lösung.

Man lässt sich leicht von der Komplexität der Erstellung einer oAuth-Anwendung ablenken, und obwohl ich besonders gerne ein Dienstkonto aus meinen Cloud-Diensten verwende, ist das so
weniger praktisch, wenn es lokal ausgeführt wird.

Der Trick, den ich gelernt habe, besteht darin, dass die Einrichtung der Standardanmeldeinformationen der Anwendung durch die gcloud-CLI als eine Art OAuth-Proxy für Google Workspace-Code fungieren kann, indem die Art und Weise, wie Ihr Konto bei Google authentifiziert wird, um einige weitere Berechtigungen (OAuth-Bereiche) erweitert wird.

? Lokale Authentifizierung mit gcloud CLI

Um API-Anfragen an Google Sheets zu stellen, aktivieren Sie die Sheets-API in Ihrem Cloud-Projekt:

$> gcloud services enable sheets.googleapis.com

Operation "operations/acat.p2-480745230567-02564c8d-c6ba-4f60-90bd-13f33e41f0fe" finished successfully.

Legen Sie Ihre Standardanmeldeinformationen für die Anwendung fest und beanspruchen Sie auch einige nicht standardmäßige OAuth-Bereiche, damit die Anmeldeinformationen mit Blättern verwendet werden können:

$> gcloud auth application-default login --scopes \
   'https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets'

Dadurch wird ein OAuth-Ablauf ausgelöst, der den Besuch einer Webseite in Ihrem Browser beinhaltet. Abhängig von der Terminalkonfiguration wird möglicherweise eine URL angezeigt oder sogar die Seite geöffnet.

Wenn gcloud dieser Bereich gewährt wird, hat Code, der auf Ihre lokalen Anmeldeinformationen zugreifen kann, Lese-/Schreibzugriff auf alle Ihre Google Sheets-Daten. Sie können diesen Befehl ohne die benutzerdefinierten Bereiche erneut ausführen, um diesen Zugriff nach Bedarf ein- und auszuschalten.

?️ Initialisieren Sie einen Node-Client für Google Sheets

import {google} from 'googleapis';

function sheetsClient() {
    const authConfig = new google.auth.GoogleAuth({
        scopes: [
            // Only 'spreadsheets' scope is needed in the code.
            // gcloud CLI also needs 'cloud-platform' and 'drive'.
            'https://www.googleapis.com/auth/spreadsheets'
        ],
    });
    const auth = await authConfig.getClient();
    return google.sheets({version: 'v4', auth});
}

? Hängen Sie Daten an das Blatt an

Das Beispiel aus den Dokumenten zum Anhängen von Daten an das Blatt
(Klicken Sie auf die Registerkarte Node.js) hat gut funktioniert. Allerdings konnte ich nicht verstehen, wie ich die Authentifizierung von dort aus zum Laufen bringen kann. Das Beispiel funktionierte, sobald ich den oben genannten Trick verstanden hatte, um die fehlenden OAuth-Bereiche zu meinen Anmeldeinformationen für die Entwicklungsumgebung hinzuzufügen.

Ich habe ein paar Änderungen vorgenommen, um eine einfachere Wiederverwendung des Clients zu ermöglichen, die Anfrage anders zu parametrisieren und hervorzuheben, wie die Daten von Sheets verarbeitet werden sollen.

Mein Code zum Anhängen von Daten an das Blatt unter Nutzung des obigen Client-Initialisierungscodes:

let client;

async function appendDataToSheet(spreadsheetId, tab, values) {
    if (!client) {
        client = sheetsClient();
    }

    try {
        const result = await client.spreadsheets.values.append({
            spreadsheetId,
            range: `${tab}!A2:AG`,
            // Use my data as provided.
            valueInputOption: 'RAW',
            // Inserts rows as part of appending to reduce overwrites.
            insertDataOption: 'INSERT_ROWS',
            requestBody: { values },
        });
        console.log(`${result.data.updates.updatedCells} cells appended.`);
    } catch(e) {
        // Show the error, do not stop. Cross-reference the error with terminal output
        // and decide case-by-case to re-run the script or manually copy data.
        console.error(e);
    }
}

Ich verwende „Anhängen“, weil mein Skript monatliche Messwerte sammelt und mir das Anhängen ermöglicht, neue Zeilen hinzuzufügen, ohne frühere Zeilen zu entfernen.

Hier ist ein Beispiel für den Aufruf der Funktion appendDataToSheet():

const values = [
  // Each nested array is a spreadsheet row.
  [1, 2, 3, 4, 'luggage'],
  [4, 5, 6, 'N/A', 'sticks'],
];
appendDataToSheet(
  'HPDkfqdu6rfIq5-4uTGDqz2tvmPxDZMul27JFexample',
  'Exported Data Tab',
  values
);

In den Dokumenten finden Sie einige gute Tipps zum Arbeiten mit der Sheets-API, beispielsweise den Vorschlag, nicht mehr als eine API-Anfrage pro Sekunde und Blatt zu senden. Ich habe es auf die harte Tour herausgefunden: Daten aus einer ersten Anfrage mit Daten aus einer zweiten überschreiben.

? Versenden Sie es!

Wenn ich damit weitermache, dies zu produzieren, wechsle ich vielleicht zur Verwendung
Cloud Scheduler- und Cloud Run-Jobs. Lassen Sie es mich wissen, wenn Sie darüber lesen möchten.

Titelfoto von Glib Albovsky auf Unsplash

Das obige ist der detaillierte Inhalt vonSchreiben Sie aus einem lokalen Skript über die gcloud-CLI-Authentifizierung in Google Sheets. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:HTTP-Timeout mit AxiosNächster Artikel:HTTP-Timeout mit Axios