0

YouTube 動画からすべてのコメント (最大 999) を取得したい。送りたいURLです

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

この URL を送信すると、com.google.gdata.util.ParseException [Line 1, Column 279] Invalid root element, expected (namespace uri:local name) of ( http://www.w3.org/2005/ Atom:entry )、見つかりました ( http://www.w3.org/2005/Atom:feed

実際、私のURLが「http://gdata.youtube.com/feeds/api/videos/1EEFydL6ooA」のとき、コメントがあったとしても25件ありました。ただし、これは 1 つのビデオに関するものであるため、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: [Line 1, Column 101152, element yt:state] Invalid value for attribute : 'name' 」ではないことに注意してください。これはライブラリが間違っているためです。

ありがとう

4

1 に答える 1

0

あなたのコードを試すことができません。PHPライブラリのようです。間違ったクラスを使用しているように思えます。最初の URL はコメントに関するものですが、videoEntry と呼んでいます。

(1) これはコメントに関するものです (「/comments」を追加したため):

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

(2) YouTubeQuery youtubeQuery = new 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 ライブラリでは、フィードのクラスをそれ自体で検出し、2 番目のパラメーターを null のままにすることができます。のように: CommentFeed commentFeed = service.getEntry(新しい URL(myUrl));

于 2013-08-29T12:07:22.007 に答える