我正在开发一个安卓应用程序,我正在尝试使用视频名称(带YouTubePlayer
和YouTubeBaceActivity
(显示YouTube视频。
如果我有视频 ID,我可以显示视频,但我不知道如何仅使用视频名称显示视频。
我尝试通过输入来使用HttoUrlConnaction
:
https://www.googleapis.com/youtube/v3/search?part=snippet&q=<MOVIE_NAME>&type=video&key=<APIKEY>
但由于某种原因它不起作用并返回FileNotFoundException
即使我在谷歌中输入 URL 时它有效......
那么如何获取视频ID,或者如何仅获取视频名称的视频?
谢谢!
您可以在此处找到如何获取视频 ID 或视频列表。他们拥有您的 youtube API 调用所需的所有请求信息。
至于为什么你会得到你的FileNotFoundException,即使当你在谷歌中输入URL时它也能工作,通常当开发人员忘记添加他们的oAuthToken作为其标头的一部分时,就会出现此问题,或者简单明了 - 网址是错误的
使用 HttpURLConnection,下面是如何使用 .setRequestProperty(( 方法设置请求标头的示例。
HttpURLConnection urlConnection = null;
String response = null;
try{
//Create connection
String url = requestURL;
URL u = new URL(url);
urlConnection = (HttpURLConnection) u.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("Authorization", youtubeAuthToken);
//Get Response, etc ,etc}
假设您正在从端点返回 JSON。如果是这种情况,则只需指向此终结点并分析 JSON 即可获取最终可以在视图上呈现的相应 URL。(请参阅以下示例(。
您可以使用 Volley 库或改造库来处理 HTTP 请求。
//-----------------------------------------------------------------------
private static final String endpoint = "http://api.youtube.********/json/videos.json";
//*************************************
//** JSON Video Output from Endpoint
//*************************************
[{
"name": "Rocky V",
"url": {
"small": "http://www.youtube.com/watch?v=VA770wpLX-Q&feature=youtube_gdata_player",
"medium": "http://www.youtube.com/watch?v=VA770wpLX-Q&feature=youtube_gdata_player",
"large": "http://www.youtube.com/watch?v=VA770wpLX-Q&feature=youtube_gdata_player"
},
"timestamp": "February 1, 2012"
},
{
"name": "Rambo",
"url": {
"small": "http://www.youtube.com/watch?v=VA770wpLX-Q&feature=youtube_gdata_player",
"medium": "http://www.youtube.com/watch?v=VA770wpLX-Q&feature=youtube_gdata_player",
"large": "http://www.youtube.com/watch?v=VA770wpLX-Q&feature=youtube_gdata_player"
},
"timestamp": "March 5, 2014"
}]
//*************************************
//** Parse JSON to Fetch Videos
//*************************************
private void fetchVideos() {
JsonArrayRequest req = new JsonArrayRequest(endpoint,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
videos.clear();
for (int i = 0; i < response.length(); i++) {
try {
JSONObject object = response.getJSONObject(i);
Video video = new Video();
video.setName(object.getString("name"));
JSONObject url = object.getJSONObject("url");
video.setSmall(url.getString("small"));
video.setMedium(url.getString("medium"));
video.setLarge(url.getString("large"));
video.setTimestamp(object.getString("timestamp"));
videos.add(video);
} catch (JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
}
}
mAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Error: " + error.getMessage());
//pDialog.hide();
}
});
// Adding request to request queue
Application.getInstance().addToRequestQueue(req);
}
//-------------------------------------------------------------------