التشغيل السريع Node.js

أكمل الخطوات الموضحة في باقي هذه الصفحة، وفي غضون خمس دقائق تقريبًا سيكون لديك تطبيق سطر أوامر Node.js بسيط يقدم طلبات إلى YouTube Data API.

يعمل نموذج الرمز المستخدَم في هذا الدليل على استرداد المورد channel لقناة YouTubeDevelopers على YouTube وطباعة بعض المعلومات الأساسية من هذا المورد.

المتطلبات الأساسية

لتنفيذ هذا التشغيل السريع، ستحتاج إلى:

  • تم تثبيت Node.js.
  • أداة إدارة الحزم npm (تتوفر مع Node.js).
  • الدخول إلى الإنترنت ومتصفح الويب.
  • حساب Google.

الخطوة 1: تفعيل YouTube Data API

  1. يمكنك استخدام هذا المعالج لإنشاء مشروع أو اختياره في Google Developers Console وتفعيل واجهة برمجة التطبيقات تلقائيًا. انقر على متابعة، ثم الانتقال إلى بيانات الاعتماد.

  2. في الصفحة إنشاء بيانات اعتماد، انقر على الزر إلغاء.

  3. في أعلى الصفحة، اختَر علامة التبويب شاشة موافقة OAuth. اختَر عنوان بريد إلكتروني، وأدخِل اسم المنتج إذا لم يسبق لك إعداده، ثم انقر على الزر حفظ.

  4. حدد علامة التبويب بيانات الاعتماد، وانقر على الزر إنشاء بيانات اعتماد، ثم حدد رقم تعريف عميل OAuth.

  5. اختَر نوع التطبيق غير ذلك، وأدخِل الاسم "البدء السريع لواجهة برمجة التطبيقات لبيانات YouTube"، ثم انقر على الزر إنشاء.

  6. انقر على موافق لتجاهل مربع الحوار الناتج.

  7. انقر على الزر (تنزيل JSON) على يسار معرِّف العميل.

  8. انقل الملف الذي تم تنزيله إلى دليل العمل وأعد تسميته client_secret.json.

الخطوة 2: تثبيت مكتبة البرامج

شغّل الأوامر التالية لتثبيت المكتبات باستخدام npm:

npm install googleapis --save
npm install google-auth-library --save

الخطوة 3: إعداد النموذج

أنشئ ملفًا باسم quickstart.js في دليل العمل وانسخ الرمز التالي:

var fs = require('fs');
var readline = require('readline');
var {google} = require('googleapis');
var OAuth2 = google.auth.OAuth2;

// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/youtube-nodejs-quickstart.json
var SCOPES = ['https://www.googleapis.com/auth/youtube.readonly'];
var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
    process.env.USERPROFILE) + '/.credentials/';
var TOKEN_PATH = TOKEN_DIR + 'youtube-nodejs-quickstart.json';

// Load client secrets from a local file.
fs.readFile('client_secret.json', function processClientSecrets(err, content) {
  if (err) {
    console.log('Error loading client secret file: ' + err);
    return;
  }
  // Authorize a client with the loaded credentials, then call the YouTube API.
  authorize(JSON.parse(content), getChannel);
});

/**
 * Create an OAuth2 client with the given credentials, and then execute the
 * given callback function.
 *
 * @param {Object} credentials The authorization client credentials.
 * @param {function} callback The callback to call with the authorized client.
 */
function authorize(credentials, callback) {
  var clientSecret = credentials.installed.client_secret;
  var clientId = credentials.installed.client_id;
  var redirectUrl = credentials.installed.redirect_uris[0];
  var oauth2Client = new OAuth2(clientId, clientSecret, redirectUrl);

  // Check if we have previously stored a token.
  fs.readFile(TOKEN_PATH, function(err, token) {
    if (err) {
      getNewToken(oauth2Client, callback);
    } else {
      oauth2Client.credentials = JSON.parse(token);
      callback(oauth2Client);
    }
  });
}

/**
 * Get and store new token after prompting for user authorization, and then
 * execute the given callback with the authorized OAuth2 client.
 *
 * @param {google.auth.OAuth2} oauth2Client The OAuth2 client to get token for.
 * @param {getEventsCallback} callback The callback to call with the authorized
 *     client.
 */
function getNewToken(oauth2Client, callback) {
  var authUrl = oauth2Client.generateAuthUrl({
    access_type: 'offline',
    scope: SCOPES
  });
  console.log('Authorize this app by visiting this url: ', authUrl);
  var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
  rl.question('Enter the code from that page here: ', function(code) {
    rl.close();
    oauth2Client.getToken(code, function(err, token) {
      if (err) {
        console.log('Error while trying to retrieve access token', err);
        return;
      }
      oauth2Client.credentials = token;
      storeToken(token);
      callback(oauth2Client);
    });
  });
}

/**
 * Store token to disk be used in later program executions.
 *
 * @param {Object} token The token to store to disk.
 */
function storeToken(token) {
  try {
    fs.mkdirSync(TOKEN_DIR);
  } catch (err) {
    if (err.code != 'EEXIST') {
      throw err;
    }
  }
  fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
    if (err) throw err;
    console.log('Token stored to ' + TOKEN_PATH);
  });
}

/**
 * Lists the names and IDs of up to 10 files.
 *
 * @param {google.auth.OAuth2} auth An authorized OAuth2 client.
 */
function getChannel(auth) {
  var service = google.youtube('v3');
  service.channels.list({
    auth: auth,
    part: 'snippet,contentDetails,statistics',
    forUsername: 'GoogleDevelopers'
  }, function(err, response) {
    if (err) {
      console.log('The API returned an error: ' + err);
      return;
    }
    var channels = response.data.items;
    if (channels.length == 0) {
      console.log('No channel found.');
    } else {
      console.log('This channel\'s ID is %s. Its title is \'%s\', and ' +
                  'it has %s views.',
                  channels[0].id,
                  channels[0].snippet.title,
                  channels[0].statistics.viewCount);
    }
  });
}

الخطوة الرابعة: تنفيذ النموذج

شغّل النموذج باستخدام الأمر التالي:

node quickstart.js

عند تشغيل النموذج لأول مرة، سيطلب منك تفويض الوصول:

  1. تصفّح للوصول إلى عنوان URL المقدّم في متصفح الويب.

    إذا لم تكن قد سجلت الدخول فعلاً إلى حسابك في Google، فستتم مطالبتك بتسجيل الدخول. إذا سجلت الدخول إلى حسابات متعددة في Google، فسيُطلب منك تحديد حساب واحد لاستخدامه للتفويض.

  2. انقر على الزر قبول.
  3. انسخ الرمز الذي تلقّيته، والصقه في موجه سطر الأوامر، واضغط على Enter.

ملاحظات

  • يتم تخزين معلومات التفويض على نظام الملفات، لذا لن تطلب عمليات التنفيذ اللاحقة الحصول على تفويض.
  • تم تصميم تدفق التفويض في هذا المثال لتطبيق سطر الأوامر. للحصول على معلومات حول كيفية تنفيذ عملية تفويض في تطبيق ويب يستخدم YouTube Data API، راجع استخدام OAuth 2.0 لتطبيقات خادم الويب.

    للحصول على معلومات حول طريقة إجراء التفويض في سياقات أخرى، يُرجى الاطّلاع على قسم التفويض والمصادقة في README للمكتبة.

قراءات إضافية