从 Youtube 视频源中获得超过 999 个结果的方法



我现在正在写一篇关于长尾的学士学位论文,想获得数据来研究它的行为。这就是为什么我想检索有关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();
  }
}

999 个条目似乎是设计上的限制。请参阅 YouTube API v2.0 - 视频 Feed 类型:

"API 返回视频源以响应搜索视频的请求。一个视频源最多包含 999 个条目。

看起来同样的限制也适用于网站。

您可以尝试为 YouTube 数据 API 添加自定义查询参数,以限制您获得的结果数量,例如:

  • caption=true|false
  • 持续时间=短|中|长
  • 格式=1|5|6
  • time=today|this_week|this_month(而不是默认值:all_time)

这样,您可以使用查询组合来获取更多您感兴趣的结果。

编辑:在搜索如何使用持续时间时,我遇到了YouTube GData API - 在Stack Overflow上查询具有特定持续时间的视频,这指的是YouTube API v2.0 - 检索部分响应。例如,您可以使用此实验性"检索部分响应 API"指定最大观看次数(这对于获取长尾可能很有用),这只是您可以使用它执行的众多操作之一。

相关内容

  • 没有找到相关文章

最新更新