我正在开发一个Android应用,我正在尝试使用视频名称(YouTubePlayer
和YouTubeBaceActivity
)显示YouTube视频。
如果我有视频ID,我可以显示视频,但我不知道如何仅使用视频名称来显示视频。
我尝试使用HttoUrlConnaction
输入:
https://www.googleapis.com/youtube/v3/search?part=snippet&q=<MOVIE_NAME>&type=video&key=<APIKEY>
但由于某些原因它无法正常工作并返回FileNotFoundException
,即使它在google中输入网址时有效...
那么我该如何获取视频ID,或者如何仅使用视频名称获取视频?
谢谢!
答案 0 :(得分:0)
您可以找到如何获取视频ID或视频列表here。他们拥有youtube API调用所需的所有请求信息。
至于为什么你在获取你的FileNotFoundException时,即使它在google中键入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}
答案 1 :(得分:0)
假设您从端点返回JSON。如果是这种情况,那么您可以简单地指向此端点并解析JSON以获取最终可以在视图上呈现的相应URL。 (参考以下示例)。
您可以使用Volley库或Retrofit库来处理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);
}
//-------------------------------------------------------------------