2016-08-25 85 views
1

这是我在这里看到的一个代码,它使用视频ID从youtube获取单个视频的数据。但是,我似乎无法从URL中获得“标题”。它在我的浏览器中工作,但在我正在开发的android应用程序中,它没有。代码有什么问题?如何从此API提取“标题”?

private class RequestTask extends AsyncTask<String, String, String> { 
    // make a request to the specified url 
    @Override 
    protected String doInBackground(String... uri) { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response; 
     String responseString = null; 
     try { 
      // make a HTTP request 
      response = httpclient.execute(new HttpGet(uri[0])); 
      StatusLine statusLine = response.getStatusLine(); 
      if (statusLine.getStatusCode() == HttpStatus.SC_OK) { 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       response.getEntity().writeTo(out); 
       out.close(); 
       responseString = out.toString(); 
      } else { 
       // close connection 
       response.getEntity().getContent().close(); 
       throw new IOException(statusLine.getReasonPhrase()); 
      } 
     } catch (Exception e) { 
      Log.d("Test", "Couldn't make a successful request!"); 
     } 
     return responseString; 
    } 

    @Override 
    protected void onPostExecute(String response) { 
     super.onPostExecute(response); 

     try { 
      // convert the String response to a JSON object 
      JSONObject jsonResponse = new JSONObject(response); 
      Toast.makeText(getActivity(), jsonResponse.getString("title"), Toast.LENGTH_SHORT).show(); 

      // fetch the array of movies in the response 
      JSONArray jArray = jsonResponse.getJSONArray("movies"); 


     } catch (JSONException e) { 
      Log.d("Test", "Couldn't successfully parse the JSON response!"); 
     } 
    } 
} 

这里顺便API,

https://www.googleapis.com/youtube/v3/videos?id=P3mAtvs5Elc&key=<INSERT_API_SERVER_KEY_HERE>&fields=items(id,snippet(description,channelId,title,categoryId),statistics)&part=snippet,statistics 
+0

而不是'jsonResponse.getString(“title”)'尝试使用'js onResponse.getJSONObject( “标题”)。的toString()'。 –

+0

将您的回复记录为日志。发布您收到的回复或异常。 –

回答

1

下面是YouTube的API响应会怎么看起来像:

{ 
"kind": "youtube#videoListResponse", 
"etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", 
"videos": [ 
    { 
    "id": "7lCDEYXw3mM", 
    "kind": "youtube#video", 
    "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", 
    "snippet": { 
    "publishedAt": "2012-06-20T22:45:24.000Z", 
    "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", 
    "title": "Google I/O 101: Q&A On Using Google APIs", 
    "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", 
    "thumbnails": { 
    "default": { 
     "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" 
    }, 
    "medium": { 
     "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" 
    }, 
    "high": { 
     "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" 
    } 
    }, 
    "categoryId": "28" 
    }, 
    "contentDetails": { 
    "duration": "PT15M51S", 
    "aspectRatio": "RATIO_16_9" 
    }, 
    "statistics": { 
    "viewCount": "3057", 
    "likeCount": "25", 
    "dislikeCount": "0", 
    "favoriteCount": "17", 
    "commentCount": "12" 
    }, 
    "status": { 
    "uploadStatus": "STATUS_PROCESSED", 
    "privacyStatus": "PRIVACY_PUBLIC" 
    } 
    } 
] 
} 

要获得下面的代码的视频使用标题:

JSONObject responseObject = new JSONObject(response); 
JSONArray videosArray = jsonObject.getJSONArray("videos"); 
JSONObject videoObject = videosArray.getJSONObject(0); //Pointing to first video 
JSONObject snippetObject = videoObject.getJSONObject("snippet"); 
String title = snippetObject.getString("title");