我正在尝试使用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;
}
答案 0 :(得分:2)
我假设POST实际上并没有成功。
如果我不得不从查看代码中猜测,我认为问题可能是Authorization
标头值。 myAuthToken
看起来是什么样的,它是什么类型的令牌?例如,如果它是OAuth 2令牌,则值必须为Bearer TOKEN_VALUE
,而不仅仅是TOKEN_VALUE
。
此外,请注意v3 of the YouTube Data API将在不久的将来发布,它将使用新的Google APIs Client Library for Java在Android上提供更好的支持。
答案 1 :(得分:1)
我已经整理了一个示例Android应用程序,该应用程序使用YouTube Data v3 API来演示如何将播放列表加载到ListView中。
https://github.com/akoscz/YouTubePlaylist
请注意,您必须拥有有效的API密钥才能使此示例应用程序正常工作。您可以使用Google Developer Console注册申请,并启用YouTube数据API。您需要注册Web应用程序而不是Android应用程序,因为此示例应用程序使用的API密钥是“浏览器密钥”。