"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > gcloud CLI प्रमाणीकरण के माध्यम से स्थानीय स्क्रिप्ट से Google शीट पर लिखें

gcloud CLI प्रमाणीकरण के माध्यम से स्थानीय स्क्रिप्ट से Google शीट पर लिखें

2024-11-03 को प्रकाशित
ब्राउज़ करें:349

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

हाल ही में मुझे GitHub API से डेटा खींचने और Google शीट पर प्रकाशित करने की आवश्यकता थी ताकि मैं कोड समीक्षा कार्यभार के बारे में कुछ चार्ट साझा कर सकूं। यह पोस्ट इस बारे में है कि मैंने प्रमाणीकरण कैसे कार्यान्वित किया।

मैंने एक Node.js स्क्रिप्ट लिखी क्योंकि मेरा उपयोग मामला BASH के लिए बहुत जटिल था और Go के लिए बहुत अस्थायी लग रहा था। प्रारंभ में, स्क्रिप्ट ने तदर्थ सीएसवी डेटा उत्पन्न किया जिसे मैं पेस्ट-एज़-सीएसवी सुविधा का उपयोग करके मैन्युअल रूप से Google शीट में कॉपी कर सकता था। मैन्युअल रूप से कॉपी करने के कुछ दौरों के बाद, मैं अपने समय का बुद्धिमानी से उपयोग करना चाहता था: मैंने अनुमान लगाया कि मुझे कुछ घंटों के भीतर शीट्स एकीकरण मिल जाएगा और यदि ऐसा है तो ऐसा होगा
संभवतः कुछ महीनों के भीतर भुगतान हो जाएगा।

एक तरफ: शीट्स मेरा डेटाबेस नहीं है। यह मेरा डेटा रिपोर्टिंग यूआई है। शीट्स को अपने डेटाबेस के रूप में उपयोग न करें।

इसे काम करने में मुझे करीब 4 घंटे लगे, क्योंकि प्रमाणीकरण कठिन है। यह पोस्ट कार्यशील समाधान के लिए अधिक सीधा रास्ता दिखाती है।

ओएथ एप्लिकेशन बनाने की जटिलता से विचलित होना आसान है, और जबकि मैं विशेष रूप से अपनी क्लाउड सेवाओं से एक सेवा खाते का उपयोग करना पसंद करता हूं, वह है
स्थानीय रूप से चलने पर कम सुविधाजनक।

मैंने जो तरकीब सीखी वह यह है कि जीक्लाउड सीएलआई का एप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल्स का सेटअप Google वर्कस्पेस कोड के लिए एक प्रकार के OAuth प्रॉक्सी के रूप में काम कर सकता है, यह विस्तार करके कि यह Google के साथ आपके खाते को कैसे प्रमाणित करता है ताकि कुछ और अनुमतियाँ (OAuth स्कोप्स) शामिल हो सकें।

? जीक्लाउड सीएलआई के साथ स्थानीय प्रमाणीकरण

Google शीट्स के लिए एपीआई अनुरोध करने के लिए, अपने क्लाउड प्रोजेक्ट में शीट्स एपीआई सक्षम करें:

$> gcloud services enable sheets.googleapis.com

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

अपना एप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल सेट करें, कुछ गैर-डिफ़ॉल्ट OAuth स्कोप का भी दावा करें ताकि क्रेडेंशियल का उपयोग शीट के साथ किया जा सके:

$> 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'

यह एक OAuth प्रवाह को ट्रिगर करेगा जिसमें आपके ब्राउज़र में एक वेबपेज पर जाना शामिल है। टर्मिनल कॉन्फ़िगरेशन के आधार पर यह एक यूआरएल प्रदर्शित कर सकता है या पेज भी खोल सकता है।

जब gcloud को यह दायरा दिया जाता है, तो जो कोड आपके स्थानीय क्रेडेंशियल्स तक पहुंच सकता है, उसके पास आपके सभी Google शीट्स डेटा को पढ़ने/लिखने की पहुंच होगी। आप आवश्यकतानुसार उस एक्सेस को चालू और बंद करने के लिए अनुकूलित स्कोप के बिना इस कमांड को फिर से चला सकते हैं।

?️ 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});
}

? शीट में डेटा जोड़ें

शीट में डेटा जोड़ने के तरीके पर दस्तावेज़ों से नमूना
(Node.js टैब पर क्लिक करें) अच्छा काम किया। हालाँकि, मुझे समझ नहीं आ रहा था कि वहां से प्रमाणीकरण कैसे कार्यान्वित किया जाए। एक बार जब मैंने अपने देव पर्यावरण क्रेडेंशियल्स में लापता OAuth स्कोप को जोड़ने के लिए उपरोक्त ट्रिक को समझ लिया तो नमूना ने काम करना शुरू कर दिया।

मैंने क्लाइंट के पुन: उपयोग को आसान बनाने, अनुरोध को अलग तरीके से पैरामीटराइज़ करने और इस बात पर जोर देने के लिए कुछ बदलाव किए हैं कि मैं शीट्स द्वारा डेटा को कैसे प्रबंधित करना चाहता हूं।

उपरोक्त क्लाइंट इनिशियलाइज़ेशन कोड का लाभ उठाते हुए, शीट में डेटा जोड़ने के लिए मेरा कोड:

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);
    }
}

मैं "एपेंड" का उपयोग कर रहा हूं क्योंकि मेरी स्क्रिप्ट मासिक मेट्रिक्स एकत्र करती है, और एपेंड मुझे पिछली पंक्तियों को हटाए बिना नई पंक्तियां जोड़ने की अनुमति देता है।

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
);

दस्तावेज़ में शीट्स एपीआई के साथ काम करने के बारे में कुछ अच्छी युक्तियां हैं जैसे कि प्रति शीट प्रति सेकंड एक से अधिक एपीआई अनुरोध न भेजने का सुझाव। मुझे कठिन तरीका पता चला: पहले अनुरोध के डेटा को दूसरे अनुरोध के डेटा के साथ ओवरराइट करना।

? इसे भेज दो!

अगर मैं इसका उत्पादन करने के लिए आगे बढ़ता हूं, तो मैं इसका उपयोग करना शुरू कर सकता हूं
क्लाउड शेड्यूलर और क्लाउड रन जॉब्स। यदि आप इसके बारे में पढ़ना चाहेंगे तो मुझे बताएं।

अनस्प्लैश पर ग्लिब एल्बोव्स्की द्वारा कवर फ़ोटो

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/googlecloud/write-to-google-Sheets-from-a-local-script-via-gcloud-cli-authentication-3p1f?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 .comडिलीट से संपर्क करें
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3