В момента пиша бакалавърска теза за Дългата опашка и искам да получа данни, за да проуча нейното поведение. Ето защо исках да извлека информация за броя гледания на видеоклипове в 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();
}
}
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.2013VideoEntry
: той наследява метода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