مقتطفات رمز Data API

التعليمات

تتيح لك أداة مقتطفات الرموز التفاعلية اختبار طلبات البيانات من واجهة برمجة التطبيقات بسهولة وإنشاء عيّنات تعليمات برمجية خاصة بهذه الطلبات. بالنسبة إلى أي طريقة معيّنة، تعرض الأداة مقتطفات تعليمات برمجية لحالة استخدام واحدة أو أكثر، وتصف كل حالة استخدام طريقة شائعة لاستدعاء هذه الطريقة. على سبيل المثال، يمكنك استدعاء طريقة channels.list لاسترداد بيانات حول قناة معيّنة أو حول قناة المستخدم الحالي.

تنفيذ طلبات البيانات من واجهة برمجة التطبيقات

يمكنك تنفيذ الطلبات من خلال النقر على الزر تنفيذ بجانب قائمة مَعلمات الطلب. إذا لم يسبق لك منح التطبيق إذن إرسال طلبات البيانات من واجهة برمجة التطبيقات نيابةً عنك، سيُطلب منك منح هذا الإذن. وكإجراء احترازي إضافي، إذا كان طلبك ينفّذ عملية كتابة، مثل إدراج المراجع المرتبطة بقناتك أو تعديلها أو حذفها، سيُطلب منك تأكيد أنّك تريد تنفيذ الطلب قبل تنفيذه فعليًا.

التبديل بين مقتطفات التعليمات البرمجية والعيّنات الكاملة

بالنسبة إلى كل حالة استخدام، تعرض الأداة مقتطف تعليمات برمجية يحدّد الرمز البرمجي الخاص بالطريقة المحدّدة التي يتم استدعاؤها. يحدّد كل مقتطف الطريقة التي يتم استدعاؤها بالإضافة إلى قيم المَعلمات والخصائص المستخدَمة في طلب البيانات من واجهة برمجة التطبيقات.

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

تشغيل عيّنات التعليمات البرمجية الكاملة محليًا

تم تصميم عيّنات التعليمات البرمجية الكاملة ليتم نسخها وتشغيلها محليًا. يُرجى العِلم بالمتطلبات الأساسية والخطوات التالية لإعداد تشغيل عيّنات التعليمات البرمجية الكاملة:

Java

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

  • ‫Java 1.7 أو إصدار أحدث
  • ‫Gradle 2.3 أو إصدار أحدث

إعداد مشروعك وتشغيل عيّنات التعليمات البرمجية

  1. أنشِئ مشروعًا في Cloud Console وأعِدّ بيانات الاعتماد لتطبيق ويب. اضبط معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه حسب الحاجة.

  2. اتّبِع التعليمات الواردة في دليل البدء السريع لواجهة برمجة التطبيقات Java لإعداد مشروعك، ولكن استبدِل محتويات ملف build.gradle التلقائي بالرمز البرمجي التالي:

    apply plugin: 'java'
    apply plugin: 'application'
    
    mainClassName = 'ApiExample'
    sourceCompatibility = 1.7
    targetCompatibility = 1.7
    version = '1.0'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile 'com.google.api-client:google-api-client:1.22.0'
        compile 'com.google.oauth-client:google-oauth-client-jetty:1.22.0'
        compile 'com.google.apis:google-api-services-youtube:v3-rev182-1.22.0'
        compile group: 'com.google.code.gson', name: 'gson', version: '1.7.2'
        compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.4.4'
    }
    
    compileJava {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
  3. من دليل العمل، احفظ ملف client_secrets.json المرتبط ببيانات اعتمادك في src/main/resources/client_secret.json.

  4. من دليل العمل، انسخ عيّنة التعليمات البرمجية الكاملة إلى src/main/java/ApiExample.java. (اسم الفئة في كل عيّنة هو ApiExample حتى لا تحتاج إلى تعديل ملف build.gradle لتشغيل عيّنات مختلفة.)

  5. شغِّل العيّنة من سطر الأوامر:

    gradle -q run
  6. تطبع معظم العيّنات شيئًا ما في STDOUT. يمكنك أيضًا الاطّلاع على موقع YouTube الإلكتروني لمعرفة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام قنوات.

JavaScript
  1. أنشِئ مشروعًا في Cloud Console وأعِدّ بيانات الاعتماد لتطبيق ويب. اضبط مصادر JavaScript المعتمَدة لتحديد عنوان URL الذي سترسل منه الطلبات (مثل http://localhost).

  2. انسخ عيّنة التعليمات البرمجية الكاملة إلى ملف محلي يمكن لخادم الويب الوصول إليه (مثل /var/www/html/example.html).

  3. ابحث عن السطر في عيّنة التعليمات البرمجية الذي يضبط معرّف العميل الذي سيتم استخدامه للطلب، واستبدِل القيمة بمعرّف العميل لبيانات اعتمادك:

    gapi.client.init({
        'clientId': 'REPLACE_ME',
  4. افتح الملف في متصفّحك (مثل http://localhost/example.html). يُنصح باستخدام متصفّح يتضمّن وحدة تحكّم لتصحيح الأخطاء، مثل Google Chrome.

  5. امنح الإذن للطلب إذا لزم الأمر. إذا تم منح الإذن للطلب، من المفترض أن تعرض وحدة تحكّم تصحيح الأخطاء ردًّا من واجهة برمجة التطبيقات للطلب ككائن JSON.

Node.js

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

  • يجب تثبيت Node.js.
  • أداة إدارة حِزم npm (تأتي مع Node.js)
  • مكتبة عميل واجهة Google API لنظام Node.js:
    npm install googleapis --save
  • إمكانية الوصول إلى الإنترنت ومتصفّح ويب
  • حساب Google

إعداد مشروعك وتشغيل عيّنات التعليمات البرمجية

  1. أنشِئ مشروعًا في Cloud Console وأعِدّ بيانات اعتماد OAuth 2.0 في Google Cloud Console. عند إعداد بيانات اعتمادك، اضبط نوع التطبيق على أخرى.

  2. احفظ ملف client_secret.json المرتبط ببيانات اعتمادك في ملف محلي.

  3. انسخ عيّنة التعليمات البرمجية الكاملة إلى ملف محلي في الدليل نفسه الذي يحتوي على ملف client_secret.json (أو عدِّل العيّنة لتحديد موقع هذا الملف بشكل صحيح.

  4. شغِّل العيّنة من سطر الأوامر:

    node sample.js
  5. تطبع معظم العيّنات شيئًا ما في STDOUT أو، بالنسبة إلى أمثلة تطبيقات الويب، في صفحة الويب التي تعرضها. يمكنك أيضًا الاطّلاع على موقع YouTube الإلكتروني لمعرفة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام قنوات.

Python

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

  • ‫Python 2.6 أو إصدار أحدث
  • أداة إدارة حِزم pip
  • مكتبة عميل واجهة Google API للغة Python:
    pip install --upgrade google-api-python-client
  • حِزم google-auth وgoogle-auth-oauthlib وgoogle-auth-httplib2 لمنح إذن المستخدم
    pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
  • إطار عمل تطبيق الويب Flask Python (إذا كنت تشغّل عيّنات Python لتطبيقات خادم الويب)
    pip install --upgrade flask
  • مكتبة طلبات HTTP
    pip install --upgrade requests

إعداد مشروعك وتشغيل عيّنات التعليمات البرمجية

  1. أنشِئ مشروعًا في Cloud Console وأعِدّ بيانات اعتماد OAuth 2.0 في Google Cloud Console. عند إعداد بيانات اعتمادك، اضبط نوع التطبيق على تطبيق ويب للعيّنات التي تستخدم إطار عمل تطبيق الويب Flask Python، واضبط أيضًا معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه لبيانات الاعتماد هذه. بخلاف ذلك، اضبط نوع التطبيق على أخرى.

  2. احفظ ملف client_secret.json المرتبط ببيانات اعتمادك في ملف محلي.

  3. انسخ عيّنة التعليمات البرمجية الكاملة إلى ملف محلي في الدليل نفسه الذي يحتوي على ملف client_secret.json (أو عدِّل العيّنة لتحديد موقع هذا الملف بشكل صحيح.

  4. شغِّل العيّنة من سطر الأوامر:

    python sample.py
    ملاحظة حول أمثلة تطبيقات خادم الويب:

    إذا كنت تشغّل عيّنات Python لتطبيقات خادم الويب، يؤدي تشغيل النص البرمجي إلى بدء خادم ويب محلي. لتنفيذ طلب البيانات من واجهة برمجة التطبيقات فعليًا، عليك الانتقال إلى صفحة الويب التي يتم عرضها في متصفّح. على سبيل المثال، تحتوي عيّنات Python التي تستخدم إطار عمل تطبيق الويب Flask على سطر مثل هذا:

    app.run('localhost', 8080, debug=True)

    يبدأ هذا الرمز البرمجي خادم ويب محليًا على http://localhost:8080. ومع ذلك، لا يحاول النص البرمجي تنفيذ طلب بيانات من واجهة برمجة التطبيقات إلى أن تنتقل فعليًا إلى http://localhost:8080 في متصفّح. (يجب أيضًا ضبط عنوان URL لخادمك المحلي كمعرّف موارد منتظم (URI) معتمَد لإعادة التوجيه لبيانات اعتمادك لمنح الإذن.)
  5. تطبع معظم العيّنات شيئًا ما في STDOUT أو، بالنسبة إلى أمثلة تطبيقات الويب، في صفحة الويب التي تعرضها. يمكنك أيضًا الاطّلاع على موقع YouTube الإلكتروني لمعرفة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام قنوات.

PHP

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

  • ‫PHP 5.4 أو إصدار أحدث مع تثبيت واجهة سطر الأوامر (CLI) وإضافة JSON
  • أداة إدارة التبعيات Composer
  • مكتبة عميل واجهة Google API للغة PHP:
    php composer.phar require google/apiclient:^2.0

إعداد مشروعك وتشغيل عيّنات التعليمات البرمجية

  1. أنشِئ مشروعًا في Cloud Console وأعِدّ بيانات اعتماد OAuth 2.0 في Google Cloud Console. عند إعداد بيانات اعتمادك، اضبط نوع التطبيق على أخرى.

  2. احفظ ملف client_secret.json المرتبط ببيانات اعتمادك في ملف محلي.

  3. انسخ عيّنة التعليمات البرمجية الكاملة إلى ملف محلي في الدليل نفسه الذي يحتوي على ملف client_secret.json (أو عدِّل العيّنة لتحديد موقع هذا الملف بشكل صحيح.

  4. شغِّل العيّنة من سطر الأوامر:

    php sample.php
  5. تطبع معظم العيّنات شيئًا ما في STDOUT أو، بالنسبة إلى أمثلة تطبيقات الويب، في صفحة الويب التي تعرضها. يمكنك أيضًا الاطّلاع على موقع YouTube الإلكتروني لمعرفة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام قنوات.

Ruby

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

  • ‫Ruby 2.0 أو إصدار أحدث
  • مكتبة عميل واجهة Google API للغة Ruby:
    gem install google-api-client

إعداد مشروعك وتشغيل عيّنات التعليمات البرمجية

  1. أنشِئ مشروعًا في Cloud Console وأعِدّ بيانات اعتماد OAuth 2.0 في Google Cloud Console. عند إعداد بيانات اعتمادك، اضبط نوع التطبيق على أخرى.

  2. احفظ ملف client_secret.json المرتبط ببيانات اعتمادك في ملف محلي.

  3. انسخ عيّنة التعليمات البرمجية الكاملة إلى ملف محلي في الدليل نفسه الذي يحتوي على ملف client_secret.json (أو عدِّل العيّنة لتحديد موقع هذا الملف بشكل صحيح.

  4. شغِّل العيّنة من سطر الأوامر:

    ruby sample.rb
  5. تطبع معظم العيّنات شيئًا ما في STDOUT أو، بالنسبة إلى أمثلة تطبيقات الويب، في صفحة الويب التي تعرضها. يمكنك أيضًا الاطّلاع على موقع YouTube الإلكتروني لمعرفة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام قنوات.

الانتقال إلى
  1. أنشِئ مشروعًا في Cloud Console وأعِدّ بيانات اعتماد OAuth 2.0 في Google Cloud Console. عند إعداد بيانات اعتمادك، اضبط نوع التطبيق على أخرى.

  2. احفظ ملف client_secret.json المرتبط ببيانات اعتمادك في ملف محلي.

  3. انسخ عيّنة التعليمات البرمجية الكاملة إلى ملف محلي في الدليل نفسه الذي يحتوي على ملف client_secret.json (أو عدِّل العيّنة لتحديد موقع هذا الملف بشكل صحيح.

  4. شغِّل العيّنة من سطر الأوامر:

    go run sample.go
  5. تطبع معظم العيّنات شيئًا ما في STDOUT أو، بالنسبة إلى أمثلة تطبيقات الويب، في صفحة الويب التي تعرضها. يمكنك أيضًا الاطّلاع على موقع YouTube الإلكتروني لمعرفة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام قنوات.

استخدام الدوالّ الأساسية

كما هو موضّح أعلاه، تستخدم عيّنات التعليمات البرمجية الكاملة رمزًا برمجيًا نموذجيًا لمنح الإذن بطلبات البيانات من واجهة برمجة التطبيقات وإنشاء هذه الطلبات. على سبيل المثال، تستخدم الدالة build_resource في عيّنات Python قاموسًا يربط خصائص المرجع بقيمها لإنشاء مرجع يمكن إدراجه أو تعديله. تتوفّر دوالّ مشابهة لـ JavaScript وPHP وRuby وGo و"برمجة التطبيقات".

على سبيل المثال، توضّح علامات التبويب أدناه كيفية استدعاء الدوالّ الأساسية لإنشاء المراجع من أجل إنشاء مرجع playlist. يُرجى العِلم أنّ الدوالّ الأساسية لا تحتاج إلى معرفة نوع المرجع الذي يتم إنشاؤه.

JavaScript
function createResource(properties) {
  var resource = {};
  var normalizedProps = properties;
  for (var p in properties) {
    var value = properties[p];
    if (p && p.substr(-2, 2) == '[]') {
      var adjustedName = p.replace('[]', '');
      if (value) {
        normalizedProps[adjustedName] = value.split(',');
      }
      delete normalizedProps[p];
    }
  }
  for (var p in normalizedProps) {
    // Leave properties that don't have values out of inserted resource.
    if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {
      var propArray = p.split('.');
      var ref = resource;
      for (var pa = 0; pa < propArray.length; pa++) {
        var key = propArray[pa];
        if (pa == propArray.length - 1) {
          ref[key] = normalizedProps[p];
        } else {
          ref = ref[key] = ref[key] || {};
        }
      }
    };
  }
  return resource;
}
var resource = createResource({
    'snippet.title': 'Sample playlist ',
    'snippet.description': 'This is a sample playlist description.',
    'snippet.tags[]': 'JavaScript code, interactive',
    'snippet.defaultLanguage': '',
    'status.privacyStatus': 'private'
}
Python
# Build a resource based on a list of properties given as key-value pairs.
# Leave properties with empty values out of the inserted resource.
def build_resource(properties):
  resource = {}
  for p in properties:
    # Given a key like "snippet.title", split into "snippet" and "title", where
    # "snippet" will be an object and "title" will be a property in that object.
    prop_array = p.split('.')
    ref = resource
    for pa in range(0, len(prop_array)):
      is_array = False
      key = prop_array[pa]
      # Convert a name like "snippet.tags[]" to snippet.tags, but handle
      # the value as an array.
      if key[-2:] == '[]':
        key = key[0:len(key)-2:]
        is_array = True
      if pa == (len(prop_array) - 1):
        # Leave properties without values out of inserted resource.
        if properties[p]:
          if is_array:
            ref[key] = properties[p].split(',')
          else:
            ref[key] = properties[p]
      elif key not in ref:
        # For example, the property is "snippet.title", but the resource does
        # not yet have a "snippet" object. Create the snippet object here.
        # Setting "ref = ref[key]" means that in the next time through the
        # "for pa in range ..." loop, we will be setting a property in the
        # resource's "snippet" object.
        ref[key] = {}
        ref = ref[key]
      else:
        # For example, the property is "snippet.description", and the resource
        # already has a "snippet" object.
        ref = ref[key]
  return resource

resource = build_resource({
    'snippet.title': 'Sample playlist ',
    'snippet.description': 'This is a sample playlist description.',
    'snippet.tags[]': 'Python code, interactive',
    'snippet.defaultLanguage': '',
    'status.privacyStatus': 'private'}
  
PHP
// Add a property to the resource.
function addPropertyToResource(&$ref, $property, $value) {
    $keys = explode(".", $property);
    $is_array = false;
    foreach ($keys as $key) {
        // Convert a name like "snippet.tags[]" to "snippet.tags" and
        // set a boolean variable to handle the value like an array.
        if (substr($key, -2) == "[]") {
            $key = substr($key, 0, -2);
            $is_array = true;
        }
        $ref = &$ref[$key];
    }

    // Set the property value. Make sure array values are handled properly.
    if ($is_array && $value) {
        $ref = $value;
        $ref = explode(",", $value);
    } elseif ($is_array) {
        $ref = array();
    } else {
        $ref = $value;
    }
}

// Build a resource based on a list of properties given as key-value pairs.
function createResource($properties) {
    $resource = array();
    foreach ($properties as $prop => $value) {
        if ($value) {
            addPropertyToResource($resource, $prop, $value);
        }
    }
    return $resource;
}

$propertyObject = createResource(array(
    'snippet.title' => 'Sample playlist ',
    'snippet.description' => 'This is a sample playlist description.',
    'snippet.tags[]' => 'Python code, interactive',
    'snippet.defaultLanguage' => '',
    'status.privacyStatus' => 'private'));
Ruby
# Build a resource based on a list of properties given as key-value pairs.
def create_resource(properties)
  resource = {}
  properties.each do |prop, value|
    ref = resource
    prop_array = prop.to_s.split(".")
    for p in 0..(prop_array.size - 1)
      is_array = false
      key = prop_array[p]
      if key[-2,2] == "[]"
        key = key[0...-2]
        is_array = true
      end
      if p == (prop_array.size - 1)
        if is_array
          if value == ""
            ref[key.to_sym] = []
          else
            ref[key.to_sym] = value.split(",")
          end
        elsif value != ""
          ref[key.to_sym] = value
        end
      elsif ref.include?(key.to_sym)
        ref = ref[key.to_sym]
      else
        ref[key.to_sym] = {}
        ref = ref[key.to_sym]
      end
    end
  end
  return resource
end

resource = create_resource({
    'snippet.title': 'Sample playlist ',
    'snippet.description': 'This is a sample playlist description.',
    'snippet.tags[]': 'Ruby code, interactive',
    'snippet.default_language': '',
    'status.privacy_status': 'private'})
Apps Script
// Build an object from an object containing properties as key-value pairs
function createResource(properties) {
  var res = {};
  var normalizedProps = {};
  for (var p in properties) {
    var value = properties[p];
    if (p.substr(-2, 2) == '[]' && value) {
      var adjustedName = p.replace('[]', '');
      normalizedProps[adjustedName] = value.split(',');
    } else {
      normalizedProps[p] = value;
    }
  }
  for (var p in normalizedProps) {
    if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {
      var propArray = p.split('.');
      var ref = res;
      for (var pa = 0; pa < propArray.length; pa++) {
        var key = propArray[pa];
        if (pa == propArray.length - 1) {
          ref[key] = normalizedProps[p];
        } else {
          ref = ref[key] = ref[key] || {};
        }
      }
    };
  }
  return res;
}

var resource = createResource({
    'snippet.title': 'Sample playlist ',
    'snippet.description': 'This is a sample playlist description.',
    'snippet.tags[]': 'Apps Script code, interactive',
    'snippet.defaultLanguage': '',
    'status.privacyStatus': 'private'
});
Go
func addPropertyToResource(ref map[string]interface{}, keys []string, value string, count int) map[string]interface{} {
        for k := count; k < (len(keys) - 1); k++ {
                switch val := ref[keys[k]].(type) {
                case map[string]interface{}:
                        ref[keys[k]] = addPropertyToResource(val, keys, value, (k + 1))
                case nil:
                        next := make(map[string]interface{})
                        ref[keys[k]] = addPropertyToResource(next, keys, value, (k + 1))
                }
        }
        // Only include properties that have values.
        if (count == len(keys) - 1 && value != "") {
                valueKey := keys[len(keys)-1]
                if valueKey[len(valueKey)-2:] == "[]" {
                        ref[valueKey[0:len(valueKey)-2]] = strings.Split(value, ",")
                } else if len(valueKey) > 4 && valueKey[len(valueKey)-4:] == "|int" {
                        ref[valueKey[0:len(valueKey)-4]], _ = strconv.Atoi(value)
                } else if value == "true" {
                        ref[valueKey] = true
                } else if value == "false" {
                        ref[valueKey] = false
                } else {
                        ref[valueKey] = value
                }
        }
        return ref
}

func createResource(properties map[string]string) string {
        resource := make(map[string]interface{})
        for key, value := range properties {
                keys := strings.Split(key, ".")
                ref := addPropertyToResource(resource, keys, value, 0)
                resource = ref
        }
        propJson, err := json.Marshal(resource)
        if err != nil {
               log.Fatal("cannot encode to JSON ", err)
        }
        return string(propJson)
}

func main() {
        properties := (map[string]string{
                 "snippet.title": "Sample playlist ",
                 "snippet.description": "This is a sample playlist description.",
                 "snippet.tags[]": "Go code, interactive",
                 "snippet.defaultLanguage": "",
                 "status.privacyStatus": "private",
        })
        res := createResource(properties)

تحميل المراجع الحالية

لاختبار طلب تعديل مرجع حالي، يمكنك تحميل قيم الخصائص الحالية لهذا المرجع في نموذج التعديل. على سبيل المثال، لتعديل البيانات الوصفية حول فيديو، أدخِل رقم تعريف الفيديو في حقل السمة id وانقر على الزر تحميل المرجع. يتم تحميل قيم الخصائص الحالية في النموذج ويمكنك تعديل القيم التي تريد تغييرها فقط.