0

我们仍在使用 V2 YouTube API。授权用户后,我有以下代码。

$token = Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token'], $client->getHttpClient());
$youTubeService = $this->Youtube->_getClient($token);
$profile = $youTubeService->getUserProfile('default');
$username = $profile->getUsername()->getText();

但是,这不会返回有效的用户名。它返回一串乱码,例如“HV1lXoWFbpKgumhGZxurEg”

我究竟做错了什么?如何获取用户的实际用户名?我需要它来确定用户频道 URL。将返回的用户名添加到以下 URL 会出现 Invalid Username 错误

http://www.youtube.com/profile_videos?user=HV1lXoWFbpKgumhGZxurEg

4

1 回答 1

1

并非每个帐户都有唯一的用户名,您不应依赖用户名,而应依赖频道 ID。

来自API 文档

对于使用旧版 Data API v2 的开发人员来说,最大的收获是您必须意识到并非每个 YouTube 频道都有唯一的用户名。幸运的是,每个 YouTube 频道都保证有一个与之关联的唯一频道 ID,由<yt:channelId>标签中的值表示,我们建议开发人员使用该值而不是用户名。例如,如果您有一个将 YouTube 用户名映射到有关该频道的信息的数据库,那么您的旧条目应该可以继续工作。(现有频道不会丢失其用户名。)但是,随着时间的推移,您将越来越可能不得不使用无法由用户名唯一标识的频道。

有几个因素简化了从用户名到频道 ID 的转换。首先,Data API v2 接受 YouTube 用户名的请求 URL 中的频道 ID,这意味着您可以将频道 ID 无缝地交换到现有代码中。例如,由于 UC_x5XG1OV2P6uZZ5FSM9Ttw 是具有旧用户名 GoogleDevelopers 的频道的频道 ID,因此以下两个 URL 是等效的 API 请求:

https://gdata.youtube.com/feeds/api/users/GoogleDevelopers?v=2.1 https://gdata.youtube.com/feeds/api/users/UC_x5XG1OV2P6uZZ5FSM9Ttw?v=2.1

要记住的另一件事是,每当您发出经过身份验证的 v2 请求时,您在构建请求 URL 时永远不需要包含授权通道的用户名。您始终可以使用默认值代替用户名(或频道 ID)。因此,如果您想检索当前授权用户的视频上传供稿,例如,您可以在https://gdata.youtube.com/feeds/api/users/default/uploads?v=2.1上执行此操作。

于 2013-06-05T16:20:48.537 回答