API-сервисы YouTube – необходимый минимум функций

Примечание: Руководство по соблюдению правил YouTube для разработчиков содержит рекомендации и примеры, которые помогут вам гарантировать, что ваши клиенты API будут соблюдать определенные положения Условий и правил использования API YouTube (API TOS). Данное руководство содержит информацию о том, как YouTube обеспечивает соблюдение определенных положений API TOS, но не заменяет какие-либо существующие документы.

В настоящем документе определены минимальные функциональные требования к API-клиентам, которые реализуют или предоставляют доступ к определенным функциям API-сервисов YouTube («API-клиенты»).

Эти требования и рекомендации гарантируют, что API-клиенты обеспечивают единообразный пользовательский опыт, защищающий интересы пользователей YouTube, владельцев контента и рекламодателей. Эти правила являются неотъемлемой частью Условий использования API YouTube и должны соблюдаться при разработке и внедрении любых API-клиентов.

Вам следует ожидать, что требования, изложенные в этом документе, будут меняться, чтобы мы могли обеспечить более удобный пользовательский интерфейс существующих функций YouTube. Они также будут меняться в связи с появлением новых и обновленных функций YouTube. Иногда такие изменения могут потребовать обновления ваших API-клиентов для соответствия новым требованиям. История изменений Условий обслуживания будет содержать все изменения, поэтому, пожалуйста, регулярно проверяйте этот документ или подпишитесь на его RSS-канал , чтобы оперативно узнавать об изменениях, которые могут повлиять на ваши API-клиенты.

В дополнение к требованиям, изложенным в настоящем документе, мы настоятельно рекомендуем вам следовать рекомендациям, описанным в Правилах API сервисов YouTube и обсуждаемым в других разделах документации по API сервисам YouTube. Даже если это не является обязательным, эти рекомендации помогают вашим API-клиентам быстрее восстанавливаться после ошибок и оптимизировать использование квот, если они используют API-сервисы YouTube, выделяющие квоты. Кроме того, эти рекомендации способствуют поддержанию работоспособности экосистемы YouTube и, прежде всего, обеспечивают наилучший пользовательский опыт для пользователей ваших API-клиентов и приложений YouTube.

Встроенный проигрыватель YouTube и воспроизведение видео

Требования в этом разделе относятся непосредственно к встроенным проигрывателям YouTube. Правила API сервисов YouTube также включают несколько правил, касающихся API-клиентов, воспроизводящих аудиовизуальный контент YouTube.

Идентификация и учетные данные клиента API

Клиенты API, использующие встроенный проигрыватель YouTube (включая API YouTube IFrame Player), должны предоставить идентификацию через заголовок HTTP Referer . В некоторых средах браузер автоматически устанавливает HTTP Referer , и клиентам API нужно лишь убедиться, что они не устанавливают Referrer-Policy таким образом, чтобы подавлять значение Referer . YouTube рекомендует использовать strict-origin-when-cross-origin Referrer-Policy, которая уже используется по умолчанию во многих браузерах.

Аналогично, при интеграции встроенного проигрывателя YouTube в окно, созданное с помощью JavaScript window.open , клиенты API не должны использовать функцию noreferrer , которая подавляет значение Referer .

Установить реферер

В средах, где HTTP Referer по умолчанию пуст и не устанавливается браузером автоматически, API-клиенты должны предпринять действия для подтверждения своей личности альтернативными способами. В интеграциях 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];
      
  • Мобильное приложение с плеером внутри собственной вкладки браузера

    • CustomTabs Android

      Используйте Intent.EXTRA_REFERRER для установки реферера. При создании Uri обязательно используйте схему android-app:// вместо https:// . Например:

      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-адресе доменное имя должно быть идентификатором вашего приложения («ID приложения»), зарегистрированным в магазине, который распространял ваше приложение среди конечных пользователей. Если ваше приложение предоставляется пользователям через альтернативный канал распространения, используйте идентификатор приложения, зарегистрированный в операционной системе во время установки приложения. В большинстве случаев идентификатор вашего приложения будет представлять собой обратное доменное имя (также известное как «формат обратного DNS»), например, 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> , описанной выше.

Для клиентов API с большим количеством запросов к YouTube (см. Использование и квоты ) могут потребоваться дополнительные учетные данные для доступа к встроенному проигрывателю YouTube.

Несоблюдение этих требований может привести к снижению функциональности встроенного проигрывателя YouTube.

Тип WebView

При интеграции встроенного плеера YouTube в WebView используйте один из типов WebView, предоставляемых ОС, если он доступен. Например:

Размер встроенного проигрывателя YouTube

Встроенные плееры должны иметь область просмотра размером не менее 200x200 пикселей. Если плеер отображает элементы управления, он должен быть достаточно большим, чтобы полностью отображать их, не уменьшая область просмотра ниже минимального размера. Рекомендуемые размеры плееров с соотношением сторон 16:9: не менее 480 пикселей в ширину и 270 пикселей в высоту.

Автовоспроизведение и воспроизведение по сценарию

В этом разделе рассматриваются автоматические воспроизведения. Он применим к встроенным проигрывателям YouTube, которые либо используют параметр autoplay , либо программно инициируют автоматическое воспроизведение с помощью API-сервиса YouTube IFrame Player или другого API-сервиса YouTube.

  • Встроенные проигрыватели, автоматически воспроизводящие видео, должны начинать воспроизведение сразу после загрузки страницы или как только встроенный проигрыватель станет полностью видимым. Однако API-клиент не должен начинать автоматическое воспроизведение, пока проигрыватель не станет видимым и не будет виден более чем наполовину на странице или экране.

  • На странице или экране не должно быть более одного проигрывателя YouTube, автоматически воспроизводящего контент одновременно.

  • Любая миниатюра YouTube, инициирующая воспроизведение, должна быть не менее 120 пикселей в ширину и 70 пикселей в высоту.

Атрибуты проигрывателя YouTube

Атрибуты и параметры проигрывателя YouTube, включая, например, отображение фирменного стиля YouTube в проигрывателе, указаны в документации и спецификациях API YouTube (https://developers.google.com/youtube). Запрещается вносить в проигрыватель YouTube изменения, явно не описанные в документации API.

Накладки и рамки

Запрещается отображать наложения, рамки и другие визуальные элементы поверх любой части встроенного проигрывателя YouTube, включая элементы управления. Аналогичным образом, запрещается использовать наложения, рамки и другие визуальные элементы для перекрытия какой-либо части встроенного проигрывателя, включая элементы управления.

Наведение курсора

Запрещается использовать наведение курсора или сенсорные события в проигрывателе YouTube для инициирования каких-либо действий от имени пользователя, например открытия окна или подписки на канал.

Загрузка видео

Если клиенты API позволяют пользователям загружать контент на несколько платформ, пользователи должны иметь возможность выбирать и отменять выбор платформ, на которые они хотят загружать свои видео.

Требования к данным

Клиенты API, позволяющие пользователям загружать видео на YouTube, должны предоставлять пользователям возможность задавать значения из следующего списка. Любые свойства, не перечисленные здесь, являются необязательными.

Имя Описание
Свойства ресурсов
snippet.title Обязательно . Название видео. YouTube возвращает ошибку, если значение превышает 100 символов. YouTube поддерживает все допустимые символы UTF-8, кроме < и > .
snippet.description Обязательно . Описание видео. YouTube возвращает ошибку, если значение превышает 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 )
Обязательно (предложение) . Название канала.
  • Если комментарий относится к каналу, API-клиент должен отображать название канала.
  • Если комментарий относится к видео, API-клиент должен отображать название канала, загрузившего видео.
snippet.title
( video )
Условно обязательно (предложение) . Название видео. Это значение должно отображаться, если комментарий относится к видео.
snippet.moderationStatus Условно обязательный . Если значение параметра moderationStatus в запросе API — heldForReview или likelySpam , отображаемая информация должна чётко идентифицировать этот статус, используя значение свойства, похожий текст (например, «Этот комментарий находится на рассмотрении»), заголовок (например, «На рассмотрении») или другой однозначный текст. Метод commentThreads.list поддерживает возможность извлечения комментариев на основе их статуса модерации.

Добавление комментариев

Имя Описание
Свойства ресурсов
snippet.title
( channel )
Обязательно . Название канала.
  • Если пользователь добавляет комментарий о канале, API-клиент должен отображать название канала.
  • Если пользователь добавляет комментарий к видео, API-клиент должен отображать название канала, загрузившего видео.
snippet.title
( video )
Обязательно . Если пользователь добавляет комментарий к видео, API-клиент должен отображать название видео.
Другие требования
Comment author's channel name Обязательно . Клиент API должен чётко указывать учётную запись пользователя YouTube, к которой будет приписан комментарий. Если учётные данные запроса указывают владельца контента и задан параметр onBehalfOfContentOwner , пользователь API также должен иметь возможность указать канал YouTube, к которому будет приписан комментарий.

Добавление ответов на комментарии

Имя Описание
Свойства ресурсов
snippet.textDisplay Обязательно . Текст комментария. Клиент API должен отображать текст комментария, на который отвечает пользователь, в соответствии с правилами, определенными в разделе «Отображение комментариев» настоящего документа.
snippet.title
( channel )
Обязательно . Название канала.
  • Если пользователь отвечает на комментарий о канале, клиент API должен отображать название канала.
  • Если пользователь отвечает на комментарий к видео, API-клиент должен отобразить название канала, загрузившего видео.
snippet.title
( video )
Обязательно . Если пользователь отвечает на комментарий к видео, API-клиент должен отображать название видео.
Другие требования
Comment author's channel name Обязательно . Клиент API должен чётко указывать учётную запись пользователя YouTube, к которой будет привязан ответ на комментарий. Если учётные данные запроса указывают владельца контента и задан параметр onBehalfOfContentOwner , пользователь API также должен иметь возможность указать канал YouTube, к которому будет привязан ответ на комментарий.

Редактирование или удаление ответов на комментарии

Имя Описание
Свойства ресурсов
snippet.textDisplay Обязательно . Текст комментария. Клиент API должен отображать текст комментария, который пользователь редактирует или удаляет, в соответствии с правилами, определенными в разделе «Отображение комментариев» настоящего документа.
snippet.title
( channel )
Обязательно . Название канала.
  • Если пользователь редактирует или удаляет комментарий о канале, API-клиент должен отображать название канала.
  • Если пользователь редактирует или удаляет комментарий к видео, API-клиент должен отображать название канала, загрузившего видео.
snippet.title
( video )
Обязательно . Если пользователь редактирует или удаляет комментарий к видео, API-клиент должен отображать название видео.
Другие требования
Comment author's channel name Обязательно . Клиент API должен чётко идентифицировать учётную запись пользователя YouTube, к которой относится комментарий.

Блокировка пользователя в чате (или снятие бана)

Имя Описание
Свойства ресурсов
snippet.title
( channel )
Обязательно . Название канала YouTube, который блокируется или разблокируется. Кроме того, название должно ссылаться на канал, или должен быть указан URL-адрес канала.
Другие требования
Название канала автора комментария Обязательно . Клиент API должен чётко идентифицировать учётную запись пользователя YouTube, используемую для добавления или снятия запрета.