التعليمات
تتيح لك أداة مقتطفات الرموز التفاعلية اختبار طلبات البيانات من واجهة برمجة التطبيقات بسهولة وإنشاء عيّنات رموز مخصّصة لتلك الطلبات. بالنسبة إلى أي طريقة، تعرض الأداة مقتطفات الرموز لحالة استخدام واحدة أو أكثر، وتصف كل حالة استخدام طريقة شائعة لاستدعاء هذه الطريقة. على سبيل المثال، يمكنك استدعاء طريقة channels.list
لاسترداد بيانات حول قناة معينة أو عن قناة المستخدم الحالي.
تنفيذ طلبات البيانات من واجهة برمجة التطبيقات
يمكنك تنفيذ الطلبات بالنقر على الزر تنفيذ بجانب قائمة مَعلمات الطلب. إذا لم يسبق لك تفويض التطبيق لإرسال طلبات من واجهة برمجة التطبيقات نيابةً عنك، فسيُطلب منك إجراء ذلك. كإجراء احترازي إضافي، إذا أجرى طلبك عملية كتابة، مثل إدراج موارد مرتبطة بالقناة أو تحديثها أو حذفها، سيُطلب منك تأكيد رغبتك في تنفيذ الطلب قبل تنفيذه فعليًا.
تبديل مقتطفات الرمز والنماذج الكاملة
تعرض الأداة كل حالة استخدام، مقتطف رمز يحدد الرمز الخاص بالطريقة المعيّنة التي يتم استدعاؤها. ويحدِّد كل مقتطف الطريقة التي يتم طلبها، بالإضافة إلى قيم المَعلمات والسمات المستخدَمة في طلب البيانات من واجهة برمجة التطبيقات.
بالإضافة إلى ذلك، تعرض الأداة أيضًا عينة تعليمات برمجية كاملة تضع مقتطف الرمز هذا في نموذج يحدّد الدوال النموذجية لاعتماد طلبات البيانات من واجهة برمجة التطبيقات وإنشاء طلبات البيانات من واجهة برمجة التطبيقات. يمكنك استخدام شريط التمرير فوق النماذج للتبديل بين المقتطف والعيّنة الكاملة:
تشغيل عيّنات التعليمات البرمجية الكاملة محليًا
تم تصميم عيّنات التعليمات البرمجية الكاملة لنسخها وتشغيلها محليًا. يُرجى ملاحظة المتطلبات الأساسية التالية وإعداد خطوات تشغيل نماذج التعليمات البرمجية الكاملة:
المتطلبات الأساسية
- إصدار Java 1.7 أو إصدار أحدث
- Gradle 2.3 أو أعلى
إعداد مشروعك وتشغيل نماذج الرموز
-
أنشئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات واضبط بيانات الاعتماد لتطبيق ويب. اضبط معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه على النحو المناسب.
-
يمكنك اتّباع التعليمات الواردة في دليل البدء السريع لـ 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" }
-
من دليل العمل، احفظ ملف
client_secrets.json
المرتبط ببيانات الاعتماد فيsrc/main/resources/client_secret.json
. -
من دليل العمل، انسخ عيّنة الرمز الكامل إلى
src/main/java/ApiExample.java
. (اسم الفئة في كل عيّنة هوApiExample
وبالتالي لن تحتاج إلى تعديل ملفbuild.gradle
لتشغيل نماذج مختلفة.) -
شغّل النموذج من سطر الأوامر:
gradle -q run
-
تطبع معظم النماذج الطلب في
STDOUT
. يمكنك أيضًا زيارة موقع YouTube الإلكتروني للاطّلاع على تأثيرات الطلبات التي تكتب بيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام القناة.
-
أنشئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات واضبط بيانات الاعتماد لتطبيق ويب. يمكنك ضبط مصادر JavaScript المعتمَدة لتحديد عنوان URL الذي سترسل منه الطلبات (مثل
http://localhost
). -
انسخ عينة الرمز بالكامل إلى ملف محلي يمكن لخادم الويب الوصول إليه (مثل
/var/www/html/example.html
). -
ابحث عن السطر في عيّنة الرمز البرمجي الذي يضبط معرِّف العميل ليتم استخدامه في الطلب، واستبدِل القيمة بمعرِّف العميل لبيانات الاعتماد:
gapi.client.init({ 'clientId': 'REPLACE_ME',
-
افتح الملف في المتصفح (مثل
http://localhost/example.html
). ننصحك باستخدام متصفّح يتضمّن وحدة تحكّم في تصحيح الأخطاء، مثل Google Chrome. -
امنح الإذن بالطلب إذا لزم الأمر. إذا تم تفويض الطلب، من المفترض أن تعرض وحدة تحكّم تصحيح الأخطاء استجابة واجهة برمجة التطبيقات للطلب على شكل كائن JSON.
المتطلبات الأساسية
- يجب تثبيت Node.js.
- أداة إدارة الحزمة npm (تأتي مع Node.js).
- مكتبة برامج Google APIs لنظام Node.js:
npm install googleapis --save
- الوصول إلى الإنترنت ومتصفّح الويب
- حساب على Google
إعداد مشروعك وتشغيل نماذج الرموز
-
أنشِئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات واضبط بيانات اعتماد OAuth 2.0 في وحدة التحكم في واجهة Google API. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على غير ذلك.
-
احفظ ملف
client_secret.json
المرتبط ببيانات الاعتماد في ملف على الجهاز. -
انسخ عيّنة التعليمات البرمجية بالكامل إلى ملف محلي في الدليل نفسه الذي يتضمن الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح.) -
شغّل النموذج من سطر الأوامر:
node sample.js
-
تطبع معظم النماذج الطلب في
STDOUT
أو على صفحة الويب التي تعرضها، للحصول على أمثلة عن تطبيقات الويب. يمكنك أيضًا زيارة موقع YouTube الإلكتروني للاطّلاع على تأثيرات الطلبات التي تكتب بيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام القناة.
المتطلبات الأساسية
- Python 2.6 أو أحدث
- أداة إدارة حزم pip
- مكتبة برامج Google APIs للغة 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
إعداد مشروعك وتشغيل نماذج الرموز
-
أنشِئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات واضبط بيانات اعتماد OAuth 2.0 في وحدة التحكم في واجهة Google API. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على تطبيق ويب للنماذج التي تستخدم إطار عمل تطبيق الويب Flask Python، بالإضافة إلى ضبط معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه لبيانات الاعتماد هذه. وبخلاف ذلك، يمكنك ضبط نوع التطبيق على غير ذلك.
-
احفظ ملف
client_secret.json
المرتبط ببيانات الاعتماد في ملف على الجهاز. -
انسخ عيّنة التعليمات البرمجية بالكامل إلى ملف محلي في الدليل نفسه الذي يتضمن الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح.) -
شغّل النموذج من سطر الأوامر:
python sample.py
ملاحظة بشأن أمثلة على تطبيقات خادم الويب:
إذا كنت تشغّل نماذج Python لتطبيقات خادم الويب، سيؤدي تشغيل النص البرمجي إلى بدء خادم ويب محلي. لتنفيذ طلب البيانات من واجهة برمجة التطبيقات، عليك الانتقال إلى صفحة الويب المعروضة في متصفّح. على سبيل المثال، تحتوي نماذج Python التي تستخدم إطار عمل تطبيق الويب Flask على سطر مثل هذا:
app.run('localhost', 8080, debug=True)
يؤدي هذا الرمز إلى بدء خادم ويب محلي علىhttp://localhost:8080
. مع ذلك، لا يحاول النص البرمجي تنفيذ طلب من واجهة برمجة التطبيقات إلى أن يتم الانتقال فعليًا إلىhttp://localhost:8080
في متصفّح. (يجب أيضًا تعيين عنوان URL للخادم المحلي كمعرّف موارد منتظم (URI) معتمد لإعادة التوجيه لبيانات اعتماد التفويض). -
تطبع معظم النماذج الطلب في
STDOUT
أو على صفحة الويب التي تعرضها، للحصول على أمثلة عن تطبيقات الويب. يمكنك أيضًا زيارة موقع YouTube الإلكتروني للاطّلاع على تأثيرات الطلبات التي تكتب بيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام القناة.
المتطلبات الأساسية
- الإصدار 5.4 من لغة PHP أو الإصدارات الأحدث مع تثبيت واجهة سطر الأوامر (CLI) وإضافة JSON.
- أداة إدارة الاعتمادية في المؤلف
- مكتبة برامج Google APIs للغة PHP:
php composer.phar require google/apiclient:^2.0
إعداد مشروعك وتشغيل نماذج الرموز
-
أنشِئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات واضبط بيانات اعتماد OAuth 2.0 في وحدة التحكم في واجهة Google API. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على غير ذلك.
-
احفظ ملف
client_secret.json
المرتبط ببيانات الاعتماد في ملف على الجهاز. -
انسخ عيّنة التعليمات البرمجية بالكامل إلى ملف محلي في الدليل نفسه الذي يتضمن الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح.) -
شغّل النموذج من سطر الأوامر:
php sample.php
-
تطبع معظم النماذج الطلب في
STDOUT
أو على صفحة الويب التي تعرضها، للحصول على أمثلة عن تطبيقات الويب. يمكنك أيضًا زيارة موقع YouTube الإلكتروني للاطّلاع على تأثيرات الطلبات التي تكتب بيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام القناة.
المتطلبات الأساسية
- Ruby 2.0 أو أعلى
- مكتبة برامج Google APIs للغة Ruby:
gem install google-api-client
إعداد مشروعك وتشغيل نماذج الرموز
-
أنشِئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات واضبط بيانات اعتماد OAuth 2.0 في وحدة التحكم في واجهة Google API. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على غير ذلك.
-
احفظ ملف
client_secret.json
المرتبط ببيانات الاعتماد في ملف على الجهاز. -
انسخ عيّنة التعليمات البرمجية بالكامل إلى ملف محلي في الدليل نفسه الذي يتضمن الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح.) -
شغّل النموذج من سطر الأوامر:
ruby sample.rb
-
تطبع معظم النماذج الطلب في
STDOUT
أو على صفحة الويب التي تعرضها، للحصول على أمثلة عن تطبيقات الويب. يمكنك أيضًا زيارة موقع YouTube الإلكتروني للاطّلاع على تأثيرات الطلبات التي تكتب بيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام القناة.
-
أنشِئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات واضبط بيانات اعتماد OAuth 2.0 في وحدة التحكم في واجهة Google API. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على غير ذلك.
-
احفظ ملف
client_secret.json
المرتبط ببيانات الاعتماد في ملف على الجهاز. -
انسخ عيّنة التعليمات البرمجية بالكامل إلى ملف محلي في الدليل نفسه الذي يتضمن الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح.) -
شغّل النموذج من سطر الأوامر:
go run sample.go
-
تطبع معظم النماذج الطلب في
STDOUT
أو على صفحة الويب التي تعرضها، للحصول على أمثلة عن تطبيقات الويب. يمكنك أيضًا زيارة موقع YouTube الإلكتروني للاطّلاع على تأثيرات الطلبات التي تكتب بيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام القناة.
استخدام الدوال النموذجية
كما هو موضح أعلاه، تستخدم عيّنات التعليمات البرمجية الكاملة رمزًا نموذجيًا لتفويض طلبات البيانات من واجهة برمجة التطبيقات وإنشاؤها. على سبيل المثال، تستخدم الدالة build_resource
في نماذج بايثون قاموسًا يربط خصائص الموارد بقيمها لإنشاء مورد يمكن إدراجه أو تحديثه. يتم توفير دوال مشابهة لكل من JavaScript وPHP وRuby وGo وApps Script.
على سبيل المثال، تعرض علامات التبويب أدناه كيفية طلب دوال النص النموذجي لإنشاء الموارد لإنشاء مورد playlist
. تجدر الإشارة إلى أنّ دوال النص النموذجي لا تحتاج إلى معرفة نوع المورد الذي يتم إنشاؤه.
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' }
# 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'}
// 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'));
# 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'})
// 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' });
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
وانقر على الزر تحميل المورد. يتم تحميل قيم الخصائص الحالية في النموذج ويمكنك تعديل القيم التي تريد تغييرها فقط.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/youtube/images/interactive-snippet-load-resource.png?authuser=8&hl=ar)