Я пишу прямо сейчас бакалаврскую диссертацию о «Длинном хвосте» и хочу получить данные для исследования его поведения. Вот почему я хотел получить информацию о количестве просмотров видео на 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();
}
}
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.2013VideoEntry
: он наследует метод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