YouTube Java API入门

在本教程中,我将介绍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); // millisYouTubeQuery 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ServletContext图解

servlet之间共享数据资源&#xff01; 转载于:https://www.cnblogs.com/felixzh/p/4615902.html

Linux自动化安装cobbler

1介绍 1.1 PXE PXE技术与RPL技术不同之处为RPL是静态路由&#xff0c;PXE是动态路由。RPL是根据网卡上的ID号加上其他记录组成的一个Frame&#xff08;帧&#xff09;向服务器发出请求。而服务器中已有这个ID数据&#xff0c;匹配成功则进行远程启动。PXE则是根据服务器端收到的…

Xuggler教程:帧捕获和视频创建

注意&#xff1a;这是我们的“ Xuggler开发教程 ”系列的一部分。 到目前为止&#xff0c;在我们的Xuggler教程系列中&#xff0c;我们已经对视频处理的Xuggler进行了介绍&#xff0c;并讨论了转码和媒体修改 。 在本教程中&#xff0c;我们将看到如何解码视频和捕获帧&#xf…

SignalR + MVC5 简单示例

SignalR MVC5 简单示例 原文:SignalR MVC5 简单示例本文和前一篇文章很类似&#xff0c;只不过是把 SignalR 应用在了 MVC 中 新建项目&#xff0c;选择 MVC 模板 安装 SignalR Install-Package Microsoft.AspNet.SignalR 在项目中添加文件夹 Hubs 在 Hubs 文件夹中添加 Sign…

Hive 接口介绍(Web UI/JDBC)

Hive 接口介绍&#xff08;Web UI/JDBC&#xff09; 实验简介 本次实验学习 Hive 的两种接口&#xff1a;Web UI 以及 JDBC。 一、实验环境说明 1. 环境登录 无需密码自动登录&#xff0c;系统用户名shiyanlou&#xff0c;密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubu…

Java最佳实践– Char到Byte和Byte到Char的转换

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论String性能调优。 特别是&#xff0c;我们将重点介绍使用默认编码时如何有效地处理字符到字节和字节到字符的转换。 本文总结了两种提议的自定义方法与两种经典方法&#xff0…

Java最佳实践–队列之战和链接的ConcurrentHashMap

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将在四个具有相关语义的流行Queue实现类之间进行性能比较。 为了使事情变得更现实&#xff0c;我们将在多线程环境下进行测试&#xff0c;以讨论和演示如何将ArrayBlockingQueue &am…

关于使用racthet的push.js

racthet的push是用来跳转另外一个页面的效果的。但是必须在服务器的环境下支持。如果想要让本地html访问支持的话需要添加 转载于:https://www.cnblogs.com/djawh/p/4623925.html

“应用程序无法正常启动(oxc000007b)”解决方案

解决方案1 通过“DirectX修复工具 V3.3 标准版”软件修复。 备注&#xff1a;经过测试&#xff0c;并未解决本人的问题&#xff0c;但是这个方法可能对游戏中缺失相关.dll&#xff08;动态链接库&#xff09;有帮助。 解决方案2&#xff1a; 该问题的出现不适偶然&#xff0c;主…

7-15 计算圆周率 (15 分)

根据下面关系式&#xff0c;求圆周率的值&#xff0c;直到最后一项的值小于给定阈值。 输入格式&#xff1a; 输入在一行中给出小于1的阈值。 输出格式&#xff1a; 在一行中输出满足阈值条件的近似圆周率&#xff0c;输出到小数点后6位。 输入样例&#xff1a; 0.01结尾无…

JUnit学习之hamcrest、testSuite介绍及测试原则

[转自] http://huihai.iteye.com/blog/1994270 上一节说了junit的一些基本概念&#xff0c;主要使用assert做一些基本的判断。但很多时候使用assert做判断&#xff0c;并不方便&#xff0c;如果要判断某几个值是否为true或false&#xff0c;这时使用hamcrest来判断就会方便许多…

Java最佳实践– Vector vs ArrayList vs HashSet

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将在三个最常用的Collection实现类之间进行性能比较。 为了使事情变得更现实&#xff0c;我们将在多线程环境下进行测试&#xff0c;以讨论和演示如何将Vector &#xff0c; ArrayLi…

Android特效 五种Toast详解

Toast是Android中用来显示显示信息的一种机制&#xff0c;和Dialog不一样的是&#xff0c;Toast是没有焦点的&#xff0c;而且Toast显示的时间有限&#xff0c;过一定的时间就会自动消失。而且Toast主要用于向用户显示提示消息&#xff0c;接下来巴士为大家总结了Android五种To…

Java最佳实践–高性能序列化

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论并演示如何将对象序列化用于高性能应用程序。 所有讨论的主题均基于用例&#xff0c;这些用例来自于电信行业的关键任务超高性能生产系统的开发。 在阅读本文的每个部分之前…

7-18 二分法求多项式单根 (20 分)

二分法求函数根的原理为&#xff1a;如果连续函数f(x)在区间[a,b]的两个端点取值异号&#xff0c;即f(a)f(b)<0&#xff0c;则它在这个区间内至少存在1个根r&#xff0c;即f0。 二分法的步骤为&#xff1a; 检查区间长度&#xff0c;如果小于给定阈值&#xff0c;则停止&a…

UITableViewCell 选中的状态小技巧

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {[super setSelected:selected animated:animated]; //cell 没被选中时 隐藏这个 _leftImageViewself.leftImageView.hidden !selected; //选中text变红 不然变灰色self.textLabel.textColor selected ? [UICol…

BZOJ 3143 HNOI2013 游走 高斯消元 期望

这道题是我第一次使用高斯消元解决期望类的问题&#xff0c;首发A了&#xff0c;感觉爽爽的.... 不过笔者在做完后发现了一些问题&#xff0c;在原文的后面进行了说明。 中文题目&#xff0c;就不翻大意了&#xff0c;直接给原题&#xff1a; 一个无向连通图&#xff0c;顶点从…

eclipse启动tomcat, http://localhost:8080无法访问的解决方案

问题:&#xff1a; tomcat在eclipse里面能正常启动&#xff0c;但在浏览器中访问http://localhost:8080/不能访问tomcat管理页面&#xff0c;且报404错误。同时其他项目页面也不能访问。访问的时候出现下列页面: 现在关闭eclipse里面的tomcat&#xff0c;在tomcat安装目录下双击…

洛谷P1014 [NOIP1999 普及组] Cantor 表

现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 代码 import java.util.*; public class Main{public static void main(String[] args){//int x1 0;int i 0;Scanner sc new Scanner(System.in);int n s…

3522: [Poi2014]Hotel( 树形dp )

枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) dist( x , b ) dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显然两个位于 x 的同一颗子树内的点是不可能被同时选到的 . 我们对 x 的每一颗子树进行 dfs , 记录下当前子树中的点到 x 距离为 d ( 1 < d < n )…