1

我正在构建一个简单的测试 android 应用程序,我试图在其中获取有关特定视频的数据。我已经获取了我的调试密钥库的 SHA1 指纹,并用它(和我的包名称)创建了一个 google api 密钥。我已经为它激活了 youtube api 服务。

这是我的代码:

YouTube youtube = new YouTube.Builder(new NetHttpTransport(), new GsonFactory(), new HttpRequestInitializer() {
    public void initialize(HttpRequest request) throws IOException {}
}).setApplicationName("MyApp").build();

try {
    YouTube.Videos.List listVideosRequest = youtube.videos().list("snippet,contentDetails");
    listVideosRequest.setId("A3PDXmYoF5U");
    listVideosRequest.setKey(GoogleAPIKey.DEBUG_GOOGLE_API_KEY);
    VideoListResponse youtubeResponse = listVideosRequest.execute();

    List<Video> youtubeVideos = youtubeResponse.getItems();

    return youtubeVideos;

} catch (IOException e) {
    Log.e("MyApp", e.getLocalizedMessage());
    return null;
}

所以,我总是得到一个例外:403,未配置访问。

我的想法不多了,可能是什么问题。有人用 api 密钥成功地使用了 youtube api for android 吗?

更新:

我只是深入调试了谷歌库,以便找到发送给谷歌的实际请求是什么样的。它是这个:

https://www.googleapis.com/youtube/v3/videos?id=A3PDXmYoF5U&key=[my-debug-google-api-key]&part=snippet,contentDetails

设置这些标题:

Accept-Encoding: gzip
User-Agent: MyApp Google-HTTP-Java-Client/1.15.0-rc (gzip)

我看不出有什么问题。

4

1 回答 1

0

好的,经过大量阅读后,我发现了这个谷歌文档

您必须为每个插入、更新和删除请求发送一个授权令牌。您还必须为检索经过身份验证的用户的私人数据的任何请求发送授权令牌。

此外,一些用于检索资源的 API 方法可能支持需要授权的参数,或者在请求被授权时可能包含额外的元数据。例如,如果请求由特定用户授权,则检索用户上传视频的请求也可能包含私人视频。

所以结论很简单——您应该只使用 API 密钥来读取非私有数据,而视频也可能是私有的。在我的情况下,我尝试Channels匿名加载 - 它仅在我请求时有效channel_id。当我请求 contentDetails (包含上传链接)时 - 我也遇到了 403 错误。

于 2013-09-09T13:08:05.997 回答