2013-05-18 2 views
2

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

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/ 

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

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

ответ

0

Единственный способ, которым я смог это сделать, - использовать v2 API вместо 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 для получения дополнительной информации.

+0

Спасибо. Это поможет, указав полный URL-адрес и имя пользователя. Мне все равно нужно получить полный список всех каналов, принадлежащих пользователю.Будет ли это предоставлять полный список, когда канал пользователя связан с учетной записью или страницей Google+? – user2170704

+0

AFIK, существует взаимно однозначное отношение между каналом YouTube и логином пользователя. Это означает, что в списке каналов всегда будет один элемент. Если, конечно, ваша учетная запись YT не является учетной записью YT-CMS (думаю, NBC или BBC). У меня нет опыта работы с учетными записями YT-CMS, поэтому извиняюсь за то, что не смог помочь в этом отношении. – PocketLogic

2

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

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