Youtube上传的视频列表。 FileNotFound错误

时间:2017-05-13 07:37:26

标签: android youtube-api android-youtube-api youtube-data-api

我正在尝试使用以下

获取在我的YouTube频道上传的视频列表

https://www.googleapis.com/youtube/v3/search?part=snippet&channelId {MY_CHANNEL_ID}&安培;的maxResults = 50&安培;关键= {} MY_APP_ID

我已在Google App Console中创建了应用并为其生成了APP ID。但是当我试图通过我的Android应用程序访问它时会出现java.io.FileNotFoundException错误

我也给了应用程序标识符和SHA1,如果我尝试通过Web浏览器键访问而没有任何其他约束它运行良好并返回所有视频列表但是在Android的情况下它不起作用。

@Override
    protected String doInBackground(Void... voids) {

        HttpURLConnection urlConnection = null;

        String urlString = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCrF362wkcVnjqqPRsSEzvgg&maxResults=50&key=AIzaSyAiAFjZb1eVdRxVWnymrhuAb1iDlmYupu8";
        //urlString = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=PLTqSMwQKOhUhl7gm7h6YwX6XPYr0ViBtu&key=AIzaSyAiAFjZb1eVdRxVWnymrhuAb1iDlmYupu8";

        String jsonString = new String();

        URL url = null;
        try {
            url = new URL(urlString);

        urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection.setRequestMethod("GET");
        urlConnection.setReadTimeout(10000 /* milliseconds */);
        urlConnection.setConnectTimeout(15000 /* milliseconds */);

        urlConnection.setDoOutput(true);

        urlConnection.connect();

        BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream()));

        char[] buffer = new char[1024];

        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line+"\n");
        }
        br.close();

        jsonString = sb.toString();

        System.out.println("JSON: " + jsonString);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return jsonString;
    }

错误记录

BasicNetwork.performRequest: Unexpected response code 403 for https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCrF362wkcVnjqqPRsSEzvgg&maxResults=50&key=AIzaSyAiAFjZb1eVdRxVWnymrhuAb1iDlmYupu8
05-13 15:28:26.607 19118-19151/com.jeevanmulmantra W/System.err: java.io.FileNotFoundException: https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCrF362wkcVnjqqPRsSEzvgg&maxResults=50&key=AIzaSyAiAFjZb1eVdRxVWnymrhuAb1iDlmYupu8

enter image description here

3 个答案:

答案 0 :(得分:3)

不看你的API控制台设置,我不能肯定地说。但是从查看HTTP响应看,您的IP地址可能会被Google授权服务器阻止。因此,它会向您发送未经授权的请求HTTP状态代码403。

转到API Console并从密钥限制部分下选择单选按钮。然后再试一次。它应该工作。

答案 1 :(得分:0)

这不是你要求的,但我会分享我的经验。

几个月前我也有过类似的情况。在线搜索我得出结论,Android的YouTube api选项不起作用。我最终为我的开发提供了一个更方便的解决方案:

我获得了一个网站的YT api密钥并将其绑定到相应的域。

我创建了一个php文件,使用服务器上的curl和cron作业设置,每天两次从youtube获取播放列表。然后将json格式的播放列表文件写入Web服务器(每天刷新两次)。

Android应用程序连接到我的服务器整数YT并获得"缓存" json从那里播放名单。

此选项大大减少了对配额消费的影响,因为播放列表的所有匹配都会转到网站。

如果您对此选项感兴趣,我可以分享用于获取播放列表的php。

答案 2 :(得分:0)

我遇到了同样的问题,只是重新生成另一个密钥,并再次使用Android Studio中的程序包名称和SHA1对其进行限制。它与旧密钥不兼容,无法重新生成密钥并再次对其进行限制。