YouTubeProfile-> getUsername()返回乱码

时间:2013-06-05 15:39:40

标签: youtube-api

我们仍在使用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的用户名会出现“无效用户名”错误

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

1 个答案:

答案 0 :(得分:1)

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

来自API documents

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

有几个因素简化了从用户名到渠道ID的转换。首先,Data API v2接受请求网址中的频道ID,只要它接受YouTube用户名,这意味着您可以将频道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时都不需要包含授权通道的用户名。您始终可以使用值default来代替用户名(或通道ID)。因此,如果您要为当前授权的用户检索视频上传Feed,则可以在https://gdata.youtube.com/feeds/api/users/default/uploads?v=2.1处执行此操作。