التعليمات
تتيح لك أداة مقتطفات الشفرة التفاعلية إمكانية اختبار طلبات واجهة برمجة التطبيقات بسهولة وإنشاء نماذج شفرة خاصة بهذه الطلبات. بالنسبة إلى أي طريقة، تعرض الأداة مقتطفات الشفرة لحالة استخدام واحدة أو أكثر، ويصف كل حالة استخدام طريقة شائعة لاستدعاء تلك الطريقة. على سبيل المثال، يمكنك استدعاء الطريقة channels.list
لاسترداد بيانات حول قناة معيّنة أو حول قناة المستخدم الحالي.
تنفيذ طلبات واجهة برمجة التطبيقات
ويمكنك تنفيذ الطلبات من خلال النقر على الزر تنفيذ بجوار قائمة معلمات الطلب. إذا لم تكن قد سمحت للتطبيق بإرسال طلبات واجهة برمجة التطبيقات من قبل نيابةً عنك، فستتم مطالبتك بذلك. كإجراء احترازي، إذا أجرى طلبك عملية كتابة – إدراج أو تحديث أو حذف موارد مرتبطة بقناتك – سيُطلب منك تأكيد أنك تريد تنفيذ الطلب قبل تنفيذه فعليًا.
تبديل مقتطفات الشفرة والنماذج الكاملة
وبالنسبة إلى كل حالة استخدام، تعرض الأداة مقتطف شفرة يحدد الشفرة الخاصة بالأسلوب المحدد الذي يتم استدعاؤه. يحدد كل مقتطف الطريقة التي يتم استدعاؤها بالإضافة إلى قيم المعلمات والخصائص المستخدمة في طلب واجهة برمجة التطبيقات.
إضافةً إلى ذلك، تعرض الأداة أيضًا نموذج شفرة كاملًا يضع مقتطف الشفرة هذا في نموذج يحدد الدالات الأساسية لتفويض طلبات واجهة برمجة التطبيقات وإنشاء طلبات واجهة برمجة التطبيقات. يمكنك استخدام شريط التمرير أعلى النماذج للتبديل بين المقتطف والعينة الكاملة:
تشغيل نماذج الرموز البرمجية بالكامل محليًا
تم تصميم نماذج الرموز الكاملة ليتم نسخها وتشغيلها محليًا. يُرجى مراعاة المتطلبات الأساسية التالية وإعداد الخطوات لتشغيل نماذج التعليمات البرمجية بالكامل:
المتطلبات الأساسية
- جافا الإصدار 1.7 أو أحدث
- Gradle 2.3 أو إصدار أحدث
إعداد مشروعك وتشغيل نماذج التعليمات البرمجية
-
أنشئ مشروعًا في وحدة تحكم واجهة برمجة التطبيقات وأنشئ بيانات اعتماد لتطبيق ويب. اضبط معرِّفات الموارد المنتظمة (URI) المُعتمَدة لإعادة التوجيه على النحو المناسب.
-
اتبع الإرشادات في دليل البدء السريع لجافا سكريبت لواجهة برمجة التطبيقات لإعداد مشروعك، ولكن استبدل محتويات ملف
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. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على Other.
-
احفظ ملف
client_secret.json
المرتبط ببيانات اعتمادك في ملف محلي. -
انسخ نموذج الرمز بالكامل إلى ملف محلي في الدليل نفسه الذي يحتوي على الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح). -
شغّل النموذج من سطر الأوامر:
node sample.js
-
تطبع معظم النماذج شيئًا ما إلى
STDOUT
، أو، على سبيل المثال، تطبيقات الويب، إلى صفحة الويب التي تعرضها. يمكنك أيضًا الاطلاع على موقع YouTube على الويب لمشاهدة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام للقناة.
المتطلبات الأساسية
- Python 2.6 أو إصدار أحدث
- أداة إدارة الحزمات
- مكتبة برامج "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. عند إعداد بيانات الاعتماد، يمكنك إعداد نوع التطبيق على تطبيق الويب للعينات التي تستخدم إطار عمل تطبيق الويب 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 للخادم المحلي كعنوان URL مُعتمَد لإعادة التوجيه لبيانات اعتماد التفويض.) -
تطبع معظم النماذج شيئًا ما إلى
STDOUT
، أو، على سبيل المثال، تطبيقات الويب، إلى صفحة الويب التي تعرضها. يمكنك أيضًا الاطلاع على موقع YouTube على الويب لمشاهدة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام للقناة.
المتطلبات الأساسية
- لغة PHP الإصدار 5.4 أو الأحدث مع تثبيت واجهة سطر الأوامر (CLI) وإضافة JSON.
- أداة إدارة تبعية الملحّن.
- مكتبة برامج "Google APIs" للغة PHP:
php composer.phar require google/apiclient:^2.0
إعداد مشروعك وتشغيل نماذج التعليمات البرمجية
-
يمكنك إنشاء مشروع في وحدة تحكم واجهة برمجة التطبيقات وإعداد بيانات اعتماد OAuth 2.0 في وحدة تحكم واجهة برمجة تطبيقات Google. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على Other.
-
احفظ ملف
client_secret.json
المرتبط ببيانات اعتمادك في ملف محلي. -
انسخ نموذج الرمز بالكامل إلى ملف محلي في الدليل نفسه الذي يحتوي على الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح). -
شغّل النموذج من سطر الأوامر:
php sample.php
-
تطبع معظم النماذج شيئًا ما إلى
STDOUT
، أو، على سبيل المثال، تطبيقات الويب، إلى صفحة الويب التي تعرضها. يمكنك أيضًا الاطلاع على موقع YouTube على الويب لمشاهدة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام للقناة.
المتطلبات الأساسية
- روبي 2.0 أو أحدث
- مكتبة برامج "واجهة Google APIs" للغة Ruby:
gem install google-api-client
إعداد مشروعك وتشغيل نماذج التعليمات البرمجية
-
يمكنك إنشاء مشروع في وحدة تحكم واجهة برمجة التطبيقات وإعداد بيانات اعتماد OAuth 2.0 في وحدة تحكم واجهة برمجة تطبيقات Google. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على Other.
-
احفظ ملف
client_secret.json
المرتبط ببيانات اعتمادك في ملف محلي. -
انسخ نموذج الرمز بالكامل إلى ملف محلي في الدليل نفسه الذي يحتوي على الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح). -
شغّل النموذج من سطر الأوامر:
ruby sample.rb
-
تطبع معظم النماذج شيئًا ما إلى
STDOUT
، أو، على سبيل المثال، تطبيقات الويب، إلى صفحة الويب التي تعرضها. يمكنك أيضًا الاطلاع على موقع YouTube على الويب لمشاهدة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام للقناة.
-
يمكنك إنشاء مشروع في وحدة تحكم واجهة برمجة التطبيقات وإعداد بيانات اعتماد OAuth 2.0 في وحدة تحكم واجهة برمجة تطبيقات Google. عند إعداد بيانات الاعتماد، اضبط نوع التطبيق على Other.
-
احفظ ملف
client_secret.json
المرتبط ببيانات اعتمادك في ملف محلي. -
انسخ نموذج الرمز بالكامل إلى ملف محلي في الدليل نفسه الذي يحتوي على الملف
client_secret.json
(أو عدِّل النموذج لتحديد موقع هذا الملف بشكل صحيح). -
شغّل النموذج من سطر الأوامر:
go run sample.go
-
تطبع معظم النماذج شيئًا ما إلى
STDOUT
، أو، على سبيل المثال، تطبيقات الويب، إلى صفحة الويب التي تعرضها. يمكنك أيضًا الاطلاع على موقع YouTube على الويب لمشاهدة تأثيرات الطلبات التي تكتب البيانات، مثل الطلبات التي تنشئ قوائم تشغيل أو أقسام للقناة.
استخدام الدوال النموذجية
كما ورد أعلاه، تستخدم نماذج الرموز الكاملة رمزًا معياريًا لتفويض وإنشاء طلبات واجهة برمجة التطبيقات. على سبيل المثال، تستخدم الدالة build_resource
في نماذج Python قاموسًا يعيّن خصائص المورد إلى قيمها لإنشاء مورد يمكن إدراجه أو تحديثه. ويتم توفير وظائف مماثلة لجافا سكريبت وPHP وRuby وGo وبرمجة التطبيقات.
على سبيل المثال، توضّح علامات التبويب أدناه كيفية استدعاء الدوال المعيارية لإنشاء الموارد لإنشاء مورد 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.google.cn/static/youtube/images/interactive-snippet-load-resource.png?authuser=5&hl=ar)