【问题标题】:How to get YouTube video Id by the video name?如何通过视频名称获取 YouTube 视频 ID?
【发布时间】:2017-07-06 21:44:29
【问题描述】:

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

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

我尝试通过输入使用HttoUrlConnaction

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

但由于某种原因它不起作用并返回FileNotFoundException,即使当我在谷歌中键入 URL 时它仍然有效...

那么如何获取视频ID,或者如何仅获取视频名称的视频?

谢谢!

【问题讨论】:

    标签: android android-studio youtube-api httpurlconnection


    【解决方案1】:

    您可以找到如何获取视频 ID 或视频列表 here。他们拥有您的 youtube API 调用所需的所有请求信息。

    至于为什么你在谷歌中输入 URL 时得到 FileNotFoundException,即使它起作用,通常当开发人员忘记将他们的 oAuthToken 添加为标题的一部分,或者简单明了时,就会出现这个问题 - url错了
    使用 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}
    

    【讨论】:

      【解决方案2】:

      我假设您正在从端点返回 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);
      }
      
      //-------------------------------------------------------------------
      

      【讨论】:

        猜你喜欢
        • 2014-08-16
        • 2020-11-26
        • 2023-03-17
        • 2016-09-28
        • 1970-01-01
        • 2022-08-17
        • 2017-10-09
        • 2019-12-07
        • 1970-01-01
        相关资源
        最近更新 更多