我现在正在写一篇关于长尾的学士学位论文,想获得数据来研究它的行为。这就是为什么我想检索有关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"指定最大观看次数(这对于获取长尾可能很有用),这只是您可以使用它执行的众多操作之一。