【问题标题】:Creating a playlist with Youtube DATA API on Android在 Android 上使用 Youtube DATA API 创建播放列表
【发布时间】:2012-10-24 12:24:39
【问题描述】:

我正在尝试使用 Youtube GDATA API 向 youtube 帐户添加新的播放列表。 我的代码基于文档:https://developers.google.com/youtube/2.0/developers_guide_protocol_playlists#Adding_a_playlist

我首先获得一个访问令牌并适当地使用我的开发人员密钥。 该帖子似乎工作得很好,但是在尝试取回响应时,我在调用 getInputStream 时遇到了一个未找到文件的异常。

有人有想法吗? 谢谢

这是连接代码(更新的清洁版):

@Override
protected Boolean doInBackground(Void... arg0) {
    BufferedReader input = null;
    InputStreamReader inputStreamReader = null;
    StringBuilder postContentXml = new StringBuilder();

    postContentXml.append("<?xml version='1.0' encoding='UTF-8'?>").
        append("<entry xmlns='http://www.w3.org/2005/Atom'") .
        append(" xmlns:yt='http://gdata.youtube.com/schemas/2007'>").
        append("<title type='text'>Sports Highlights Playlist</title>").
        append("<summary>A selection of sports highlights</summary>").
        append("</entry>");

    byte[] buffer = postContentXml.toString().getBytes();
    StringBuilder response = new StringBuilder();

    try {
        URL url = new URL("https://gdata.youtube.com/feeds/api/users/default/playlists");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        // Initialize connection parameters
        urlConnection.setConnectTimeout(30000);
        urlConnection.setReadTimeout(30000);
        urlConnection.setDoOutput(true);
        urlConnection.setRequestMethod("POST");

        // Headers initialization
        urlConnection.setRequestProperty("Content-Type", "application/atom+xml");
        urlConnection.setRequestProperty("Content-Length", String.valueOf(buffer.length));
        urlConnection.setRequestProperty("Authorization", mAuthToken);
        urlConnection.setRequestProperty("GData-Version", "2");
        urlConnection.setRequestProperty("X-GData-Key", YoutubeUtils.getDevKey());

        OutputStream os = urlConnection.getOutputStream();
        os.write(buffer, 0, buffer.length);
        os.flush();
        os.close();

        InputStream inputStream = urlConnection.getInputStream();

        inputStreamReader = new InputStreamReader(inputStream, "UTF-8");


        input = new BufferedReader(inputStreamReader, 4096);

        String strLine = null;
        while ((strLine = input.readLine()) != null) {
            response.append(strLine);
        }

        input.close();
        inputStreamReader.close();
        inputStream.close();
        urlConnection.disconnect();

        Log.d("CreatePlaylistTask", "Response: " + response);
    }
    catch(Exception e) {
        Log.d("CreatePlaylistTask", "Error occured: " + e.getMessage());
    }

    return true;
}

【问题讨论】:

    标签: android youtube-api


    【解决方案1】:

    我假设 POST 实际上并不成功。

    如果我必须通过查看您的代码来猜测,我认为问题可能出在 Authorization 标头值上。 myAuthToken 是什么样的,它是什么类型的令牌?例如,如果它是 OAuth 2 令牌,则值必须是 Bearer TOKEN_VALUE,而不仅仅是 TOKEN_VALUE。

    另外,请注意v3 of the YouTube Data API 将在不久的将来发布,它将使用新的Google APIs Client Library for Java 为Android 提供更好的支持。

    【讨论】:

    • 当然,你是对的 :) 感谢 Jeff 的快速回复。 POST 失败并返回 403 响应。我没有注意到这个 API 可能只返回一个状态结果,而不是一个完整的 XML 或 JSON 响应。我使用 Android 的 AccountManager getAuthToken 函数获取令牌,包括重新验证令牌,但没有成功。我已经包括了持有人,但它没有用。最终,正如您所说,我确实遇到了 Google APIs 客户端库,其中包括最近 3 月的一个不错的 Google IO 视频。我会尽快尝试使用它。
    • 顺便说一句,如果您提到数据 API 即将发布,您能否详细介绍一下 6 月推出的 Android 原生 embed API 的状态。我似乎在网络上的任何地方都找不到任何时间框架参考。我不想使用非法的直接流嵌入,并且使用 IFrame 嵌入 API 有很多缺陷和错误:(
    • 数据 API 即将公开。原生 Android YouTube Player API 的发布需要更长的时间,但不会太长。 (抱歉,我无法更具体。)
    【解决方案2】:

    我整理了一个示例 Android 应用程序,它使用 YouTube Data v3 API 来演示如何将播放列表加载到 ListView 中。

    https://github.com/akoscz/YouTubePlaylist

    请注意,您必须拥有有效的 API 密钥,此示例应用程序才能运行。您可以使用 Google Developer Console 注册您的应用程序并启用 YouTube 数据 API。您需要注册 Web 应用程序而不是 Android 应用程序,因为此示例应用程序使用的 API 密钥是“浏览器密钥”。

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 2017-11-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2013-09-19
      • 2018-10-21
      • 2015-02-14
      相关资源
      最近更新 更多