如何通过视频名称获取YouTube视频ID?

时间:2017-07-06 21:44:30

标签: android android-studio youtube-api httpurlconnection

我正在开发一个Android应用,我正在尝试使用视频名称(YouTubePlayerYouTubeBaceActivity)显示YouTube视频。

如果我有视频ID,我可以显示视频,但我不知道如何仅使用视频名称来显示视频。

我尝试使用HttoUrlConnaction输入:

https://www.googleapis.com/youtube/v3/search?part=snippet&q=<MOVIE_NAME>&type=video&key=<APIKEY>

但由于某些原因它无法正常工作并返回FileNotFoundException,即使它在google中输入网址时有效...

那么我该如何获取视频ID,或者如何仅使用视频名称获取视频?

谢谢!

2 个答案:

答案 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);
}

//-------------------------------------------------------------------