خدمات واجهة برمجة تطبيقات YouTube - الحد الأدنى المطلوب من الوظائف

ملاحظة: يقدّم الامتثال لسياسات المطوّرين في YouTube إرشادات وأمثلة لمساعدتك في ضمان اتّباع برامج API الخاصة بك لأجزاء معيّنة من بنود وسياسات خدمات YouTube API (بنود الخدمة الخاصة بواجهة برمجة التطبيقات). يقدّم الدليل معلومات حول كيفية تطبيق YouTube لبعض جوانب بنود خدمة واجهة برمجة التطبيقات، ولكنّه لا يحلّ محلّ أي مستندات حالية.

يحدّد هذا المستند الحد الأدنى من المتطلبات الوظيفية لبرامج عملاء واجهة برمجة التطبيقات التي تنفّذ ميزات معيّنة من خدمات YouTube API أو تتيح الوصول إليها ("برامج عملاء واجهة برمجة التطبيقات").

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

يُرجى العِلم أنّ المتطلبات الواردة في هذا المستند ستتغيّر لنتمكّن من ضمان تقديم تجارب أفضل للمستخدمين مع ميزات YouTube الحالية. وستتغيّر أيضًا استجابةً للميزات الجديدة والمعدَّلة على YouTube. في بعض الأحيان، قد تتطلّب منك هذه التغييرات تعديل "برامج العملاء لواجهة برمجة التطبيقات" لتلبية المتطلبات الجديدة. سيسجّل سجلّ مراجعات بنود الخدمة أي تغييرات، لذا يُرجى مراجعة هذا المستند بشكل متكرّر أو الاشتراك في خلاصة RSS الخاصة به للتأكّد من معرفة التغييرات التي قد تؤثّر في "برامج واجهة برمجة التطبيقات" بسرعة.

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

مشغّل YouTube المضمّن وتشغيل الفيديوهات

تتعلّق المتطلبات الواردة في هذا القسم على وجه التحديد بمشغّلات YouTube المضمّنة. تتضمّن سياسات خدمات YouTube API أيضًا عدة سياسات ذات صلة بعملاء API الذين يشغّلون محتوى سمعيًا بصريًا على YouTube.

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

يجب أن تقدّم "عملاء API" الذين يستخدمون مشغّل YouTube المضمّن (بما في ذلك YouTube IFrame Player API) معلومات التعريف من خلال عنوان الطلب HTTP Referer. في بعض البيئات، سيضبط المتصفّح HTTP Referer تلقائيًا، ولا تحتاج برامج API Clients إلا إلى التأكّد من عدم ضبط Referrer-Policy بطريقة تحظر قيمة Referer. ينصح YouTube باستخدام strict-origin-when-cross-origin Referrer-Policy، وهو الإعداد التلقائي في العديد من المتصفّحات.

وبالمثل، عند دمج مشغّل YouTube المضمّن في نافذة تم إنشاؤها باستخدام JavaScript window.open، يجب ألا تستخدم برامج API Clients الميزة noreferrer التي تحذف القيمة Referer.

ضبط Referer

في البيئات التي تكون فيها قيمة HTTP Referer فارغة تلقائيًا ولا يضبطها المتصفّح تلقائيًا، يجب أن تتّخذ "جهات ربط واجهة برمجة التطبيقات" إجراءً لتوفير هويتها من خلال وسائل بديلة. في عمليات الدمج مع WebView، مثل تطبيق الأجهزة الجوّالة أو تطبيق الكمبيوتر، يكون HTTP Referer فارغًا تلقائيًا ويتم عادةً ضبط Referer باستخدام إحدى الطرق التالية:

  • تطبيق على الأجهزة الجوّالة يتضمّن مشغّلاً داخل ملف HTML محلي

    في عملية الضبط هذه، يتم تحميل المشغّل في ملف HTML مجمّع مع التطبيق. وعند تحميل ملف HTML هذا، سيؤدي ضبط المَعلمة baseUrl إلى ضبط Referer.

  • تطبيق الأجهزة الجوّالة بدون ملف HTML محلي

    في هذا الإعداد، يتم تحميل المشغّل مباشرةً من https://www.youtube.com/embed/VIDEO_ID بدون أي ملف HTML مضمّن. يمكنك ضبط Referer من خلال إضافته كعنوان HTTP:

    • ‫Android loadUrl مع إضافة عنوان HTTP Referer إلى المَعلمة additionalHttpHeaders
    • ‫iOS loadRequest: مع إضافة عنوان HTTP Referer إلى الطلب على سبيل المثال:

      NSString *bundleId = [[NSBundle mainBundle] bundleIdentifier];
      NSString *referrer = [[NSString stringWithFormat:@"https://%@", bundleId] lowercaseString];
      NSURL *referrerUrl = [NSURL URLWithString:referrer];
      
      NSString *destination = @"https://www.youtube.com/embed/VIDEO_ID";
      NSURL *destinationUrl = [NSURL URLWithString:destination];
      
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:destinationUrl];
      [request addValue:referrerUrl forHTTPHeaderField:@"Referer"];
      
      // Create an instance of WKWebView (omitted for simplicity), then load the NSMutableURLRequest.
      [webView loadRequest:request];
      
  • تطبيق متوافق مع الأجهزة الجوّالة يتضمّن مشغّلاً داخل علامة تبويب متصفّح أصلية

    • Android CustomTabs

      استخدِم Intent.EXTRA_REFERRER لضبط المُحيل. احرص على استخدام المخطط android-app:// بدلاً من https:// عند إنشاء Uri. على سبيل المثال:

      String destinationUrl = "https://www.youtube.com/embed/VIDEO_ID";
      CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build()
      customTabsIntent.intent.putExtra(Intent.EXTRA_REFERRER, Uri.parse("android-app://" + context.getPackageName()));
      customTabsIntent.launchUrl(this, Uri.parse(destinationUrl));
      
    • iOS SFSafariViewController

      لا يتيح SFSafariViewController ضبط Referer. في هذه الحالة، اضبط مَعلمة مشغّل origin بدلاً من ذلك.

  • تطبيق سطح المكتب

    في هذا الإعداد، اضبط Referer عن طريق إضافته كعنوان HTTP:

بالنسبة إلى المنصات الأخرى التي تكون فيها قيمة HTTP Referer فارغة تلقائيًا، اضبط قيمة Referer من خلال إعداد WebView الذي يتم تحميل المشغّل فيه. قد تختلف التقنية الدقيقة حسب المنصة.

إذا كنت مالك مكتبة أو إطار عمل أو إضافة أو خدمة أو برنامج تضمين يستخدمه المطوّرون لدمج مشغّل YouTube المضمّن، عليك استرداد معرّف التطبيق من البيئة (قد لا يكون ذلك ممكنًا، حسب النظام الأساسي) أو السماح للمطوّرين بإدخال معرّف التطبيق الخاص بهم حتى يمكن ضبط Referer (ومَعلمة المشغّل widget_referrer، إذا كان ذلك مناسبًا) كما هو موضّح أعلاه.

تنسيق المُحيل

عندما تقدّم Referer بشكلٍ صريح من خلال ضبط مَعلمة WebView أو إضافة عنوان HTTP، يكون التنسيق عادةً عنوان URL مؤهَّلاً بالكامل. حدِّد HTTPS كبروتوكول. يجب أن يكون اسم النطاق ضمن عنوان URL هو معرّف تطبيقك ("معرّف التطبيق") المسجّل لدى المتجر الذي وزّع تطبيقك على المستخدمين النهائيين. إذا كان تطبيقك متاحًا للمستخدمين من خلال قناة توزيع بديلة، استخدِم معرّف التطبيق المسجَّل لدى نظام التشغيل أثناء تثبيت التطبيق. في معظم الحالات، سيكون معرّف تطبيقك اسم نطاق معكوسًا (يُعرف أيضًا باسم "تنسيق نظام أسماء النطاقات العكسي")، مثل com.google.android.youtube. أمثلة تمثيلية:

في بعض المنصات، لا يكون رقم تعريف التطبيق اسم نطاق معكوسًا. في هذه الحالات، استخدِم معرّف التطبيق الفريد الذي يخصّصه المتجر الذي يوزّع التطبيق. عندما يكون معرّف التطبيق في المتجر عبارة عن سلسلة أبجدية رقمية تم إنشاؤها (يخصّصها المتجر أو أدوات التطوير، ولا يختارها مطوّر التطبيق)، أدرِج اسم التطبيق المعروض (مع استبدال المسافات بشرطات) ومعرّف التطبيق في المتجر، مع الفصل بينهما بنقطة. على سبيل المثال: <my-app-name>.<AppID>. يجب أن تظل هذه القيمة ثابتة عند تغيير إصدار التطبيق. إذا لم يكن التطبيق مستضافًا على متجر، استخدِم معرّف التطبيق المسجَّل في نظام التشغيل أثناء تثبيت التطبيق، ويكون هذا المعرّف عادةً معرّفًا فريدًا في بيان التطبيق. استبعِد أي تفاصيل حول إصدار التطبيق والبنية المتوافقة. أمثلة تمثيلية:

  • سوق Chrome الإلكتروني: استضافة المتجر

    عادةً ما يكون رقم تعريف التطبيق في المتجر هو الجزء الأخير من المسار في عنوان URL الخاص بالتطبيق https://chromewebstore.google.com/detail/<hyphenated-app-name>/<AppID>. استخدِم اسم التطبيق الذي يتضمّن شرطة ورقم تعريف التطبيق في المتجر لإنشاء السلسلة <my-app-name>.<AppID> الموضّحة أعلاه.

  • Windows: مستضاف في المتجر

    عادةً ما يكون رقم تعريف التطبيق في المتجر هو الجزء الأخير من المسار في عنوان URL الخاص بالتطبيق https://apps.microsoft.com/detail/<AppID>. استخدِم رقم تعريف تطبيق المتجر لإنشاء السلسلة <my-app-name>.<AppID> الموضّحة أعلاه. يجب تضمين اسم التطبيق الذي يتضمّن شرطة أيضًا.

  • Windows: التوزيع خارج المتجر

    تحتوي تطبيقات Windows على هوية حزمة في بيان التطبيق: Name_Version_Architecture_ResourceID_PublisherID. استخدِم السمة Name فقط.

  • ‫Xbox: مستضافة في المتجر

    عادةً ما يكون رقم تعريف التطبيق في المتجر هو الجزء الأخير من المسار في عنوان URL الخاص بالتطبيق https://www.xbox.com/<region>/games/store/<hyphenated-app-name>/<AppID>. استخدِم اسم التطبيق الذي يتضمّن شرطة ورقم تعريف التطبيق في المتجر لإنشاء السلسلة <my-app-name>.<AppID> الموضّحة أعلاه.

بالنسبة إلى برامج واجهة برمجة التطبيقات التي ترسل عددًا كبيرًا من الطلبات إلى YouTube (راجِع الاستخدام والحصص)، قد تكون هناك حاجة إلى بيانات اعتماد إضافية للوصول إلى مشغّل YouTube المضمَّن.

قد يؤدي عدم الالتزام بهذه المتطلبات إلى الحدّ من وظائف مشغّل YouTube المضمّن.

نوع WebView

عند دمج مشغّل YouTube المضمَّن في WebView، استخدِم أحد أنواع WebView التي يوفّرها نظام التشغيل عندما يكون ذلك متاحًا. على سبيل المثال:

حجم مشغّل YouTube المضمّن

يجب أن يكون حجم إطار العرض للمشغّلات المضمّنة 200 × 200 بكسل على الأقل. إذا كان المشغّل يعرض عناصر تحكّم، يجب أن يكون كبيرًا بما يكفي لعرض عناصر التحكّم بالكامل بدون تصغير مساحة العرض إلى أقل من الحد الأدنى للحجم. ننصح بأن يكون عرض مشغّلات الفيديو بنسبة عرض إلى ارتفاع 16:9 لا يقل عن 480 بكسل وارتفاعها لا يقل عن 270 بكسل.

التشغيل التلقائي وعمليات التشغيل المبرمَجة

يتناول هذا القسم عمليات التشغيل التلقائي. تنطبق هذه السياسة على مشغّلات YouTube المضمَّنة التي تستخدم مَعلمة المشغّل autoplay أو تبدأ التشغيل التلقائي آليًا باستخدام خدمة YouTube IFrame Player API أو خدمة أخرى من YouTube API.

  • يجب أن تبدأ المشغّلات المضمّنة التي تشغّل الفيديو تلقائيًا في تشغيل الفيديو فور تحميل الصفحة أو بمجرد أن يصبح المشغّل المضمّن مرئيًا بالكامل. ومع ذلك، يجب ألا يبدأ عميل واجهة برمجة التطبيقات التشغيل التلقائي إلّا بعد ظهور المشغّل وظهور أكثر من نصفه على الصفحة أو الشاشة.

  • يجب ألا تحتوي الصفحة أو الشاشة على أكثر من مشغّل YouTube واحد يشغّل المحتوى تلقائيًا في الوقت نفسه.

  • يجب ألا يقلّ عرض أي صورة مصغّرة على YouTube تبدأ تشغيل الفيديو عن 120 بكسل وألا يقلّ ارتفاعها عن 70 بكسل.

سمات "مشغّل YouTube"

يتم تحديد سمات ومعلَمات مشغّل YouTube، بما في ذلك، على سبيل المثال، مظهر العلامة التجارية لـ YouTube في المشغّل، في مستندات ومواصفات YouTube API (https://developers.google.com/youtube). يجب عدم إجراء تغييرات على مشغّل YouTube غير موضّحة بشكل صريح في مستندات واجهة برمجة التطبيقات.

التراكبات والإطارات

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

عدد تمريرات الماوس

يجب عدم استخدام عمليات التمرير فوق العناصر أو أحداث اللمس على مشغّل YouTube لبدء أي إجراء نيابةً عن المستخدم، مثل فتح نافذة أو الاشتراك في قناة.

تحميل الفيديوهات

إذا كانت "برامج API" تتيح للمستخدمين تحميل المحتوى إلى منصات متعددة، يجب أن يتمكّن المستخدمون من اختيار المنصات التي يريدون تحميل فيديوهاتهم إليها وإلغاء اختيارها.

متطلبات البيانات

على عملاء واجهة برمجة التطبيقات الذين يتيحون للمستخدمين تحميل فيديوهات إلى YouTube أن يتيحوا للمستخدمين ضبط القيم في القائمة التالية. أي خصائص غير مُدرَجة هي خصائص اختيارية.

  الاسم الوصف
سمات الموارد
snippet.title مَعلمة مطلوبة. تمثّل هذه السمة عنوان الفيديو. يعرض YouTube خطأً إذا تجاوزت القيمة 100 حرف. يتيح YouTube استخدام جميع أحرف UTF-8 الصالحة باستثناء < و>.

snippet.description مَعلمة مطلوبة. تمثّل هذه السمة وصف الفيديو. يعرض YouTube رسالة خطأ إذا تجاوزت القيمة 5,000 بايت. يتيح YouTube استخدام جميع أحرف UTF-8 الصالحة باستثناء < و>.
status.privacyStatus مَعلمة مطلوبة. إعدادات خصوصية الفيديو يجب أن يتمكّن المستخدمون من اختيار ما إذا كان الفيديو الذي تم تحميله سيكون علنيًا أو خاصًا أو غير مُدرَج.
مَعلمات الطلب
onBehalfOfContentOwnerChannel مطلوبة بشكل مشروط إذا كانت بيانات اعتماد التفويض الخاصة بالطلب تحدّد مالك محتوى وتم ضبط المَعلمة onBehalfOfContentOwner، يجب أن يتمكّن مستخدم واجهة برمجة التطبيقات أيضًا من تحديد قناة YouTube التي يتم تحميل الفيديو إليها.

عرض التعليقات

  الاسم الوصف
سمات الموارد
snippet.textDisplay مَعلمة مطلوبة. تمثّل هذه السمة نص التعليق. يجب أن يعرض برنامج واجهة برمجة التطبيقات (أ) النص الكامل لتعليق أو ردّ على تعليق، أو (ب) يقتطع النص ويوفّر طريقة تتيح للمشاهد الوصول بسهولة إلى النص الكامل من النسخة المقتطعة.

ينطبق هذا الشرط على جميع التعليقات والردود على التعليقات، بغض النظر عن نوع المرجع المرتبط بالتعليقات (الفيديوهات والقنوات وما إلى ذلك).

يُرجى العِلم أنّ قيمة السمة snippet.topLevelComment للمرجع commentThread هي مرجع comment، وأنّ السمة replies.comments[] هي قائمة بمراجع comment. وبالتالي، ينطبق هذا الشرط أيضًا على السمتَين snippet.topLevelComment.snippet.textDisplay وreplies.comments[].snippet.textDisplay.
snippet.title
(channel)
مطلوب (اقتراح) تمثّل هذه السمة عنوان القناة.
  • إذا كان التعليق مرتبطًا بقناة، على عميل واجهة برمجة التطبيقات عرض اسم القناة.
  • إذا كان التعليق مرتبطًا بفيديو، على عميل واجهة برمجة التطبيقات عرض اسم القناة التي حمّلت الفيديو.
snippet.title
(video)
مطلوبة بشكل مشروط (اقتراح): تمثّل هذه السمة عنوان الفيديو. يجب عرض هذه القيمة إذا كان التعليق مرتبطًا بفيديو.
snippet.moderationStatus مطلوبة بشكل مشروط إذا كانت قيمة المَعلمة moderationStatus في طلب واجهة برمجة التطبيقات هي heldForReview أو likelySpam، يجب أن يحدّد العرض هذا الحالة بوضوح باستخدام قيمة السمة أو عبارة مشابهة (مثل "هذا التعليق قيد المراجعة") أو عنوان (مثل "قيد المراجعة") أو عبارة أخرى لا لبس فيها. تتيح طريقة commentThreads.list استرداد التعليقات استنادًا إلى حالة الإشراف عليها.

إضافة تعليقات

  الاسم الوصف
سمات الموارد
snippet.title
(channel)
مَعلمة مطلوبة. تمثّل هذه السمة عنوان القناة.
  • إذا كان المستخدم يضيف تعليقًا حول قناة، يجب أن يعرض برنامج واجهة برمجة التطبيقات اسم القناة.
  • إذا كان المستخدم يضيف تعليقًا حول فيديو، يجب أن يعرض برنامج واجهة برمجة التطبيقات اسم القناة التي حمّلت الفيديو.
snippet.title
(video)
مَعلمة مطلوبة. إذا كان المستخدم يضيف تعليقًا حول فيديو، يجب أن يعرض برنامج واجهة برمجة التطبيقات عنوان الفيديو.
متطلبات أخرى
Comment author's channel name مَعلمة مطلوبة. يجب أن يحدّد عميل واجهة برمجة التطبيقات بوضوح حساب مستخدم YouTube الذي سيتم إسناد التعليق إليه. إذا كانت بيانات اعتماد التفويض الخاصة بالطلب تحدّد مالك محتوى وتم ضبط المَعلمة onBehalfOfContentOwner، يجب أن يتمكّن مستخدم واجهة برمجة التطبيقات أيضًا من تحديد قناة YouTube التي سيتم إسناد التعليق إليها.

إضافة ردود على التعليقات

  الاسم الوصف
سمات الموارد
snippet.textDisplay مَعلمة مطلوبة. تمثّل هذه السمة نص التعليق. يجب أن يعرض عميل واجهة برمجة التطبيقات نص التعليق الذي يردّ عليه المستخدم وفقًا للقواعد المحدّدة في قسم عرض التعليقات من هذا المستند.
snippet.title
(channel)
مَعلمة مطلوبة. تمثّل هذه السمة عنوان القناة.
  • إذا كان المستخدم يردّ على تعليق حول قناة، يجب أن يعرض برنامج واجهة برمجة التطبيقات اسم القناة.
  • إذا كان المستخدم يردّ على تعليق حول فيديو، يجب أن يعرض برنامج واجهة برمجة التطبيقات اسم القناة التي حمّلت الفيديو.
snippet.title
(video)
مَعلمة مطلوبة. إذا كان المستخدم يردّ على تعليق حول فيديو، يجب أن يعرض برنامج واجهة برمجة التطبيقات عنوان الفيديو.
متطلبات أخرى
Comment author's channel name مَعلمة مطلوبة. يجب أن يحدّد عميل واجهة برمجة التطبيقات بوضوح حساب مستخدم YouTube الذي سيتم إسناد الردّ على التعليق إليه. إذا كانت بيانات اعتماد التفويض الخاصة بالطلب تحدّد مالك محتوى وتم ضبط المَعلمة onBehalfOfContentOwner، يجب أن يتمكّن مستخدم واجهة برمجة التطبيقات أيضًا من تحديد قناة YouTube التي سيتم إسناد الردّ على التعليق إليها.

تعديل الردود على التعليقات أو حذفها

  الاسم الوصف
سمات الموارد
snippet.textDisplay مَعلمة مطلوبة. تمثّل هذه السمة نص التعليق. يجب أن يعرض عميل واجهة برمجة التطبيقات نص التعليق الذي يعدّله المستخدم أو يحذفه وفقًا للقواعد المحدّدة في قسم عرض التعليقات من هذا المستند.
snippet.title
(channel)
مَعلمة مطلوبة. تمثّل هذه السمة عنوان القناة.
  • إذا كان المستخدم يعدّل تعليقًا حول قناة أو يحذفه، على برنامج واجهة برمجة التطبيقات عرض اسم القناة.
  • إذا كان المستخدم يعدّل أو يحذف تعليقًا حول فيديو، يجب أن يعرض برنامج واجهة برمجة التطبيقات اسم القناة التي حمّلت الفيديو.
snippet.title
(video)
مَعلمة مطلوبة. إذا كان المستخدم يعدّل أو يحذف تعليقًا حول فيديو، يجب أن يعرض برنامج واجهة برمجة التطبيقات عنوان الفيديو.
متطلبات أخرى
Comment author's channel name مَعلمة مطلوبة. يجب أن يحدّد عميل واجهة برمجة التطبيقات بوضوح حساب مستخدم YouTube الذي يُنسب إليه التعليق.

حظر مستخدم من المحادثة المباشرة (أو إزالة الحظر)

  الاسم الوصف
سمات الموارد
snippet.title
(channel)
مَعلمة مطلوبة. اسم قناة YouTube التي سيتم حظرها أو إلغاء حظرها بالإضافة إلى ذلك، يجب أن يؤدي الاسم إلى القناة أو يجب عرض عنوان URL الخاص بالقناة أيضًا.
متطلبات أخرى
اسم قناة مؤلف التعليق مَعلمة مطلوبة. يجب أن يحدّد برنامج API بوضوح حساب مستخدم YouTube المستخدَم لإضافة الحظر أو إزالته.