У меня есть приложение, которое создает и загружает видео для клиентов. Перед попыткой загрузки клиент предоставляет авторизацию, а результирующие токены доступа и обновления сохраняются. Иногда бывает, что у клиента нет канала YouTube, связанного с их учетной записью Google. Я обнаруживаю это и создаю для них канал. Это нормально работает нормально. Но не всегда. Вот пример того, где создания канала потерпел неудачу:ServiceForbiddenException Linking Channel
Obtaining access token for Customer
post https://accounts.google.com/o/oauth2/token
HTTP Response: 200
{
"access_token" : "_new_access_token_",
"token_type" : "Bearer",
"expires_in" : 3600
}
Uploading video '_video_name_' for Customer
post http://uploads.gdata.youtube.com/feeds/api/users/default/uploads
Authorization: Bearer _new_access_token_
GData-Version: 2.1
X-GData-Key: key=_GData_Key_
Slug: n3n1xs.mp4
Content-Type: multipart/related; boundary="51d366cb05b71"
Content-Length: 255958407
Connection: close
HTTP Response: 403
<?xml version='1.0' encoding='UTF-8'?><errors><error><domain>yt:service</domain><code>youtube_signup_required</code></error></errors>
Obtaining channel names for Customer
get https://gdata.youtube.com/feeds/api/suggest/username?hint=CustomerNameVT&fields=entry%2Ftitle
GData-Version: 2.1
X-GData-Key: key=_GData_Key_
HTTP Response: 200
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom'><entry><title>CustomerNameVT</title></entry><entry><title>VTCustomerName</title></entry><entry><title>VTNameCustomer</title></entry><entry><title>CustomerVTName</title></entry><entry><title>CustomerNameVT1</title></entry><entry><title>NameCustomerVT</title></entry><entry><title>NameVTCustomer</title></entry></feed>
Linking YT channel for Customer (CustomerNameVT)
put https://gdata.youtube.com/feeds/api/users/default
Authorization: Bearer _new_access_token_
Content-Type: application/atom+xml
GData-Version: 2.1
X-GData-Key: key=_GData_Key_
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:yt='http://gdata.youtube.com/schemas/2007'><yt:username>CustomerNameVT</yt:username></entry>
HTTP Response: 403
<errors xmlns='http://schemas.google.com/g/2005'><error><domain>GData</domain><code>ServiceForbiddenException</code><internalReason>Forbidden</internalReason></error></errors>
Обратите внимание, что запрашиваемое имя является первым один предложенный предложить имя пользователя API. Насколько я вижу, это должно сработать. Обычно это происходит. Что случилось в этот раз?
Для большинства наших клиентов последовательность выглядит так: зарегистрируйтесь в учетной записи Google, авторизуйте загрузку, затем создайте канал YT. Это очень много. После предоставления разрешения Google переводит обратно на наш сайт. К сожалению, похоже, что процесс создания канала не существует. Ссылка «next», по-видимому, ограничена youtube.com. Правила межсайтового скриптинга предотвращают мониторинг. Таким образом, мы решили обработать это, чтобы запросить авторизацию, а затем с каждой загрузкой проверить, есть ли у них учетная запись YT. Если это так, мы используем его, если мы не загружаемся на наш собственный канал. – Carl
Я слышал некоторые внутренние неурядицы, что если вы используете кнопку входа в Google+ для управления OAuth 2 для вас, в будущем вам может быть гарантировано, что конечным результатом будет авторизация канала, который поддерживает загрузку, поскольку каналы YouTube связанные с аккаунтами Google+, поддерживают загрузку. https://developers.google.com/+/features/sign-in –