Tulis ke Helaian Google daripada skrip tempatan melalui pengesahan CLI gcloud

Susan Sarandon
Lepaskan: 2024-09-26 08:38:22
asal
1118 orang telah melayarinya

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

Baru-baru ini saya perlu mengeluarkan data daripada API GitHub dan menerbitkan ke Helaian Google supaya saya boleh berkongsi beberapa carta tentang beban kerja semakan kod. Siaran ini adalah tentang cara saya membuat pengesahan berfungsi.

Saya menulis skrip Node.js kerana kes penggunaan saya terlalu rumit untuk BASH dan kelihatan terlalu sementara untuk Go. Pada mulanya, skrip menjana data CSV ad hoc yang boleh saya salin secara manual ke dalam Helaian Google menggunakan ciri Tampal sebagai CSV. Selepas beberapa pusingan menyalin secara manual, saya ingin menggunakan masa saya dengan bijak: Saya menganggarkan bahawa saya boleh mendapatkan penyepaduan Helaian yang berfungsi dalam masa beberapa jam dan jika ya, itu akan
mungkin dibayar dalam masa beberapa bulan.

Selain: Helaian bukan pangkalan data saya. Ia adalah UI pelaporan data saya. Jangan gunakan Helaian sebagai pangkalan data anda.

Saya mengambil masa hampir 4 jam untuk memastikan ini berfungsi, kerana pengesahan adalah sukar. Siaran ini menunjukkan laluan yang lebih terus kepada penyelesaian yang berfungsi.

Mudah untuk terganggu dengan kerumitan mencipta aplikasi oAuth, dan walaupun saya sangat suka menggunakan akaun perkhidmatan daripada perkhidmatan Cloud saya, itu
kurang mudah apabila dijalankan secara tempatan.

Helah yang saya pelajari ialah persediaan bukti kelayakan lalai aplikasi gcloud CLI boleh beroperasi sebagai sejenis proksi OAuth untuk kod Google Workspace, dengan mengembangkan cara ia mengesahkan akaun anda dengan Google untuk menyertakan beberapa lagi kebenaran (Skop OAuth).

? Pengesahan tempatan dengan gcloud CLI

Untuk membuat permintaan API kepada Helaian Google, dayakan API Helaian dalam projek Awan anda:

$> gcloud services enable sheets.googleapis.com

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

Tetapkan kelayakan lalai aplikasi anda, juga menuntut beberapa skop OAuth bukan lalai supaya bukti kelayakan boleh digunakan dengan helaian:

$> 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'
Salin selepas log masuk

Ini akan mencetuskan aliran OAuth yang melibatkan melawati halaman web dalam penyemak imbas anda. Bergantung pada konfigurasi terminal ini mungkin memaparkan URL atau bahkan membuka halaman.

Apabila gcloud diberikan skop ini, kod yang boleh mengakses bukti kelayakan tempatan anda akan mempunyai akses baca/tulis kepada semua data Helaian Google anda. Anda boleh menjalankan semula arahan ini tanpa skop tersuai untuk menghidupkan dan mematikan akses tersebut mengikut keperluan.

?️ Mulakan klien Node untuk Helaian Google

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});
}
Salin selepas log masuk

? Tambahkan data pada helaian

Sampel daripada dokumen tentang cara menambahkan data pada helaian
(klik pada tab Node.js) berfungsi dengan baik. Walau bagaimanapun, saya tidak dapat memahami cara untuk mendapatkan pengesahan dari sana. Sampel berfungsi sebaik sahaja saya memahami helah di atas untuk menambahkan skop OAuth yang hilang pada bukti kelayakan persekitaran dev saya.

Saya membuat beberapa perubahan untuk membolehkan penggunaan semula klien dengan lebih mudah, parameter permintaan secara berbeza dan menekankan cara saya mahu data dikendalikan oleh Helaian.

Kod saya untuk menambahkan data pada helaian, memanfaatkan kod permulaan pelanggan di atas:

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);
    }
}
Salin selepas log masuk

Saya menggunakan "tambah" kerana skrip saya mengumpul metrik bulanan dan tambah membenarkan saya menambah baris baharu tanpa mengalih keluar baris sebelumnya.

Berikut ialah contoh cara memanggil fungsi 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
);
Salin selepas log masuk

Terdapat beberapa petua bagus tentang bekerja dengan API Helaian dalam dokumen seperti cadangan untuk tidak menghantar lebih daripada satu permintaan API sesaat setiap helaian. Saya mendapati cara yang sukar: menimpa data daripada permintaan pertama dengan data dari saat.

? Hantarkan!

Jika saya bergerak ke hadapan untuk menghasilkan ini, saya mungkin beralih kepada menggunakan
Cloud Scheduler dan Cloud Run Jobs. Beritahu saya jika anda ingin membaca tentang itu.

Foto Muka Depan oleh Glib Albovsky di Unsplash

Atas ialah kandungan terperinci Tulis ke Helaian Google daripada skrip tempatan melalui pengesahan CLI gcloud. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan