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).
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.
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'
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.
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}); }
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); } }
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 );
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.
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!