web-dev-qa-db-fra.com

Afficher tous les commentaires sur une vidéo YouTube

J'essaie d'obtenir tous les commentaires d'une vidéo YouTube à l'aide d'un programme Java. Je ne peux pas les obtenir cependant car il a le "Show More" au lieu de tous les commentaires. Je cherche un moyen d'obtenir tous les commentaires ou pages de commentaires que je peux parcourir. J'ai un identifiant vidéo et des choses, juste besoin des commentaires.

J'ai essayé all_comments au lieu de regarder dans l'URL, mais il n'affiche pas encore tous les commentaires et redirige pour regarder à nouveau.

J'ai également consulté l'API YouTube et ne peux que trouver comment obtenir des commentaires avec leur identifiant, mais je dois obtenir tous les commentaires d'un identifiant de vidéo.

Si quelqu'un sait comment faire cela, merci de me le dire.

J'ai ajouté une prime de 50 représentants pour quiconque peut me donner une bonne réponse à cette question.

8
bwfcwalshy

Vous devez obtenir une demande de liste de fils de commentaires pour votre vidéo, puis faire défiler vers l'avant à l'aide du jeton de page suivant de la dernière réponse:

private static int counter = 0;
private static YouTube youtube;

public static void main(String[] args) throws Exception {
    // For Auth details consider:
    // https://github.com/youtube/api-samples/blob/master/Java/src/main/Java/com/google/api/services/samples/youtube/cmdline/Auth.Java
    // Also don't forget secrets https://github.com/youtube/api-samples/blob/master/Java/src/main/resources/client_secrets.json
    List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/youtube.force-ssl");
    Credential credential = Auth.authorize(scopes, "commentthreads");
    youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential).build();

    String videoId = "video_id";

    // Get video comments threads
    CommentThreadListResponse commentsPage = prepareListRequest(videoId).execute();

    while (true) {
        handleCommentsThreads(commentsPage.getItems());

        String nextPageToken = commentsPage.getNextPageToken();
        if (nextPageToken == null)
            break;

        // Get next page of video comments threads
        commentsPage = prepareListRequest(videoId).setPageToken(nextPageToken).execute();
    }

    System.out.println("Total: " + counter);
}

private static YouTube.CommentThreads.List prepareListRequest(String videoId) throws Exception {

    return youtube.commentThreads()
                  .list("snippet,replies")
                  .setVideoId(videoId)
                  .setMaxResults(100L)
                  .setModerationStatus("published")
                  .setTextFormat("plainText");
}

private static void handleCommentsThreads(List<CommentThread> commentThreads) {

    for (CommentThread commentThread : commentThreads) {
        List<Comment> comments = Lists.newArrayList();
        comments.add(commentThread.getSnippet().getTopLevelComment());

        CommentThreadReplies replies = commentThread.getReplies();
        if (replies != null)
            comments.addAll(replies.getComments());

        System.out.println("Found " + comments.size() + " comments.");

        // Do your comments logic here
        counter += comments.size();
    }
}

Considérons api-samples } _, si vous avez besoin d'un exemple de projet squelette.


Mise à jour

La situation dans laquelle vous ne pouvez pas obtenir tous les commentaires peut également être provoquée par le limite de quota (du moins je l'ai affronté):

  • unités / jour 50 000 000
  • unités / 100 secondes/utilisateur 300 000

Ce n'est pas un Java, python, js, ou quelque règle spécifique au langage. Si vous voulez dépasser le quota, vous ne pouvez pas essayer de demander un quota plus élevé . Cependant, je commencerais par contrôler votre débit. Il est très facile de se situer au-dessus de 100seconds/user quota.

5
Michael Cheremuhin

essayez ceci, il peut télécharger tous les commentaires pour une vidéo donnée que j'ai testée.

https://github.com/egbertbouman/youtube-comment-downloader

python downloader.py --youtubeid YcZkCnPs45s --output OUT 
Downloading Youtube comments for video: YcZkCnPs45s 
Downloaded 1170 comment(s) 
Done!

la sortie est au format JSON:

{
  "text": "+Tony Northrup many thanks for the Prompt reply - I'll try that.",
  "time": "1 day ago",
  "cid": "z13nfbog0ovqyntk322txzjamuensvpch.1455717946638546"
}
2
samsamara