API YouTube: как получить текст похожих видео, учитывая URL видео? - PullRequest
2 голосов
/ 28 марта 2012

У меня довольно простая задача -

Учитывая URL видео, я хочу извлечь информацию о связанных с ним видео (и под информацией я имею в виду их название, теги, описание).Я использую Java-версию YouTube API и не могу найти способ сделать это быстро.Также этот сайт: 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);
}

Я не знаю, как создать videoEntry, используя только URL-адрес ..

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Вы можете использовать это:

        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 голосов
/ 29 марта 2012

У меня есть метод, чтобы сделать то, что я хотел. Мне не требовалось название канала (имя пользователя, который загрузил видео). Все, что мне нужно, это URL. У YouTube есть идентификатор, соответствующий каждому видео. Например, для видео: http://www.youtube.com/watch?v=f3q3JkNUPmI, идентификатор "f3q3JkNUPmI" (без кавычек). Итак, все, что вам нужно сделать, это создать строку, содержащую ссылку на канал, которую вы хотите получить. Это может быть создано как:

String Video_Related_Feed = "https://gdata.youtube.com/feeds/api/videos/f3q3JkNUPmI/related?v=2" (не заменяйте https на http - это не работает) Очевидно, это можно автоматизировать. Я просто привожу жестко закодированный пример. Теперь получите актуальный канал на основе этого адреса:

VideoFeed videoFeed = service.getFeed (новый URL (Video_Related_Feed), VideoFeed.class); Этот канал содержит VideoEntry связанных видео (соответствующих нашему исходному URL), к каждому из которых можно получить доступ с помощью цикла for: for (VideoEntry ve: videoFeed.getEntries ()) {введите свой код здесь}

Ссылки: https://developers.google.com/youtube/2.0/reference и https://developers.google.com/youtube/2.0/developers_guide_java (извините, мне пришлось написать последнюю ссылку, потому что я не мог опубликовать более 2 URL).

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...