Как да получите повече от 999 резултата от видео емисия в Youtube?

В момента пиша бакалавърска теза за Дългата опашка и искам да получа данни, за да проуча нейното поведение. Ето защо исках да извлека информация за броя гледания на видеоклипове в YouTube. Единственият проблем е, че един видео канал към конкретна тема като "most_popular" има само 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 за извличане на данните. Мисля, че 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? Най-новият V3 API (google-api-services-youtube-v3-rev21-1.13.2-beta.jar - 91.114 байта) няма VideoEntry клас? Частта за анализ (между другото, предишната ми връзка е грешна) е за извличане на вашите отчети за анализи в YouTube, така че мисля, че това не е това, което искате.   -  person Freek de Bruijn    schedule 29.01.2013
comment
Използвах gdata jar файловете, предоставени на този сайт: 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. След като добавих още буркани към моя проект, вашият код по-горе работи добре. Сега използвам тези буркани: activation.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 версия 2.0 на YouTube – Типове видео емисии:

„API връща видео емисия в отговор на заявка за търсене на видео. Една видео емисия съдържа максимум 999 записа.“

Изглежда същото ограничение важи и за уеб сайта.

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

  • caption=true|false
  • продължителност=късо|средно|дълго
  • формат=1|5|6
  • време=днес|тази_седмица|този_месец (вместо по подразбиране: all_time)

По този начин можете да използвате комбинация от заявки, за да получите повече от резултатите, които ви интересуват.

Редактиране: Докато търсех как да използвам продължителността, попаднах на YouTube GData API - Заявка за видеоклипове с определена продължителност в Stack Overflow, която препраща към YouTube API v2.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