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

接下来,我们必须照顾依赖性。 依赖包列表可以在这里找到。

确保上述所有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项目,包括依赖库。

请享用!

相关文章 :

翻译自: https://www.javacodegeeks.com/2010/05/getting-started-with-youtube-java-api.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值