Статьи

Начало работы с YouTube API Java

В этом уроке я взгляну на API Google YouTube, который позволяет расширить возможности вашего приложения с помощью функций YouTube. YouTube является одним из «убийственных» интернет-приложений, и его трафик составляет огромную часть общего интернет-трафика.

Прежде чем начать, убедитесь, что вы прочитали Руководство по обзору API . В основном мы будем работать с API данных , который позволяет выполнять многие операции, доступные на веб-сайте YouTube (поиск видео, получение стандартных каналов, просмотр соответствующего контента и т. Д.).

API доступен на нескольких языках программирования, и мы будем использовать Java для этого урока. Прочитайте Руководство разработчика Java, чтобы получить первую идею. Также добавьте в закладки страницу JavaDoc API данных Google.

Давайте подготовим среду разработки. Сначала загрузите Java-клиент GData из соответствующего раздела загрузки . Я буду использовать версию 1.41.2 для этого урока. Обратите внимание, что существует также версия 2, но по данным сайта является экспериментальной и не совместима с версией 1.

Извлеките заархивированный файл, найдите папку «gdata \ java \ lib» и включите следующие JAR-файлы в classpath вашего приложения:

  • данных клиент-1.0.jar
  • GData-YouTube-2.0.jar
  • GData-ядро-1.0.jar
  • GData-медиа-1.0.jar

Далее мы должны позаботиться о зависимостях. Список пакетов зависимостей можно найти здесь .

Убедитесь, что все вышеупомянутые файлы JAR включены в путь к классам проекта.

Обратите внимание, что все общедоступные каналы доступны только для чтения и не требуют никакой аутентификации. Аутентифицированные операции, с другой стороны, включают в себя поиск частных каналов, таких как входящие каналы пользователя, а также операции записи, загрузки, обновления и удаления. Вам нужно будет подписаться на ключ разработчика, чтобы иметь возможность выполнять аутентифицированные операции. Для этого урока ключ не требуется.

Теперь, когда инфраструктура готова, давайте немного поговорим об API. Основным классом, который мы будем использовать, является класс YouTubeService . Это позволяет выполнять поисковые запросы, аналогичные тем, которые вы можете выполнять при просмотре веб-страницы YouTube. Каждый запрос представлен экземпляром YouTubeQuery . Результаты каждого запроса (если есть) поступают в виде объекта VideoFeed .

Из каждого канала можно получить несколько объектов VideoEntry . Из VideoEntry мы извлекаем объект YoutTubeMediaGroup . Вы можете представить этот класс в качестве заполнителя для информации о СМИ (см. Спецификацию «Media RSS» ). Затем мы получаем соответствующий MediaPlayer и, наконец, URL проигрывателя. Мы также можем получить информацию о сопровождающих миниатюрах через класс MediaThumbnail .

Давайте начнем с кода. Сначала мы создадим два класса моделей, которые будут использоваться для хранения информации о каналах и видео. Первый называется YouTubeMedia и содержит URL-адрес медиа-контента и тип медиа-контента. Второй называется YouTubeVideo и содержит всю информацию, касающуюся конкретного видео (URL-адрес, URL-адрес встроенного проигрывателя, миниатюры и экземпляры YoutTubeMedia). Исходный код для них следующий:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;
     }
  
}
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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 со всей соответствующей информацией. Он также создает соответствующий URL встроенного веб-плеера . Вот код для этого класса:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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;
   
    }
  
}

Для того чтобы протестировать наш класс, а также предоставить пример показа, мы создаем следующий простой тестовый класс:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 для этого руководства, включая библиотеки зависимостей, можно скачать здесь .

Наслаждайтесь!

Статьи по Теме :