"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > الكتابة إلى جداول بيانات Google من برنامج نصي محلي عبر مصادقة gcloud CLI

الكتابة إلى جداول بيانات Google من برنامج نصي محلي عبر مصادقة gcloud CLI

تم النشر بتاريخ 2024-11-03
تصفح:536

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

كنت بحاجة مؤخرًا إلى سحب البيانات من واجهة برمجة تطبيقات GitHub ونشرها على ورقة Google حتى أتمكن من مشاركة بعض المخططات حول عبء عمل مراجعة التعليمات البرمجية. تتناول هذه المشاركة كيفية عمل المصادقة.

لقد كتبت نص Node.js لأن حالة الاستخدام الخاصة بي كانت معقدة جدًا بالنسبة لـ BASH وبدت مؤقتة جدًا بالنسبة لـ Go. في البداية، أنشأ البرنامج النصي بيانات CSV مخصصة يمكنني نسخها يدويًا إلى جداول بيانات Google باستخدام ميزة اللصق بتنسيق CSV. بعد بضع جولات من النسخ يدويًا، أردت استغلال وقتي بحكمة: لقد قدرت أنه يمكنني الحصول على تكامل جداول البيانات في غضون ساعتين، وإذا كان الأمر كذلك، فهذا من شأنه
ربما تؤتي ثمارها في غضون بضعة أشهر.

بصرف النظر: جداول البيانات ليست قاعدة البيانات الخاصة بي. إنها واجهة المستخدم الخاصة بالإبلاغ عن البيانات. لا تستخدم جداول البيانات كقاعدة بيانات.

استغرق الأمر ما يقرب من 4 ساعات لإنجاز هذا العمل، لأن المصادقة صعبة. يعرض هذا المنشور المسار الأكثر مباشرة إلى حل عملي.

من السهل أن تشتت انتباهي بسبب تعقيد إنشاء تطبيق oAuth، وبينما أحب بشكل خاص استخدام حساب خدمة من خدماتي السحابية، فإن هذا
أقل ملاءمة عند التشغيل محليًا.

الخدعة التي تعلمتها هي أن إعداد gcloud CLI لبيانات الاعتماد الافتراضية للتطبيق يمكن أن يعمل كنوع من وكيل OAuth لرمز Google Workspace، من خلال توسيع كيفية مصادقة حسابك مع Google لتشمل بعض الأذونات الإضافية (نطاقات OAuth).

؟ المصادقة المحلية مع gcloud CLI

لتقديم طلبات واجهة برمجة التطبيقات إلى جداول بيانات 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 الذي يتضمن زيارة صفحة ويب في متصفحك. اعتمادًا على تكوين المحطة الطرفية، قد يعرض هذا عنوان URL أو حتى يفتح الصفحة.

عندما يتم منح gcloud هذا النطاق، فإن الكود الذي يمكنه الوصول إلى بيانات الاعتماد المحلية الخاصة بك سيكون له حق الوصول للقراءة/الكتابة إلى جميع بيانات جداول بيانات Google الخاصة بك. يمكنك إعادة تشغيل هذا الأمر بدون النطاقات المخصصة للتبديل بين تشغيل وإيقاف الوصول حسب الحاجة.

️ تهيئة عميل Node لجداول بيانات 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
);

هناك بعض النصائح الجيدة حول العمل مع Sheets API في المستندات مثل اقتراح عدم إرسال أكثر من طلب API واحد في الثانية لكل ورقة. لقد اكتشفت ذلك بالطريقة الصعبة: استبدال البيانات من الطلب الأول ببيانات من الطلب الثاني.

؟ شحنها!

إذا انتقلت إلى إنتاج هذا، فقد أتحول إلى استخدام
وظائف جدولة السحابة وتشغيل السحابة. اسمحوا لي أن أعرف إذا كنت ترغب في القراءة عن ذلك.

صورة الغلاف لجليب ألبوفسكي على Unsplash

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/googlecloud/write-to-google-sheets-from-a-local-script-via-gcloud-cli-authentication-3p1f?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3