توجه: پیروی از خطمشیهای برنامهنویس YouTube راهنماییها و مثالهایی را ارائه میدهد تا به شما کمک کند مطمئن شوید که مشتریان API شما از بخشهای خاصی از شرایط و خطمشیهای خدمات YouTube API (API TOS) پیروی میکنند. این راهنما بینشی را در مورد نحوه اجرای برخی جنبههای API TOS توسط YouTube ارائه میکند، اما جایگزین هیچ سند موجود نمیشود.
این سند حداقل الزامات عملکردی را برای کلاینتهای API تعریف میکند که ویژگیهای خاص سرویسهای YouTube API ("مشتریان API") را اجرا میکنند یا به آنها دسترسی میدهند.
این الزامات و دستورالعملها تضمین میکنند که مشتریان API تجربه کاربری ثابتی را ارائه میکنند که از منافع کاربران YouTube، صاحبان محتوا و تبلیغکنندگان محافظت میکند. این قوانین بخشی جدایی ناپذیر از شرایط سرویس YouTube API هستند و باید در توسعه و اجرای هر مشتری API دنبال شوند.
باید انتظار داشته باشید که الزامات این سند تغییر کند تا بتوانیم از تجربیات کاربر بهتر با ویژگیهای موجود YouTube اطمینان حاصل کنیم. آنها همچنین در پاسخ به ویژگی های جدید و به روز شده YouTube تغییر خواهند کرد. گاهی اوقات، چنین تغییراتی ممکن است از شما بخواهد که API Client های خود را برای رفع نیازهای جدید به روز کنید. تاریخچه بازنگری شرایط خدمات هرگونه تغییر را مستند می کند، بنابراین لطفاً آن سند را مرتباً بررسی کنید یا در فید RSS آن مشترک شوید تا مطمئن شوید که می توانید به سرعت از تغییراتی که ممکن است بر مشتریان API خود تأثیر بگذارد مطلع شوید.
علاوه بر الزامات موجود در این سند، ما به شدت توصیه میکنیم بهترین شیوههای شرح داده شده در خطمشیهای خدمات YouTube API را دنبال کنید و در جاهای دیگر در اسناد سرویسهای YouTube API مورد بحث قرار گرفته است. حتی زمانی که به شدت مورد نیاز نیست، این روشها به مشتریان API شما کمک میکند تا در صورت استفاده از سرویسهای YouTube API که سهمیه را اختصاص میدهند، سریعتر از خطاها بازیابی کنند و استفاده از سهمیه خود را بهینه کنند. در عین حال، این شیوهها به اطمینان از سلامت اکوسیستم YouTube و بالاتر از همه، ارائه بهترین تجربه ممکن به کاربران مشتریان API و برنامههای YouTube کمک میکنند.
پخش کننده جاسازی شده یوتیوب و پخش ویدیو
الزامات این بخش به طور خاص به پخش کننده های یوتیوب تعبیه شده مربوط می شود. خطمشیهای خدمات YouTube API همچنین شامل چندین خطمشی مرتبط با مشتریان API است که محتوای سمعی و بصری YouTube را پخش میکنند.
شناسه و اعتبار مشتری API
مشتریان API که از پخشکننده جاسازیشده YouTube (از جمله YouTube IFrame Player API) استفاده میکنند، باید از طریق سرصفحه درخواست HTTP Referer
شناسایی کنند. در برخی از محیطها، مرورگر بهطور خودکار HTTP Referer
تنظیم میکند و مشتریان API فقط باید مطمئن شوند که Referrer-Policy
به گونهای تنظیم نمیکنند که مقدار Referer
سرکوب کند. یوتیوب توصیه میکند از سیاست ارجاعدهنده- strict-origin-when-cross-origin
استفاده کنید، که قبلاً در بسیاری از مرورگرها پیشفرض است.
به طور مشابه، اگر پخش کننده جاسازی شده YouTube را در پنجره ایجاد شده با استفاده از JavaScript window.open
ادغام کنید، API Clients نباید از ویژگی noreferrer
استفاده کند که مقدار Referer
سرکوب می کند.
Referer را تنظیم کنید
در محیطهایی که HTTP Referer
بهطور پیشفرض خالی است و بهطور خودکار توسط مرورگر تنظیم نشده است، API Clients باید برای ارائه هویت خود از طریق روشهای جایگزین اقدام کنند. در ادغامهای WebView مانند برنامه موبایل یا برنامه دسکتاپ، HTTP Referer
به طور پیشفرض خالی است و Referer
معمولاً با استفاده از یکی از این تکنیکها تنظیم میشود:
برنامه موبایل با پخش کننده در یک فایل HTML محلی
در این پیکربندی، پخش کننده در یک فایل HTML که همراه با برنامه است بارگذاری می شود. هنگام بارگیری این فایل HTML، با تنظیم پارامتر
baseUrl
،Referer
تنظیم می شود.- Android
loadDataWithBaseURL
- iOS
loadHTMLString:baseURL:
- Android
برنامه موبایل بدون فایل HTML محلی
در این پیکربندی، پخش کننده مستقیماً از
https://www.youtube.com/embed/VIDEO_ID
بدون هیچ فایل HTML محصور شده بارگیری می شود. شماReferer
با اضافه کردن آن به عنوان سربرگ HTTP تنظیم می کنید:-
loadUrl
Android با سرصفحه HTTPReferer
اضافه شده به پارامترadditionalHttpHeaders
iOS
loadRequest:
باReferer
HTTP Header به درخواست اضافه شده است. به عنوان مثال: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];
-
برنامه تلفن همراه با پخش کننده در برگه مرورگر بومی
CustomTabs
اندرویدبرای تنظیم ارجاع دهنده
Intent.EXTRA_REFERRER
استفاده کنید. هنگام ایجادUri
حتماً به جایhttps://
از طرحandroid-app://
استفاده کنید. به عنوان مثال: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 تنظیم کنید:- Microsoft.NET - از
HttpRequestHeaders.Referrer
یاCoreWebView2HttpRequestHeaders.SetHeader
استفاده کنید - macOS - همان دستورالعملهایی که در بالا برای برنامههای موبایل iOS توضیح داده شد را دنبال کنید
- Microsoft.NET - از
برای پلتفرم های دیگری که HTTP Referer
به طور پیش فرض خالی است، با پیکربندی WebView که پخش کننده در آن بارگذاری شده است، مقدار Referer
را تنظیم کنید. تکنیک دقیق ممکن است بسته به پلت فرم متفاوت باشد.
اگر مالک کتابخانه، فریمورک، افزونه، سرویس یا پوششی هستید که توسط توسعهدهندگان برای ادغام پخشکننده تعبیهشده YouTube استفاده میشود، باید شناسه برنامه را از محیط بازیابی کنید (این ممکن است بسته به پلتفرم ممکن نباشد) یا به توسعهدهندگان اجازه دهید شناسه برنامه خود را ارسال کنند تا Referer
(و پارامتر پخش کننده widget_referrer
، در صورت لزوم، در صورت لزوم تنظیم شود).
فرمت ارجاع دهنده
هنگامی که شما به صراحت Referer را با تنظیم یک پارامتر WebView یا اضافه کردن یک سربرگ HTTP ارائه می کنید، قالب معمولاً یک URL کاملا واجد شرایط است. HTTPS
به عنوان پروتکل مشخص کنید. در URL، نام دامنه باید شناسه برنامه شما («شناسه برنامه») باشد که در فروشگاهی که برنامه شما را بین کاربران نهایی توزیع کرده است، ثبت شده است. اگر برنامه شما از طریق یک کانال توزیع جایگزین به کاربران ارائه می شود، از شناسه برنامه که در هنگام نصب برنامه در سیستم عامل ثبت شده است استفاده کنید. در اکثر موارد، شناسه برنامه شما یک نام دامنه معکوس شده (همچنین به عنوان "فرمت معکوس-DNS" شناخته می شود)، مانند com.google.android.youtube
خواهد بود. نمونه های نمایندگی:
- سیستم عامل Android و برنامههای Android در ChromeOS: شناسه برنامه
- پلتفرمهای اپل، از جمله iOS، iPadOS، macOS: Bundle ID
- Samsung Tizen: App ID
- توزیع های لینوکس:
- فدورا: شناسه برنامه
- Gnome: شناسه برنامه
- اوبونتو: شناسه برنامه
در برخی از سیستم عامل ها، شناسه برنامه یک نام دامنه معکوس نیست. در این موارد، از شناسه برنامه منحصر به فرد اختصاص داده شده توسط فروشگاه توزیع کننده برنامه استفاده کنید. وقتی شناسه برنامه فروشگاه یک رشته الفبایی ایجاد شده است (تخصیص داده شده توسط فروشگاه یا ابزارهای توسعه، که توسط توسعهدهنده برنامه انتخاب نشده است)، نام نمایشی برنامه (جایگزینی فضاها با خط تیره) و شناسه برنامه فروشگاه را که با یک نقطه محدود شدهاند، شامل شود. به عنوان مثال: <my-app-name>.<AppID>
. این مقدار باید در تغییرات نسخه برنامه پایدار باشد. اگر برنامه در فروشگاهی میزبانی نمی شود، از شناسه برنامه که در هنگام نصب برنامه در سیستم عامل ثبت شده است استفاده کنید. این معمولاً یک شناسه منحصر به فرد در مانیفست برنامه است. جزئیات مربوط به نسخه برنامه و معماری پشتیبانی شده را حذف کنید. نمونه های نمایندگی:
فروشگاه وب Chrome: میزبان فروشگاه
شناسه برنامه فروشگاه معمولاً آخرین قسمت از مسیر در آدرس اینترنتی برنامه
https://chromewebstore.google.com/detail/<hyphenated-app-name>/<AppID>
است. از نام برنامه خطدار و شناسه برنامه فروشگاه برای ساختن رشته<my-app-name>.<AppID>
که در بالا توضیح داده شد.ویندوز: میزبانی فروشگاه
شناسه برنامه فروشگاه معمولاً آخرین قسمت مسیر در آدرس اینترنتی برنامه
https://apps.microsoft.com/detail/<AppID>
است. از شناسه برنامه فروشگاه برای ساختن<my-app-name>.<AppID>
که در بالا توضیح داده شد. نام برنامه خط فاصله نیز باید درج شود.ویندوز: توزیع غیر فروشگاهی
برنامههای ویندوز حاوی هویت بسته در مانیفست برنامه هستند:
Name_Version_Architecture_ResourceID_PublisherID
. فقط از ویژگیName
استفاده کنید.ایکس باکس: میزبان فروشگاه
شناسه برنامه فروشگاه معمولاً آخرین قسمت مسیر در آدرس اینترنتی برنامه
https://www.xbox.com/<region>/games/store/<hyphenated-app-name>/<AppID>
است. از نام برنامه خطدار و شناسه برنامه فروشگاه برای ساختن رشته<my-app-name>.<AppID>
که در بالا توضیح داده شد.
برای مشتریان API با تعداد درخواستهای زیاد به YouTube (به استفاده و سهمیهها مراجعه کنید)، ممکن است برای دسترسی به پخشکننده تعبیهشده YouTube به اعتبارنامههای بیشتری نیاز باشد.
رعایت نکردن این الزامات ممکن است منجر به کاهش عملکرد در پخشکننده تعبیهشده YouTube شود.
نوع WebView
هنگام ادغام پخشکننده تعبیهشده YouTube در WebView، در صورت وجود از یکی از انواع WebView ارائهشده توسط سیستم عامل استفاده کنید. به عنوان مثال:
- سیستم عامل اندروید:
WebView
یاCustomTabs
- پلتفرم های اپل، از جمله iOS، iPadOS، macOS:
WKWebView
یاSFSafariViewController
اندازه پخش کننده یوتیوب جاسازی شده
پخشکنندههای جاسازیشده باید دیدی با ابعاد حداقل 200 پیکسل در 200 پیکسل داشته باشند. اگر پخشکننده کنترلها را نمایش میدهد، باید به اندازهای بزرگ باشد که کنترلها را بهطور کامل نمایش دهد، بدون اینکه درگاه دید کمتر از حداقل اندازه باشد. ما توصیه می کنیم پخش کننده های 16:9 حداقل 480 پیکسل عرض و 270 پیکسل قد داشته باشند.
پخش خودکار و پخش اسکریپت
این بخش پخش خودکار را پوشش می دهد. این برنامه برای پخشکنندههای جاسازیشده YouTube اعمال میشود که یا از پارامتر پخش autoplay
استفاده میکنند یا با استفاده از سرویس YouTube IFrame Player API یا سرویس YouTube API دیگر، پخش خودکار را به صورت برنامهریزی شروع میکنند.
پخشکنندههای جاسازیشده که بهطور خودکار یک ویدیو را پخش میکنند، باید بلافاصله پس از بارگیری صفحه یا به محض اینکه پخشکننده جاسازیشده کاملاً قابل مشاهده است، بازپخش را آغاز کنند. با این حال، یک سرویس گیرنده API نباید پخش خودکار را شروع کند تا زمانی که پخش کننده قابل مشاهده باشد و بیش از نیمی از پخش کننده در صفحه یا صفحه قابل مشاهده باشد.
یک صفحه یا صفحه نباید بیش از یک پخش کننده YouTube داشته باشد که به طور خودکار محتوا را به طور همزمان پخش کند.
هر تصویر کوچک YouTube که بازپخش را آغاز می کند باید حداقل 120 پیکسل عرض و 70 پیکسل ارتفاع داشته باشد.
ویژگی های YouTube Player
ویژگی ها و پارامترهای پخش کننده YouTube - از جمله، به عنوان مثال، ظاهر نام تجاری YouTube در پخش کننده - در اسناد و مشخصات YouTube API (https://developers.google.com/youtube) مشخص شده است. شما نباید تغییراتی در پخش کننده YouTube ایجاد کنید که به صراحت در اسناد API توضیح داده نشده است.
روکش ها و قاب ها
شما نباید پوششها، فریمها یا سایر عناصر بصری را در مقابل هیچ بخشی از پخشکننده تعبیهشده YouTube، از جمله کنترلهای پخشکننده، نمایش دهید. به طور مشابه، نباید از پوششها، فریمها یا سایر عناصر بصری برای مبهم کردن بخشی از پخشکننده تعبیهشده، از جمله کنترلهای پخشکننده، استفاده کنید.
Mouseovers
برای شروع هر اقدامی از طرف کاربر، مانند باز کردن یک پنجره یا اشتراک در یک کانال، نباید از ماوس یا رویدادهای لمسی در پخش کننده YouTube استفاده کنید.
در حال آپلود ویدیوها
اگر مشتریان API به کاربران اجازه میدهند محتوا را در چندین پلتفرم آپلود کنند، کاربران باید بتوانند پلتفرمهایی را که میخواهند ویدیوهای خود را در آن آپلود کنند، انتخاب کرده و از حالت انتخاب خارج کنند.
الزامات داده
کلاینتهای API که به کاربران امکان میدهند ویدیوها را در YouTube آپلود کنند، باید کاربران را قادر به تنظیم مقادیر در لیست زیر کنند. هر ویژگی که در لیست نیست اختیاری است.
نام | توضیحات | |
---|---|---|
خواص منابع | ||
snippet.title | مورد نیاز . عنوان ویدیو اگر مقدار از 100 کاراکتر بیشتر شود، یوتیوب خطایی را برمیگرداند. YouTube از همه کاراکترهای معتبر UTF-8 به جز < و > پشتیبانی می کند. | |
snippet.description | مورد نیاز . توضیحات ویدیو اگر مقدار از 5000 بایت بیشتر شود، یوتیوب خطایی را برمیگرداند. YouTube از همه کاراکترهای معتبر UTF-8 به جز < و > پشتیبانی می کند. | |
status.privacyStatus | مورد نیاز . تنظیمات حریم خصوصی ویدیو . کاربران باید بتوانند انتخاب کنند که ویدیوی آپلود شده عمومی، خصوصی یا فهرست نشده باشد. | |
درخواست پارامترها | ||
onBehalfOfContentOwnerChannel | مشروط مورد نیاز است . اگر اعتبارنامه مجوز درخواست، مالک محتوا را شناسایی کند و پارامتر onBehalfOfContentOwner تنظیم شده باشد، کاربر API باید بتواند کانال YouTube را که ویدیو در آن آپلود میشود نیز مشخص کند. |
نمایش نظرات
نام | توضیحات | |
---|---|---|
خواص منابع | ||
snippet.textDisplay | مورد نیاز . متن کامنت مشتری API باید (الف) متن کامل یک نظر یا پاسخ نظر را نمایش دهد، یا (ب) متن را کوتاه کند و راهی برای بیننده فراهم کند تا به راحتی به متن کامل از نسخه کوتاه شده دسترسی پیدا کند. این الزام برای همه نظرات و پاسخهای نظر اعمال میشود، صرفنظر از اینکه نظرات با کدام منبع مرتبط هستند (ویدئوها، کانالها و غیره). توجه داشته باشید که مقدار ویژگی snippet.topLevelComment منبع commentThread یک منبع comment است و ویژگی replies.comments[] فهرستی از منابع comment است. به این ترتیب، این الزام برای ویژگی های snippet.topLevelComment.snippet.textDisplay و replies.comments[].snippet.textDisplay نیز اعمال می شود. | |
snippet.title ( channel ) | مورد نیاز (پیشنهاد) . عنوان کانال
| |
snippet.title ( video ) | مشروط مورد نیاز (پیشنهاد) . عنوان ویدیو اگر نظر مربوط به یک ویدیو باشد، این مقدار باید نمایش داده شود. | |
snippet.moderationStatus | مشروط مورد نیاز است . اگر مقدار پارامتر moderationStatus در درخواست API heldForReview یا likelySpam باشد، نمایشگر باید به وضوح آن وضعیت را با استفاده از مقدار ویژگی، زبان مشابه (مثلاً "این نظر برای بررسی نگه داشته شده است")، سرصفحه (مثلاً "برای بررسی نگه داشته شود") یا سایر زبانهای بدون ابهام شناسایی کند. روش commentThreads.list از قابلیت بازیابی نظرات بر اساس وضعیت تعدیل آنها پشتیبانی می کند. |
افزودن نظرات
نام | توضیحات | |
---|---|---|
خواص منابع | ||
snippet.title ( channel ) | مورد نیاز . عنوان کانال
| |
snippet.title ( video ) | مورد نیاز . اگر کاربر در مورد یک ویدیو نظر اضافه می کند، مشتری API باید عنوان ویدیو را نمایش دهد. | |
سایر الزامات | ||
Comment author's channel name | مورد نیاز . مشتری API باید حساب کاربری یوتیوب را که نظر به آن نسبت داده می شود، به وضوح شناسایی کند. اگر اعتبارنامه درخواست، مالک محتوا را شناسایی کند و پارامتر onBehalfOfContentOwner تنظیم شده باشد، کاربر API باید بتواند کانال YouTube را که نظر به آن نسبت داده میشود را نیز مشخص کند. |
افزودن پاسخ های نظر
نام | توضیحات | |
---|---|---|
خواص منابع | ||
snippet.textDisplay | مورد نیاز . متن کامنت سرویس گیرنده API باید متن نظری را که کاربر به آن پاسخ می دهد مطابق با قوانین تعریف شده در بخش نمایش نظرات این سند نمایش دهد. | |
snippet.title ( channel ) | مورد نیاز . عنوان کانال
| |
snippet.title ( video ) | مورد نیاز . اگر کاربر به نظری درباره یک ویدیو پاسخ میدهد، مشتری API باید عنوان ویدیو را نمایش دهد. | |
سایر الزامات | ||
Comment author's channel name | مورد نیاز . مشتری API باید حساب کاربری YouTube را که پاسخ نظر به آن نسبت داده میشود، به وضوح شناسایی کند. اگر اعتبارنامه درخواست، مالک محتوا را شناسایی کند و پارامتر onBehalfOfContentOwner تنظیم شده باشد، کاربر API نیز باید بتواند کانال YouTube را که پاسخ نظر به آن نسبت داده میشود، مشخص کند. |
ویرایش یا حذف پاسخ های نظرات
نام | توضیحات | |
---|---|---|
خواص منابع | ||
snippet.textDisplay | مورد نیاز . متن کامنت مشتری API باید متن نظری را که کاربر در حال ویرایش یا حذف آن است مطابق با قوانین تعریف شده در بخش نمایش نظرات این سند نمایش دهد. | |
snippet.title ( channel ) | مورد نیاز . عنوان کانال
| |
snippet.title ( video ) | مورد نیاز . اگر کاربر در حال ویرایش یا حذف نظری درباره یک ویدیو است، مشتری API باید عنوان ویدیو را نمایش دهد. | |
سایر الزامات | ||
Comment author's channel name | مورد نیاز . مشتری API باید حساب کاربری یوتیوب را که نظر به آن نسبت داده شده است، به وضوح شناسایی کند. |
ممنوع کردن کاربر از چت زنده (یا حذف ممنوعیت)
نام | توضیحات | |
---|---|---|
خواص منابع | ||
snippet.title ( channel ) | مورد نیاز . نام کانال یوتیوب که در حال ممنوعیت یا لغو ممنوعیت است. علاوه بر این، نام باید به کانال پیوند داده شود یا آدرس کانال نیز باید نمایش داده شود. | |
سایر الزامات | ||
نام کانال نویسنده کامنت | مورد نیاز . سرویس گیرنده API باید حساب کاربری YouTube را که برای افزودن یا حذف ممنوعیت استفاده میشود، به وضوح شناسایی کند. |