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.pswp.cn/news/374868.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374868.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374868.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql在mac上的坑

默認端口3306&#xff1f; 正確答案&#xff1a;3307 轉載于:https://www.cnblogs.com/dudream/p/5375551.html

ServletContext圖解

servlet之間共享數據資源&#xff01; 轉載于:https://www.cnblogs.com/felixzh/p/4615902.html

C語言怎么輸出百分號%

規律&#xff1a;printf函數中&#xff0c;當出現多個%時&#xff0c;由左至右&#xff0c;每兩個%結合輸出一個% #include <stdio.h> #include <stdlib.h> #include <math.h> int main() {int c 52;printf("% \n %% \n %%% \n %%%% \n %%%%% \n %%%%…

入侵Jasper以獲取JSP頁面的對象模型

為了對我的JSP進行一些檢查和統計分析&#xff0c;我需要一個包含在其中的元素的類似于DOM的層次模型。 但是&#xff0c;解析JSP頁面并不是一件容易的事&#xff0c;最好留給它一個出色的工具-Tomcat&#xff0c;Jetty&#xff0c;GlassFish以及其他所有工具都可以使用Jasper …

Linux自動化安裝cobbler

1介紹 1.1 PXE PXE技術與RPL技術不同之處為RPL是靜態路由&#xff0c;PXE是動態路由。RPL是根據網卡上的ID號加上其他記錄組成的一個Frame&#xff08;幀&#xff09;向服務器發出請求。而服務器中已有這個ID數據&#xff0c;匹配成功則進行遠程啟動。PXE則是根據服務器端收到的…

iOS9適配系列教程

https://github.com/ChenYilong/iOS9AdaptationTips 轉載于:https://www.cnblogs.com/zsw-1993/p/4879118.html

C語言形參

形參和實參區別 形參出現在函數定義中&#xff0c;在整個函數體內都可以使用&#xff0c;離開該函數則不能使用。實參出現在主調函數中&#xff0c;進入被調函數后&#xff0c;實參變量也不能使用。 形參和實參的功能是作數據傳送。發生函數調用時&#xff0c;主調函數把實參…

避免延遲的JPA集合

Hibernate&#xff08;實際上是JPA&#xff09;具有集合映射&#xff1a; OneToMany&#xff0c; ManyToMany&#xff0c; ElementCollection。 所有這些默認情況下都是惰性的。 這意味著集合是List或Set接口的特定實現&#xff0c;其中包含對持久會話的引用&#xff0c;并且只…

2016年,我的和自己談談

2016年過去三分之一了&#xff0c;現在談規劃晚點但總比沒想法強。想了半天還是從這個方面著手吧&#xff1a; 一.升級改造自己的辦公學習環境&#xff1a; 給自己的電腦加內存&#xff0c;加SSD&#xff0c;再添置一個顯示器&#xff0c;換上心儀已久的cherry青軸鍵盤&#xf…

C語言的四舍五入實現

習題3-2 高速公路超速處罰 (15 分) 按照規定&#xff0c;在高速公路上行使的機動車&#xff0c;達到或超出本車道限速的10%則處200元罰款&#xff1b;若達到或超出50%&#xff0c;就要吊銷駕駛證。請編寫程序根據車速和限速自動判別對該機動車的處理。 輸入格式: 輸入在一行中…

ACTGame項目

項目地址&#xff1a;https://github.com/alonecat06/ACTGame游戲地址&#xff1a;http://pan.baidu.com/s/1hqD3IYw 項目是一個自制單機動作游戲demo&#xff0c;方向是手游&#xff0c;使用Unity5&#xff0c;5月中開工至今。 做這個項目&#xff0c;是為加深自己對Unity的理…

Xuggler教程:幀捕獲和視頻創建

注意&#xff1a;這是我們的“ Xuggler開發教程 ”系列的一部分。 到目前為止&#xff0c;在我們的Xuggler教程系列中&#xff0c;我們已經對視頻處理的Xuggler進行了介紹&#xff0c;并討論了轉碼和媒體修改 。 在本教程中&#xff0c;我們將看到如何解碼視頻和捕獲幀&#xf…

面向對象-原型對象

創建對象 Js中可以用構造函數模式創建對象&#xff0c;如&#xff1a; function Person(name, age, job) {this.name name;this.age age;this.job job;this.sayName function () {alert(this.name);}}var person1 new Person("Nicholas", 29, "aa");v…

索引類型

1.B樹索引 在Oracle中是通用索引&#xff0c;是創建索引時的默認索引。B樹索引可以是單列索引&#xff0c;也可以是組合/復合索引。B樹索引最多可以包括22列。 2.位圖索引 位圖索引時決策支持系統&#xff08;DSS&#xff09;和數據倉庫的理想選擇&#xff0c;它們不應該用于事…

C語言條件運算符

先看一個error error: lvalue required as left operand of assignment| i 0 ? X 1.0 : X * x;修改后 i 0 ? (X 1.0) : (X * x);也就是說條件運算符可以執行語句&#xff0c;當是賦值語句時要加括號規定優先級&#xff0c;不然會干擾程序判斷。 因為條件運算符作為三目…

EJB 3.0注入和查找簡介

介紹 Enterprise JavaBeans Specification v。3.0引入了簡化的&#xff0c;基于注釋的API&#xff0c;用于EJB注入和查找。 EJB 3.0現在是POJO&#xff0c;可以使用簡單的注釋將其注入其他組件&#xff08;例如EJB和Servlet&#xff09;。 EJB 3.0是Java EE 6的許多其他基于POJ…

SignalR + MVC5 簡單示例

SignalR MVC5 簡單示例 原文:SignalR MVC5 簡單示例本文和前一篇文章很類似&#xff0c;只不過是把 SignalR 應用在了 MVC 中 新建項目&#xff0c;選擇 MVC 模板 安裝 SignalR Install-Package Microsoft.AspNet.SignalR 在項目中添加文件夾 Hubs 在 Hubs 文件夾中添加 Sign…

Java內存模型–快速概述和注意事項

在計算中&#xff0c; 內存模型描述了線程如何通過內存進行交互&#xff0c;或更一般地&#xff0c;它指定了為分段內存或分頁內存平臺生成代碼時允許編譯器進行的假設。 在給定程序和該程序的執行跟蹤的情況下&#xff0c;它實質上描述了執行跟蹤是否是該程序的合法執行。 Jav…

6-7 統計某類完全平方數 (20 分)

本題要求實現一個函數&#xff0c;判斷任一給定整數N是否滿足條件&#xff1a;它是完全平方數&#xff0c;又至少有兩位數字相同&#xff0c;如144、676等。 函數接口定義&#xff1a; int IsTheNumber ( const int N );其中N是用戶傳入的參數。如果N滿足條件&#xff0c;則該…

C#中數組、ArrayList和List三者的區別(轉) ,加修改

在C#中數組&#xff0c;ArrayList&#xff0c;List都能夠存儲一組對象&#xff0c;那么這三者到底有什么樣的區別呢。 數組 數組在C#中最早出現的。在內存中是連續存儲的&#xff0c;所以它的索引速度非常快&#xff0c;而且賦值與修改元素也很簡單。 <span style"font…