我的服务器将videoID列表发送给Android。现在,我想在列表视图中显示这些视频的标题,缩略图和评论数量。我在网上使用GET请求https://www.googleapis.com/youtube/v3/videos?part=snippet&id={VIDEO_ID}&key={YOUR_API_KEY}
完成了此操作但是如何在Android中执行此操作?是否有任何YouTube SDK来初始化YouTube对象?如何使用VideoID从YouTube检索此信息?
编辑:我已经找到了使用YouTube Data API Client Library for Java的方法,但它没有任何解释就给出了运行时错误。
这是我使用的代码
/**
* Define a global instance of a Youtube object, which will be used
* to make YouTube Data API requests.
*/
private static YouTube youtube;
youtube = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer(){
public void initialize(com.google.api.client.http.HttpRequest request) throws IOException {
}
}).setApplicationName("youtube-cmdline-search-sample").build();
// Call the YouTube Data API's videos.list method to retrieve videos.
VideoListResponse videoListResponse = youtube.videos().
list("snippet").setId(videoId).execute();
// Since the API request specified a unique video ID, the API
// response should return exactly one video. If the response does
// not contain a video, then the specified video ID was not found.
List<Video> videoList = videoListResponse.getItems();
if (videoList.isEmpty()) {
System.out.println("Can't find a video with ID: " + videoId);
return;
}
Video video = videoList.get(0)
// Print information from the API response.
}
答案 0 :(得分:1)
YouTube提供(至少)两个与您的问题相关的官方图书馆:
顾名思义,第一个库是专为Android平台开发的。它的重点是通过提供播放器框架,使您能够将视频播放功能整合到应用程序中。如果您的目标是让用户只是简单地播放YouTube视频,那么最简单的方法就是实施。请注意,此库需要在设备上安装官方YouTube应用。
第二个库更通用(虽然有separate instructions for using it on Android)并提供了围绕YouTube的Data API的包装,以便更轻松地与它进行交互。因此,它允许您基本上完成您也可以使用Web API执行的所有操作。因此,它解决了与Android Player API不同的问题,如果您想要完全控制在自己的UI中显示视频数据的方式,则更有可能实现这一目标。
您的第三个选择是完成您为基于Web的解决方案所做的工作:自己进行API调用,解析响应并将相关数据绑定到UI组件。各种网络库(即Retrofit)可以大大简化这一过程。
答案 1 :(得分:1)
参考我的帖子here。我只是为我的项目尝试了这个方法,它的工作非常好。 您不需要上述代码或任何google api jar导入。只需用您的HTTP请求替换HTTP请求。
输出以JSON形式返回,您可以使用JSON解析器jar来检索您可能需要的标题,缩略图和其他详细信息,正如我在答案中所述。
答案 2 :(得分:0)
试试这个:
protected void requestYoutubeVideos(String text) {
try {
youtube = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() {
public void initialize(HttpRequest request) throws IOException {
}
}).setApplicationName("My app name").build();
// Define the API request for retrieving search results.
YouTube.Search.List query = youtube.search().list("id");
// Set your developer key from the Google Cloud Console for
// non-authenticated requests. See:
// https://cloud.google.com/console
query.setKey(YOUTUBE_API_KEY);
query.setQ(text);
query.setMaxResults(NUMBER_OF_VIDEOS_RETURNED);
// To increase efficiency, only retrieve the fields that the
// application uses.
query.setFields("items(id)");
query.setOrder("viewCount");
// Restrict the search results to only include videos. See:
// https://developers.google.com/youtube/v3/docs/search/list#type
query.setType("video");
SearchListResponse searchResponse = query.execute();
List<SearchResult> list = searchResponse.getItems();
Log.e("Youtube search", "list ===> " + list);
//Get Info for each video id
for (SearchResult video: list) {
youtubeList.add(video);
YouTube.Videos.List query2 = youtube.videos().list("id,contentDetails,snippet,statistics").setId(video.getId().getVideoId());
query2.setKey(YOUTUBE_API_KEY);
query2.setMaxResults((long) 1);
query2.setFields("items(id,contentDetails,snippet,statistics)");
VideoListResponse searchResponse2 = query2.execute();
List<Video> listEachVideo = searchResponse2.getItems();
Video eachVideo = listEachVideo.get(0);
}
} catch (GoogleJsonResponseException e) {
Log.e("Youtube search", "There was a service error: " + e.getDetails().getCode() + " : "
+ e.getDetails().getMessage());
} catch (IOException e) {
Log.e("Youtube search", "There was an IO error: " + e.getCause() + " : " + e.getMessage());
} catch (Throwable t) {
t.printStackTrace();
}
}
并且不要忘记从另一个线程中调用它:
new Thread(new Runnable() {
@Override
public void run() {
try {
requestYoutubeVideos("Harry el Sucio Potter");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}).start();