0

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

1 回答 1

0

999 个条目似乎是设计的限制。请参阅YouTube API v2.0 – 视频供稿类型

“API 返回视频提要以响应搜索视频的请求。视频提要最多包含 999 个条目。”

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

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

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

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

编辑:在搜索如何使用持续时间时,我遇到了YouTube GData API - 在 Stack Overflow 上查询具有特定持续时间的视频,它指的是YouTube API v2.0 - 检索部分响应。例如,您可以使用这个实验性的“检索部分响应 API”指定最大视图计数(这可能对获取长尾有用),而这只是您可以使用它做的众多事情之一。

于 2013-01-29T16:29:45.643 回答