2012-03-27 83 views
2

我有一個非常簡單的任務 -YouTube API:如果獲得視頻的網址,如何獲取相關視頻的文字?

由於視頻的URL,我想提取其相關的視頻信息(通過信息我的意思是他們的標題,標籤,說明)。 我使用YouTube API的Java版本,無法快速找到如何做到這一點。另外,本網站:https://developers.google.com/youtube/2.0/developers_guide_java提供了一些信息。他們提供的代碼是:

if (videoEntry.getRelatedVideosLink() != null) { 
    String feedUrl = videoEntry.getRelatedVideosLink().getHref(); 

    VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class); 
    printVideoFeed(videoFeed, true); 
} 

我不知道如何創建只給出的URL的VideoEntry ..

回答

2

您可以使用此:

 class YouTubeVideoInfo { 
       private String channel; 
       private String url; 
       private long views; 
       private int comments; 
       private int ratings; 
       private int likes; 
       private int dislikes; 
       private String thumbnail; 
       private String title; 
       ..... 
     } 

     public static final String YOUTUBE_GDATA_SERVER = "http://gdata.youtube.com"; 
     public static final String USER_FEED_PREFIX = YOUTUBE_GDATA_SERVER + "/feeds/api/users/"; 
     public static final String UPLOADS_FEED_SUFFIX = "/uploads"; 
    ............... 
     public YouTubeVideoInfo getVideoInfo(YouTubeService service, String channel, String url) { 
VideoFeed videoFeed = service.getFeed(
     new URL(USER_FEED_PREFIX + channel + UPLOADS_FEED_SUFFIX), VideoFeed.class); 
List<VideoEntry> videoEntries = videoFeed.getEntries(); 
for (VideoEntry videoEntry : videoEntries) { 

    YouTubeMediaGroup mediaGroup = videoEntry.getMediaGroup(); 
    if (mediaGroup != null && mediaGroup.getPlayer() != null && videoEntry.getTitle() != null) { 

     if (url.equals(mediaGroup.getPlayer().getUrl())) { 
      String title = videoEntry.getTitle().getPlainText(); 

      MediaKeywords keywords = mediaGroup.getKeywords(); 

      MediaPlayer mediaPlayer = mediaGroup.getPlayer(); 


      final YtStatistics statistics = videoEntry.getStatistics(); 

      final YouTubeVideoInfo videoInfo = new YouTubeVideoInfo(channel, 
        mediaPlayer.getUrl(), statistics != null 
        ? statistics.getViewCount() : 0); 

      if (videoEntry.getComments() != null 
        && videoEntry.getComments().getFeedLink() != null) 
       videoInfo.comments = 
         videoEntry.getComments().getFeedLink().getCountHint(); 

      final Rating rating = videoEntry.getRating(); 
      if (rating != null) 
       videoInfo.ratings = rating.getNumRaters(); 

      final YtRating ytRating = videoEntry.getYtRating(); 

      if (ytRating != null) { 
       videoInfo.likes = ytRating.getNumLikes(); 
       videoInfo.dislikes = ytRating.getNumDislikes(); 
      } 


      final List<MediaThumbnail> thumbnails = mediaGroup.getThumbnails(); 
      if (!thumbnails.isEmpty()) 
       videoInfo.thumbnail = thumbnails.get(thumbnails.size()/2).getUrl(); 

      if (videoEntry.getTitle() != null) 
       videoInfo.title = videoEntry.getTitle().getPlainText(); 

      return videoInfo; 
     } 
    } 
    .... // exception handling 
+0

謝謝回答! 我對Java相當陌生,所以無法弄清楚你的代碼的哪部分要使用,哪些部分要編輯。一些幫助將非常感激.. – chet 2012-03-27 21:21:43

+0

對於第一類添加setters/getters(通常IDE生成它們)。將常量添加到方法所在的另一個類中。只需添加異常處理或聲明拋出它們的方法即可。這幾乎是完整的代碼,不需要很多工作就可以使用。 我相信你已經找到了如何獲得在YouTube上驗證的YouTubeService實例,對吧? – 2012-03-27 21:29:04

+0

我不認爲我需要身份驗證,因爲我沒有執行任何寫入,更新或刪除操作。我對麼?另一方面(Java),讓我再嘗試一些,如果我仍然不知道如何使其工作,我會回來。再次感謝! :) – chet 2012-03-27 21:44:28

0

我有一種做我想做的事情的方法。我不需要頻道的名稱(上傳視頻的用戶名)。我需要的只是一個URL。 YouTube有與每個視頻對應的ID。例如,對於視頻:http://www.youtube.com/watch?v=f3q3JkNUPmI,ID是「f3q3JkNUPmI」(不帶引號)。因此,您只需創建一個包含您想要獲取的供稿鏈接的字符串即可。這可以通過創建:

字符串Video_Related_Feed = 「https://gdata.youtube.com/feeds/api/videos/f3q3JkNUPmI/related?v=2」(不以http替換HTTPS - 它不起作用) 顯然,可以自動執行此操作..我只是給出了硬編碼的示例。 現在根據這個地址得到實際的Feed:

VideoFeed videoFeed = service.getFeed(new URL(Video_Related_Feed),VideoFeed.class); 此供稿包含的相關視頻的VideoEntry(對應於我們原來的URL),每一個都可以通過一個for循環來訪問: 爲(的VideoEntry五個:videoFeed.getEntries()){此處插入您的代碼}

參考文獻:https://developers.google.com/youtube/2.0/reference 和https://developers.google.com/youtube/2.0/developers_guide_java (對不起,我不得不編寫最後一個鏈接,因爲我無法發佈超過2個網址)。

我希望這可以幫助別人。

0

YouTube最近放棄了對RSS/Atom提要的支持。以下是使用YouTube數據API V3工作解決方法: http://www.joe0.com/2016/03/05/youtube-data-api-v3-how-to-search-youtube-using-java-and-extract-video-id-of-the-most-relevant-result/

此代碼應工作,以獲得最相關的視頻的視頻描述了所有基於關鍵字搜索:

import org.jsoup.Jsoup; 
import org.json.JSONTokener; 

String keyword = "how to make apple pie filling"; 
keyword = keyword.replace(" ", "+"); 

String url = "https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&order=rating&q=" + keyword + "&key=YOUR_YOUTUBE_API_KEY"; 

Document doc = Jsoup.connect(url).timeout(10 * 1000).get(); 

String getJson = doc.text(); 
JSONObject jsonObject = (JSONObject) new JSONTokener(getJson).nextValue(); 

System.out.println(jsonObject.getString("description")); 
相關問題