2013-08-29 2 views
0

Я хочу получить все комментарии (до 999) из видео с YouTube. Это URL, который я хочу, чтобы отправитьParseException при получении комментариев от Youtube video

http://gdata.youtube.com/feeds/api/videos/1EEFydL6ooA/comments?start-index=1&max-results=50

Когда я посылаю этот URL я получаю com.google.gdata.util.ParseException [Строка 1, столбец 279] Недопустимый корневой элемент, как ожидается (пространство имен URI:. местное название) (http://www.w3.org/2005/Atom:entry), найдено (http://www.w3.org/2005/Atom:feed

на самом деле, когда мой URL был «http://gdata.youtube.com/feeds/api/videos/1EEFydL6ooA», я получал 25 комментариев, если какой-либо Однако, так как это около одного видео, я не был в состоянии set max-results и start-index. Мой код:

String str = "http://gdata.youtube.com/feeds/api/videos/" + videoId 
     + "/comments"; 
    YouTubeQuery youtubeQuery = new YouTubeQuery(new URL(str)); 
    youtubeQuery.setMaxResults(50); 
    youtubeQuery.setStartIndex(1); 
    String videoEntryUrl = youtubeQuery.getUrl().toString(); 
    VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), 
      VideoEntry.class); 
    if (videoEntry.getComments() != null) { 
     String commentUrl = videoEntry.getComments().getFeedLink() 
       .getHref(); 
     System.out.println(commentUrl); 
     CommentFeed commentFeed = service.getFeed(new URL(commentUrl), 
       CommentFeed.class); 
     for (int i = 0; i < commentFeed.getEntries().size() 
       && commentFeed.getEntries().get(i) != null; i++) { 

      String author=commentFeed.getEntries().get(i).getAuthors().get(0) 
          .getUri().substring(41) 
      String commentId=commentFeed.getEntries().get(i).getId().substring(47); 
      String comment=commentFeed.getEntries().get(i).getPlainTextContent(); 

Почему я получаю parseException? Возможно, потому, что этот код работает, соответственно, объект VideoEntry и разбор выполняется таким образом. Есть что-то вроде CommentEntry? Как можно инициализировать его, если таковые имеются?

Обратите внимание, что мое исключение не является «com.google.gdata.util.ParseException: [Строка 1, столбец 101152, элемент yt: состояние] Недопустимое значение для атрибута:« имя », которое связано с неправильной библиотекой.

Спасибо

ответ

0

Я не могу попробовать ваш код. Это похоже на библиотеку PHP. Мне кажется, что вы используете неправильный класс. URL-адрес начинается с комментариев, хотя вы ссылаетесь на него как на видеовстречу.

(1) Это о комментариях (так как вы добавить "/ комментарии"):

String str = "http://gdata.youtube.com/feeds/api/videos/" + videoId + "/comments"; 

(2) YouTubeQuery youtubeQuery = новый YouTubeQuery (новый URL (ул));

youtubeQuery.setMaxResults(50); 
youtubeQuery.setStartIndex(1); 

(3) Хотя вы называете это "videoEntry" речь идет о "комментарии", из-за стоимости URL:

String videoEntryUrl = youtubeQuery.getUrl().toString(); 

VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class); 

Вместо выше, может быть, попробовать что-то вроде:

String myUrl = youtubeQuery.getUrl().toString(); // only another name 

CommentFeed commentFeed = service.getFeed(new URL(myUrl), CommentFeed.class); // Feed response 

КСТАТИ: В библиотеке PHP он определяет класс корма сам по себе, а второй параметр может быть оставлено пустым. Вроде: CommentFeed commentFeed = service.getEntry (новый URL (myUrl));

+0

BTW. Библиотека PHP использует: $ youTubeService> setMajorProtocolVersion (2); Использовать api версии 2. (Параметр «v = 2» в URL-адресе.) – Als

+0

Это о комментариях, потому что я хочу, чтобы это было о «комментариях». Речь шла не о «комментариях», прежде чем я не добавил «/ comments "в этом URL. Я просто хочу создать объект CommentEntry с помощью этого URL-адреса, но я не могу это сделать. –

+0

В вашем коде в строке 7: «service.getEntry (новый URL (videoEntryUrl), VideoEntry.class);». Здесь videoEntryUrl «http://gdata.youtube.com/feeds/api/videos/» + videoId + «/ comments»; Это источник комментариев. Поэтому использование VideoEntry.class неверно. – Als