在本教程中,我将介绍Google的YouTube API ,该API可让您使用YouTube的功能来启用应用程序。 YouTube是“杀手级”互联网应用程序之一,其流量占互联网总流量的很大一部分。
在开始之前,请确保您已阅读《 API概述指南》 。 我们将主要处理Data API ,它使您可以执行YouTube网站上的许多操作(搜索视频,检索标准供稿,查看相关内容等)。
该API有多种编程语言,我们将在本教程中使用Java。 阅读Java Developer's Guide以获得第一个想法。 还要为Google Data API JavaDoc页面添加书签。
让我们准备开发环境。 首先,从相应的下载部分下载GData Java客户端 。 我将在本教程中使用1.41.2版本 。 请注意,还有一个版本2,但根据站点的情况,它是实验性的,与版本1不兼容。
解压缩压缩文件,找到文件夹“ gdata \ java \ lib”,并将以下JAR包含到应用程序的类路径中:
- 数据客户端1.0.jar
- gdata-youtube-2.0.jar
- gdata-core-1.0.jar
- gdata-media-1.0.jar
接下来,我们必须照顾依赖性。 依赖包列表可以在这里找到。
- 包含JavaMail API以提供媒体支持。 可以在这里下载。 需要“ mail.jar”。
- GData客户端还在内部使用Google Collections Library 。 我下载了1.0最终版本 。 需要“ google-collect-1.0.jar”。
确保上述所有JAR文件都包含在项目的类路径中。
请注意,所有公共提要都是只读的,不需要任何身份验证。 另一方面,已验证的操作是那些包括检索私人供稿(例如用户的收件箱供稿)以及写入,上载,更新和删除操作的操作。 您将需要注册开发人员密钥才能执行经过身份验证的操作。 但是,本教程不需要密钥。
现在基础架构已经准备就绪,让我们来谈谈API。 我们将使用的主要类是YouTubeService类。 这使您可以执行与浏览YouTube网页时类似的搜索查询。 每个查询均由YouTubeQuery实例表示。 每个查询的结果(如果有)以VideoFeed对象的形式出现。
从每个提要中,可以检索许多VideoEntry对象。 从VideoEntry中,我们提取一个YoutTubeMediaGroup对象。 您可以将此类想象为媒体信息的占位符(请参阅“ Media RSS”规范 )。 然后,我们检索相应的MediaPlayer ,最后检索播放器URL。 我们还可以通过MediaThumbnail类获取有关随附缩略图的信息。
让我们开始使用代码。 首先,我们创建两个模型类,这些类将用于保存有关提要和视频的信息。 第一个称为YouTubeMedia,它包含媒体内容URL和媒体内容类型。 第二个名为YouTubeVideo,其中包含有关特定视频的所有信息(URL,嵌入式播放器URL,缩略图和YoutTubeMedia实例)。 这些的源代码如下:
package com.javacodegeeks.youtube.model;
public class YouTubeMedia {
private String location;
private String type;
public YouTubeMedia(String location, String type) {
super();
this.location = location;
this.type = type;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package com.javacodegeeks.youtube.model;
import java.util.List;
public class YouTubeVideo {
private List<String> thumbnails;
private List<YouTubeMedia> medias;
private String webPlayerUrl;
private String embeddedWebPlayerUrl;
public List<String> getThumbnails() {
return thumbnails;
}
public void setThumbnails(List<String> thumbnails) {
this.thumbnails = thumbnails;
}
public List<YouTubeMedia> getMedias() {
return medias;
}
public void setMedias(List<YouTubeMedia> medias) {
this.medias = medias;
}
public String getWebPlayerUrl() {
return webPlayerUrl;
}
public void setWebPlayerUrl(String webPlayerUrl) {
this.webPlayerUrl = webPlayerUrl;
}
public String getEmbeddedWebPlayerUrl() {
return embeddedWebPlayerUrl;
}
public void setEmbeddedWebPlayerUrl(String embeddedWebPlayerUrl) {
this.embeddedWebPlayerUrl = embeddedWebPlayerUrl;
}
public String retrieveHttpLocation() {
if (medias==null || medias.isEmpty()) {
return null;
}
for (YouTubeMedia media : medias) {
String location = media.getLocation();
if (location.startsWith("http")) {
return location;
}
}
return null;
}
}
最后,介绍了YouTubeManager类。 它可用于执行搜索查询,并返回YouTubeVideo模型类的实例以及所有相关信息。 它还会创建适当的嵌入式Web播放器URL 。 这是该类的代码:
package com.javacodegeeks.youtube;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
import com.google.gdata.client.youtube.YouTubeQuery;
import com.google.gdata.client.youtube.YouTubeService;
import com.google.gdata.data.media.mediarss.MediaThumbnail;
import com.google.gdata.data.youtube.VideoEntry;
import com.google.gdata.data.youtube.VideoFeed;
import com.google.gdata.data.youtube.YouTubeMediaContent;
import com.google.gdata.data.youtube.YouTubeMediaGroup;
import com.javacodegeeks.youtube.model.YouTubeMedia;
import com.javacodegeeks.youtube.model.YouTubeVideo;
public class YouTubeManager {
private static final String YOUTUBE_URL = "http://gdata.youtube.com/feeds/api/videos";
private static final String YOUTUBE_EMBEDDED_URL = "http://www.youtube.com/v/";
private String clientID;
public YouTubeManager(String clientID) {
this.clientID = clientID;
}
public List<YouTubeVideo> retrieveVideos(String textQuery, int maxResults, boolean filter, int timeout) throws Exception {
YouTubeService service = new YouTubeService(clientID);
service.setConnectTimeout(timeout); // millis
YouTubeQuery query = new YouTubeQuery(new URL(YOUTUBE_URL));
query.setOrderBy(YouTubeQuery.OrderBy.VIEW_COUNT);
query.setFullTextQuery(textQuery);
query.setSafeSearch(YouTubeQuery.SafeSearch.NONE);
query.setMaxResults(maxResults);
VideoFeed videoFeed = service.query(query, VideoFeed.class);
List<VideoEntry> videos = videoFeed.getEntries();
return convertVideos(videos);
}
private List<YouTubeVideo> convertVideos(List<VideoEntry> videos) {
List<YouTubeVideo> youtubeVideosList = new LinkedList<YouTubeVideo>();
for (VideoEntry videoEntry : videos) {
YouTubeVideo ytv = new YouTubeVideo();
YouTubeMediaGroup mediaGroup = videoEntry.getMediaGroup();
String webPlayerUrl = mediaGroup.getPlayer().getUrl();
ytv.setWebPlayerUrl(webPlayerUrl);
String query = "?v=";
int index = webPlayerUrl.indexOf(query);
String embeddedWebPlayerUrl = webPlayerUrl.substring(index+query.length());
embeddedWebPlayerUrl = YOUTUBE_EMBEDDED_URL + embeddedWebPlayerUrl;
ytv.setEmbeddedWebPlayerUrl(embeddedWebPlayerUrl);
List<String> thumbnails = new LinkedList<String>();
for (MediaThumbnail mediaThumbnail : mediaGroup.getThumbnails()) {
thumbnails.add(mediaThumbnail.getUrl());
}
ytv.setThumbnails(thumbnails);
List<YouTubeMedia> medias = new LinkedList<YouTubeMedia>();
for (YouTubeMediaContent mediaContent : mediaGroup.getYouTubeContents()) {
medias.add(new YouTubeMedia(mediaContent.getUrl(), mediaContent.getType()));
}
ytv.setMedias(medias);
youtubeVideosList.add(ytv);
}
return youtubeVideosList;
}
}
为了测试我们的类,并提供一个示例案例,我们创建以下简单的测试类:
package com.javacodegeeks.youtube.test;
import java.util.List;
import com.javacodegeeks.youtube.YouTubeManager;
import com.javacodegeeks.youtube.model.YouTubeVideo;
public class YouTubeTester {
public static void main(String[] args) throws Exception {
String clientID = "JavaCodeGeeks";
String textQuery = "java code";
int maxResults = 10;
boolean filter = true;
int timeout = 2000;
YouTubeManager ym = new YouTubeManager(clientID);
List<YouTubeVideo> videos = ym.retrieveVideos(textQuery, maxResults, filter, timeout);
for (YouTubeVideo youtubeVideo : videos) {
System.out.println(youtubeVideo.getWebPlayerUrl());
System.out.println("Thumbnails");
for (String thumbnail : youtubeVideo.getThumbnails()) {
System.out.println("\t" + thumbnail);
}
System.out.println(youtubeVideo.getEmbeddedWebPlayerUrl());
System.out.println("************************************");
}
}
}
可以从此处下载本教程的Eclipse项目,包括依赖库。
请享用!
- GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
- SmartGWT入门,提供出色的GWT界面
- 带有Spring和Maven教程的JAX–WS
- 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
- Java教程和Android教程列表
翻译自: https://www.javacodegeeks.com/2010/05/getting-started-with-youtube-java-api.html