كنت بحاجة مؤخرًا إلى سحب البيانات من واجهة برمجة تطبيقات GitHub ونشرها على ورقة Google حتى أتمكن من مشاركة بعض المخططات حول عبء عمل مراجعة التعليمات البرمجية. تتناول هذه المشاركة كيفية عمل المصادقة.
لقد كتبت نص Node.js لأن حالة الاستخدام الخاصة بي كانت معقدة جدًا بالنسبة لـ BASH وبدت مؤقتة جدًا بالنسبة لـ Go. في البداية، أنشأ البرنامج النصي بيانات CSV مخصصة يمكنني نسخها يدويًا إلى جداول بيانات Google باستخدام ميزة اللصق بتنسيق CSV. بعد بضع جولات من النسخ يدويًا، أردت استغلال وقتي بحكمة: لقد قدرت أنه يمكنني الحصول على تكامل جداول البيانات في غضون ساعتين، وإذا كان الأمر كذلك، فهذا من شأنه
ربما تؤتي ثمارها في غضون بضعة أشهر.
بصرف النظر: جداول البيانات ليست قاعدة البيانات الخاصة بي. إنها واجهة المستخدم الخاصة بالإبلاغ عن البيانات. لا تستخدم جداول البيانات كقاعدة بيانات.
استغرق الأمر ما يقرب من 4 ساعات لإنجاز هذا العمل، لأن المصادقة صعبة. يعرض هذا المنشور المسار الأكثر مباشرة إلى حل عملي.
من السهل أن تشتت انتباهي بسبب تعقيد إنشاء تطبيق oAuth، وبينما أحب بشكل خاص استخدام حساب خدمة من خدماتي السحابية، فإن هذا
أقل ملاءمة عند التشغيل محليًا.
الخدعة التي تعلمتها هي أن إعداد gcloud CLI لبيانات الاعتماد الافتراضية للتطبيق يمكن أن يعمل كنوع من وكيل OAuth لرمز Google Workspace، من خلال توسيع كيفية مصادقة حسابك مع 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 الذي يتضمن زيارة صفحة ويب في متصفحك. اعتمادًا على تكوين المحطة الطرفية، قد يعرض هذا عنوان URL أو حتى يفتح الصفحة.
عندما يتم منح gcloud هذا النطاق، فإن الكود الذي يمكنه الوصول إلى بيانات الاعتماد المحلية الخاصة بك سيكون له حق الوصول للقراءة/الكتابة إلى جميع بيانات جداول بيانات 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
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3