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

YouTube Java API入门相关推荐

  1. Java api 入门教程 之 JAVA的IO处理

    IO是输入和输出的简称,在实际的使用时,输入和输出是有方向的.就像现实中两个人之间借钱一样,例如A借钱给B,相对于A来说是借出,而相对于B来说则是借入.所以在程序中提到输入和输出时,也需要区分清楚是相 ...

  2. 新浪微博JAVA API入门

    最近放假没事,就想着学一学新浪微博的API调用.查看了一下资料,大多是前几年的资料,和现在的情况已经不尽相同.于是特意写下笔记,记录一下简单的入门教程,希望能给同样有兴趣的人一些参考. 1.申请应用 ...

  3. mybatis入门(五)之Java API

    转载自   mybatis Java API Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了.MyBatis 的 Java API 就是你收获你所 ...

  4. 大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

    大数据技术之_20_Elasticsearch学习_01 一 概述 1.1 什么是搜索? 1.2 如果用数据库做搜索会怎么样? 1.3 什么是全文检索和 Lucene? 1.4 什么是 Elastic ...

  5. 大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作...

    一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 ...

  6. akka java api中文_akka入门 (1):akka简介

    这个akka入门系列大量参考了akka文档.主要是翻译+自己的一些理解.这里对akka文档吐一下槽,它的文档初看上去感觉挺详细的.但是很多示例代码都是片段,对初学者来说甚至都无法运行起来,所以我这里会 ...

  7. ElasticSearch入门-搜索(java api)

    ElasticSearch入门-搜索(java api) package com.qlyd.searchhelper;import java.util.Map;import net.sf.json.J ...

  8. Lucene 02 - Lucene的入门程序(Java API的简单使用)

    目录 1 准备环境 2 准备数据 3 创建工程 3.1 创建Maven Project(打包方式选jar即可) 3.2 配置pom.xml, 导入依赖 4 编写基础代码 4.1 编写图书POJO 4. ...

  9. kafka java api 删除_Kafka入门系列—6. Kafka 常用命令及Java API使用

    常用命令 启动Zookeeper ./zkServer.sh start-foreground 可选参数: ./zkServer.sh {start|start-foreground|stop|res ...

  10. zookeeper入门学习之java api会话建立《四》

    在上一篇zk中简单玩了下api的连接创建会话,也总是留下了很多坑,就是那些引申开来,搞不明白的问题.有时候想追究起来,问题总是那么无穷无尽,有时候问题比答案更有力度吧,到最后都是些哲学问题吗?存在的这 ...

最新文章

  1. torch.nn.Embedding理解
  2. python条形图数据标签_python – Plotly中用于条形图的单独标记条形图
  3. python 单元测试 unittest
  4. 设置UITextField占位符的颜色和字体
  5. Codeforces Round #212 (Div. 2) C. Insertion Sort 思维
  6. Smartrac推出智能物联网解决方案
  7. n1盒子救砖_新手教程教你N1盒子纯净刷机教程,实现OMV、HomeAssistant功能
  8. 异次元骇客、虚拟机和造物主
  9. CSDN如何修改用户名(CSDN ID)、用户昵称以及自定义博客域名等
  10. 因变量 方差膨胀系数_如何理解方差膨胀因子(Variance Inflation Factor,VIF)?
  11. MATLAB批量绘图
  12. 海康硬盘录像机无法通过rtsp协议连接到EasyNVR的Web页面如何处理?
  13. 微信小程序开发笔记 支付篇③——微信支付JSAPI下单和微信小程序调起支付(V2版本)
  14. 数字信号处理之期中斩神篇(一重 搬山)
  15. kdj指标主要看哪个值_终于有人把KDJ指标讲通透了,简单实用,建议收藏
  16. oracle trim没用,Oracle中Trim函数的使用方法
  17. 内网渗透之跨路由访问
  18. 三、中台的收益和价值
  19. 本/硕学生认证申请 Jetbrains 全家桶
  20. springboot校园新闻趣事 计算机毕业设计(源码、运行环境)

热门文章

  1. 分享如何搭建手机工作室网络
  2. 手机通过蓝牙与电脑共享网络
  3. Linux下服务的管理
  4. 2021振兴杯参赛后感(部分writeup)
  5. 阿里聚石塔限制IP 过部署服务器详细流程
  6. 中国环境检测市场运营现状分析与投资规划研究报告2022年版
  7. WebSocket通信原理和在Tomcat中实现源码详解(万字爆肝)
  8. 《VoIP技术构架(第2版·修订版)》一1.7 小结
  9. android实现自定义图标,Android开发中用Drawable 实现自定义电池图标
  10. 《Java并发编程实战》读书笔记-第5章 基础构建模块