Как получить более 999 результатов из видеопотока Youtube?

Я пишу прямо сейчас бакалаврскую диссертацию о «Длинном хвосте» и хочу получить данные для исследования его поведения. Вот почему я хотел получить информацию о количестве просмотров видео на YouTube. Единственная проблема заключается в том, что один видеопоток на определенную тему, например «самая популярная», имеет только 999 записей. Есть ли способ получить больше данных для определенной категории или вообще? Я опубликую свой текущий код (это попытка получить данные для категории «спорт») здесь:

public static void printVideoEntry(VideoEntry videoEntry, boolean detailed) {
      System.out.println("Title: " + videoEntry.getTitle().getPlainText());

      if(videoEntry.isDraft()) {
        System.out.println("Video is not live");
        YtPublicationState pubState = videoEntry.getPublicationState();
        if(pubState.getState() == YtPublicationState.State.PROCESSING) {
          System.out.println("Video is still being processed.");
        }
        else if(pubState.getState() == YtPublicationState.State.REJECTED) {
          System.out.print("Video has been rejected because: ");
          System.out.println(pubState.getDescription());
          System.out.print("For help visit: ");
          System.out.println(pubState.getHelpUrl());
        }
        else if(pubState.getState() == YtPublicationState.State.FAILED) {
          System.out.print("Video failed uploading because: ");
          System.out.println(pubState.getDescription());
          System.out.print("For help visit: ");
          System.out.println(pubState.getHelpUrl());
        }
      }

      if(videoEntry.getEditLink() != null) {
        System.out.println("Video is editable by current user.");
      }

      if(detailed) {



        YtStatistics stats = videoEntry.getStatistics();
        if(stats != null ) {
          System.out.println("View count: " + stats.getViewCount());
        }
        System.out.println();


      }
    }

  public static void printVideoFeed(VideoFeed videoFeed, boolean detailed) {
      for(VideoEntry videoEntry : videoFeed.getEntries() ) {
        printVideoEntry(videoEntry, detailed);
      }
    } 

  public static void printEntireVideoFeed(YouTubeService service, 
          VideoFeed videoFeed, boolean detailed) throws MalformedURLException, 
          IOException, ServiceException {
         do {
           printVideoFeed(videoFeed, detailed);
           if(videoFeed.getNextLink() != null) {
             videoFeed = service.getFeed(new URL(videoFeed.getNextLink().getHref()), 
               VideoFeed.class);
           }
           else {
             videoFeed = null;
           }
         }
         while(videoFeed != null);
        }


  public static void main(String[] args) {

  try {

      YouTubeService service = new YouTubeService("test");

      YouTubeQuery query = 
              new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));
            query.setFullTextQuery("Sports");
            VideoFeed videoFeed = service.query(query, VideoFeed.class);
            printEntireVideoFeed(service, videoFeed, false);
  }
  catch(AuthenticationException e) {
    e.printStackTrace();
  }
  catch(MalformedURLException e) {
    e.printStackTrace();
  }
  catch(ServiceException e) {
    e.printStackTrace();
  }
  catch(IOException e) {
    e.printStackTrace();
  }
}

person f1reseed    schedule 28.01.2013    source источник
comment
Используете ли вы API данных YouTube и /или API YouTube Analytics?   -  person Freek de Bruijn    schedule 29.01.2013
comment
Я просто использую API данных Youtube для получения данных. Я думаю, что Analytics API предназначен только для анализа ваших собственных видео и каналов (или видео и каналов других пользователей), а не видео в целом, не так ли?   -  person f1reseed    schedule 29.01.2013
comment
Не могли бы вы дать ссылки на файлы jar, которые вы используете? Я пробовал gdata-youtube-1.0.jar (61,533 байта) и gdata-youtube-2.0.jar (119,923 байта), но в классе VideoEntry нет метода getTitle? Последний API V3 (google-api-services-youtube-v3-rev21-1.13.2-beta.jar — 91,114 байт) не имеет класса VideoEntry? Аналитическая часть (кстати, моя предыдущая ссылка неверна) предназначена для получения аналитических отчетов YouTube, поэтому я думаю, что это не то, что вам нужно.   -  person Freek de Bruijn    schedule 29.01.2013
comment
Я использовал файлы jar gdata, представленные на этом сайте: code.google. com/p/gdata-java-client/downloads/list, и я получил код для разбиения на страницы видеопотока отсюда: developers.google.com/youtube/2.0/ Надеюсь, это поможет. Спасибо, что продумали это!   -  person f1reseed    schedule 29.01.2013
comment
Я решил свою проблему с классом VideoEntry: он наследует метод getTitle от класса BaseEntry, который находится в gdata-core-1.0.jar. После добавления дополнительных банок в мой проект ваш код выше работает нормально. Теперь я использую эти банки: активация.jar, gdata-base-1.0.jar, gdata-client-1.0.jar, gdata-client-meta-1.0.jar, gdata-core-1.0.jar, gdata-media-1.0. jar, gdata-youtube-2.0.jar, gdata-youtube-meta-2.0.jar, guava-r07.jar и mail.jar.   -  person Freek de Bruijn    schedule 30.01.2013


Ответы (1)


999 записей, по-видимому, являются ограничением по дизайну. См. API YouTube версии 2.0 — типы видеопотоков:

«API возвращает канал видео в ответ на запрос на поиск видео. Канал видео содержит не более 999 записей».

Похоже, что такое же ограничение распространяется и на веб-сайт.

Вы можете попробовать добавить пользовательские параметры запроса для API данных YouTube, чтобы ограничить количество результаты, которые вы получаете, например:

  • заголовок = истина | ложь
  • продолжительность = короткая | средняя | длинная
  • формат=1|5|6
  • time=today|this_week|this_month (вместо значения по умолчанию: all_time)

Таким образом, вы можете использовать комбинацию запросов, чтобы получить больше интересующих вас результатов.

Изменить: при поиске того, как использовать продолжительность, я наткнулся на API YouTube GData – запрос видео с определенной продолжительностью в Stack Overflow, который ссылается на API YouTube версии 2.0 — получение частичного ответа. Например, вы можете указать максимальное количество просмотров (что может быть полезно для получения «длинного хвоста»), используя этот экспериментальный «Получение частичного ответа API», и это только одна из многих вещей, которые вы можете с ним сделать.

person Freek de Bruijn    schedule 29.01.2013
comment
Спасибо за помощь. Пользовательские параметры запроса действительно могут немного помочь мне в учебе! - person f1reseed; 29.01.2013
comment
Да, я наткнулся на частичный ответ фида. Проблема в том, что он, кажется, фильтрует только исходный запрошенный канал. Поэтому, когда я, например, ищу по ключевому слову спорт, я обычно получаю 1000 результатов, а теперь я использую метод частичного отклика фида, чтобы показать только мне, например. все видео ‹ 500.000 просмотров показывает мне только 2 записи (для примера). кажется, что он не создает совершенно новый канал, а просто фильтрует запрошенный оригинал. Если есть другой способ, о котором я, возможно, не подумал, пожалуйста, дайте мне знать. Если бы удалось создать совершенно новую ленту ответов, моя проблема была бы решена. - person f1reseed; 30.01.2013