Как получить список каналов YouTube и связанных URL-адресов каналов (пользователя или канала), принадлежащих аутентифицированному пользователю

Мы используем следующий вызов, чтобы получить ChannelID для аутентифицированного пользователя, и в большинстве случаев он хорошо работает. Некоторые пользователи YouTube подключают свои каналы к странице Google+, и у одного из наших пользователей в этой ситуации это не получается. В этом случае вызов возвращает только идентификатор канала, связанный с учетной записью электронной почты пользователя, используемой для аутентификации, а не со всеми каналами, принадлежащими пользователю.

System.IO.Stream resultStream = service.Query(new Uri("https://www.googleapis.com/youtube/v3/channels?part=id%2Csnippet%2CcontentDetails%2Cstatistics%2CtopicDetails&mine=true&key=" + GlobalSettings.developerKey));

Кроме того, мы создаем URL-адрес канала, добавляя идентификатор канала к следующему URL-адресу.

http://www.youtube.com/channel/

Однако некоторые каналы используют имя пользователя и путь вместо идентификатора канала. Как определить, что типом является пользователь, а не канал? В этом случае имя пользователя добавляется к следующему пути. Основной канал пользователя Google+ использует этот путь с именем пользователя.

http://www.youtube.com/user/

person user2170704    schedule 18.05.2013    source источник


Ответы (2)


Несколько вещей:

  1. В v3 API данных YouTube вы вынуждены везде работать с идентификаторами каналов. Это хорошая вещь. Идентификаторы каналов — единственный универсальный способ идентификации каналов! Устаревшие имена пользователей также использовались для этой цели, но количество каналов без устаревших имен пользователей увеличивается с каждым днем, поэтому не рекомендуется писать новый код версии 2, основанный на устаревших именах пользователей (и это невозможно в версии 3).
  2. Выполняя вызов channels.list(..., mine=true), вы всегда будете возвращать ровно один канал. Канал, который вы получите, будет зависеть от того, какой канал был выбран при прохождении потока OAuth 2 — в этом потоке есть средство выбора, которое позволяет вам выбрать любой канал, который вы хотите, если ваша учетная запись Google имеет доступ более чем к одному каналу. . Если вы хотите работать на другом канале, вам необходимо явно получить токен OAuth 2 для этого канала.
  3. channel.list(..., managedByMe=true) может возвращать несколько каналов, но этот вызов API имеет отношение только к контент-партнерам YouTube и используется вместе с параметром onBehalfOfContentOwner. Большинство разработчиков могут спокойно игнорировать это, если только вы не знаете, что явно работаете с аккаунтами партнеров по контенту YouTube.
  4. URL-адрес для посещения страницы канала нигде не возвращается в ответе API v3 — это правда, и, возможно, так и должно быть (не стесняйтесь запросить функцию). Если вы хотите создать URL-адрес вручную, вы можете использовать http://www.youtube.com/channel/CHANNEL_ID, где CHANNEL_ID — это стандартное значение UC..., которое используется везде в v3. Это должно привести к правильному URL-адресу независимо от того, есть ли у канала также устаревшее имя пользователя.
person Jeff Posnick    schedule 22.05.2013

Единственный способ, которым я смог это сделать, — использовать API v2 вместо v3. В частности, вы можете использовать тот же токен OAuth, но получить доступ к этой конечной точке API:

https://gdata.youtube.com/feeds/api/users/default?v=2

Он вернет XML-документ, содержащий как URL-адрес канала пользователя (с использованием идентификатора канала), так и имя пользователя YouTube.

См. https://developers.google.com/youtube/2.0/reference#User_profile_entry для получения дополнительной информации.

person Steven Grosmark    schedule 19.05.2013
comment
Спасибо. Это поможет, предоставив полный URL-адрес и имя пользователя. Мне все еще нужно получить полный список всех каналов, принадлежащих пользователю. Будет ли это предоставлять полный список, когда канал пользователя связан с учетной записью или страницей Google+? - person user2170704; 21.05.2013
comment
AFIK, между каналом YouTube и логином пользователя существует прямая связь. Это означает, что в списке каналов всегда будет один элемент. Если, конечно, ваша учетная запись YT не является учетной записью YT-CMS (например, NBC или BBC). У меня нет опыта работы с учетными записями YT-CMS, поэтому приношу свои извинения за то, что не могу помочь в этом отношении. - person Steven Grosmark; 21.05.2013