2016-07-19 12 views
-1

Ich versuche, alle Kommentare auf einem Youtube-Video mit folgendem Ansatz zu bekommen, aber ich kann nicht alle Kommentare im Zusammenhang mit dem Video abrufen, nur einige der Kommentare werden abgerufen. Ich habe versucht, dies zu googeln, aber nichts half, kann jemand erklären, wie man alle Kommentare zu einem YouTube-Video zu bekommen.wie man Kommentare eines Youtube-Videos abruft

//url :- "https://www.googleapis.com/auth/youtube.force-ssl" 

public void ReadAllComments(String videoId){ 
    try { 

     CommentThreadListResponse videoCommentsListResponse = youtube.commentThreads() 
       .list("snippet").setVideoId(videoId).setTextFormat("plainText").execute(); 

     List<CommentThread> videoComments = videoCommentsListResponse.getItems(); 

      for (CommentThread videoComment : videoComments) {    
       CommentSnippet snippet = videoComment.getSnippet().getTopLevelComment().getSnippet(); 
       System.out.println(" - Author: " + snippet.getAuthorDisplayName()); 
       System.out.println(" - Comment: " + snippet.getTextDisplay()); 
       System.out.println("\n-------------------------------------------------------------\n"); 
      } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

Antwort

1
CommentThreadListResponse videoCommentsListResponse = youtube.commentThreads() 
.list("snippet").setVideoId(videoId).setTextFormat("plainText").execute(); 

obigen Code zu diesem Wechsel arbeitete

CommentThreadListResponse videoCommentsListResponse = youtube.commentThreads() 
.list("snippet").setVideoId(videoId).setMaxResults(50l).setTextFormat("plainText").execute(); 
0

Sie können die Kommentare in YouTube-Video abrufen, indem Sie den CommentThreads verwenden. Eine commentThread-Ressource enthält Informationen zu einem YouTube-Kommentar-Thread, der einen Kommentar auf oberster Ebene enthält und ggf. Antworten auf diesen Kommentar enthält. Eine commentThread-Ressource kann Kommentare zu einem Video oder einem Kanal darstellen.

Hier ist die Beispiel-HTTP-Anfrage, um Kommentare zu erhalten.

https://www.googleapis.com/youtube/v3/commentThreads?key=YOUR_API_KEY&textFormat=plainText&part=snippet&videoId=Vm8qiuDgcJ8&maxResults=50 

Überprüfen Sie einfach die verschiedenen parameters, die Sie in dieser Anfrage nutzen können.

Sie können auch die verschiedenen sample code in dieser Dokumentation überprüfen.

Hier ist das Beispiel für JAVA.

package com.google.api.services.samples.youtube.cmdline.data; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.List; 

import com.google.api.client.auth.oauth2.Credential; 
import com.google.api.client.googleapis.json.GoogleJsonResponseException; 
import com.google.api.services.samples.youtube.cmdline.Auth; 
import com.google.api.services.youtube.YouTube; 
import com.google.api.services.youtube.model.Comment; 
import com.google.api.services.youtube.model.CommentSnippet; 
import com.google.api.services.youtube.model.CommentThread; 
import com.google.api.services.youtube.model.V3CommentListResponse; 
import com.google.api.services.youtube.model.V3CommentThreadListResponse; 
import com.google.common.collect.Lists; 

/** 
* This sample creates and manages comments by: 
* 
* 1. Retrieving the top-level comments for a video via "commentThreads.list" method. 
* 2. Replying to a comment thread via "comments.insert" method. 
* 3. Retrieving comment replies via "comments.list" method. 
* 4. Updating an existing comment via "comments.update" method. 
* 5. Sets moderation status of an existing comment via "comments.setModerationStatus" method. 
* 6. Marking a comment as spam via "comments.markAsSpam" method. 
* 7. Deleting an existing comment via "comments.delete" method. 
* 
* @author Ibrahim Ulukaya 
*/ 
public class CommentHandling { 

    /** 
    * Define a global instance of a YouTube object, which will be used to make 
    * YouTube Data API requests. 
    */ 
    private static YouTube youtube; 

    /** 
    * List, reply to comment threads; list, update, moderate, mark and delete 
    * replies. 
    * 
    * @param args command line args (not used). 
    */ 
    public static void main(String[] args) { 

     // This OAuth 2.0 access scope allows for full read/write access to the 
     // authenticated user's account and requires requests to use an SSL connection. 
     List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/youtube.force-ssl"); 

     try { 
      // Authorize the request. 
      Credential credential = Auth.authorize(scopes, "commentthreads"); 

      // This object is used to make YouTube Data API requests. 
      youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential) 
        .setApplicationName("youtube-cmdline-commentthreads-sample").build(); 

      // Prompt the user for the ID of a video to comment on. 
      // Retrieve the video ID that the user is commenting to. 
      String videoId = getVideoId(); 
      System.out.println("You chose " + videoId + " to subscribe."); 

      // Prompt the user for the comment text. 
      // Retrieve the text that the user is commenting. 
      String text = getText(); 
      System.out.println("You chose " + text + " to subscribe."); 

      // All the available methods are used in sequence just for the sake 
      // of an example. 

      // Call the YouTube Data API's commentThreads.list method to 
      // retrieve video comment threads. 
      V3CommentThreadListResponse videoCommentsListResponse = youtube.commentThreads() 
        .list("snippet").setVideoId(videoId).setTextFormat("plainText").execute(); 
      List<CommentThread> videoComments = videoCommentsListResponse.getItems(); 

      if (videoComments.isEmpty()) { 
       System.out.println("Can't get video comments."); 
      } else { 
       // Print information from the API response. 
       System.out 
         .println("\n================== Returned Video Comments ==================\n"); 
       for (CommentThread videoComment : videoComments) { 
        CommentSnippet snippet = videoComment.getSnippet().getTopLevelComment() 
          .getSnippet(); 
        System.out.println(" - Author: " + snippet.getAuthorDisplayName()); 
        System.out.println(" - Comment: " + snippet.getTextDisplay()); 
        System.out 
          .println("\n-------------------------------------------------------------\n"); 
       } 
       CommentThread firstComment = videoComments.get(0); 

       // Will use this thread as parent to new reply. 
       String parentId = firstComment.getId(); 

       // Create a comment snippet with text. 
       CommentSnippet commentSnippet = new CommentSnippet(); 
       commentSnippet.setTextOriginal(text); 
       commentSnippet.setParentId(parentId); 

       // Create a comment with snippet. 
       Comment comment = new Comment(); 
       comment.setSnippet(commentSnippet); 

       // Call the YouTube Data API's comments.insert method to reply 
       // to a comment. 
       // (If the intention is to create a new top-level comment, 
       // commentThreads.insert 
       // method should be used instead.) 
       Comment commentInsertResponse = youtube.comments().insert("snippet", comment) 
         .execute(); 

       // Print information from the API response. 
       System.out 
         .println("\n================== Created Comment Reply ==================\n"); 
       CommentSnippet snippet = commentInsertResponse.getSnippet(); 
       System.out.println(" - Author: " + snippet.getAuthorDisplayName()); 
       System.out.println(" - Comment: " + snippet.getTextDisplay()); 
       System.out 
         .println("\n-------------------------------------------------------------\n"); 

       // Call the YouTube Data API's comments.list method to retrieve 
       // existing comment 
       // replies. 
       V3CommentListResponse commentsListResponse = youtube.comments().list("snippet") 
         .setParentId(parentId).setTextFormat("plainText").execute(); 
       List<Comment> comments = commentsListResponse.getItems(); 

       if (comments.isEmpty()) { 
        System.out.println("Can't get comment replies."); 
       } else { 
        // Print information from the API response. 
        System.out 
          .println("\n================== Returned Comment Replies ==================\n"); 
        for (Comment commentReply : comments) { 
         snippet = commentReply.getSnippet(); 
         System.out.println(" - Author: " + snippet.getAuthorDisplayName()); 
         System.out.println(" - Comment: " + snippet.getTextDisplay()); 
         System.out 
           .println("\n-------------------------------------------------------------\n"); 
        } 
        Comment firstCommentReply = comments.get(0); 
        firstCommentReply.getSnippet().setTextOriginal("updated"); 
        Comment commentUpdateResponse = youtube.comments() 
          .update("snippet", firstCommentReply).execute(); 
        // Print information from the API response. 
        System.out 
          .println("\n================== Updated Video Comment ==================\n"); 
        snippet = commentUpdateResponse.getSnippet(); 
        System.out.println(" - Author: " + snippet.getAuthorDisplayName()); 
        System.out.println(" - Comment: " + snippet.getTextDisplay()); 
        System.out 
          .println("\n-------------------------------------------------------------\n"); 

        // Call the YouTube Data API's comments.setModerationStatus 
        // method to set moderation 
        // status of an existing comment. 
        youtube.comments().setModerationStatus(firstCommentReply.getId(), "published"); 
        System.out.println(" - Changed comment status to published: " 
          + firstCommentReply.getId()); 

        // Call the YouTube Data API's comments.markAsSpam method to 
        // mark an existing comment as spam. 
        youtube.comments().markAsSpam(firstCommentReply.getId()); 
        System.out.println(" - Marked comment as spam: " + firstCommentReply.getId()); 

        // Call the YouTube Data API's comments.delete method to 
        // delete an existing comment. 
        youtube.comments().delete(firstCommentReply.getId()); 
        System.out 
          .println(" - Deleted comment as spam: " + firstCommentReply.getId()); 
       } 
      } 
     } catch (GoogleJsonResponseException e) { 
      System.err.println("GoogleJsonResponseException code: " + e.getDetails().getCode() 
        + " : " + e.getDetails().getMessage()); 
      e.printStackTrace(); 

     } catch (IOException e) { 
      System.err.println("IOException: " + e.getMessage()); 
      e.printStackTrace(); 
     } catch (Throwable t) { 
      System.err.println("Throwable: " + t.getMessage()); 
      t.printStackTrace(); 
     } 
    } 

    /* 
    * Prompt the user to enter a video ID. Then return the ID. 
    */ 
    private static String getVideoId() throws IOException { 

     String videoId = ""; 

     System.out.print("Please enter a video id: "); 
     BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in)); 
     videoId = bReader.readLine(); 

     return videoId; 
    } 

    /* 
    * Prompt the user to enter text for a comment. Then return the text. 
    */ 
    private static String getText() throws IOException { 

     String text = ""; 

     System.out.print("Please enter a comment text: "); 
     BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in)); 
     text = bReader.readLine(); 

     if (text.length() < 1) { 
      // If nothing is entered, defaults to "YouTube For Developers." 
      text = "YouTube For Developers."; 
     } 
     return text; 
    } 
} 

Weitere Informationen finden Sie in diesem Zusammenhang SO question.

+0

ich den gleichen Code bin versucht, die etwa 25 Kommentare gibt, wollen, was ich jetzt alle Kommentare ist abrufen, – Priyamal

+0

Sie können die optionale paremeter eingestellt maxResults. Der Parameter maxResults gibt die maximale Anzahl der Elemente an, die in der Ergebnismenge zurückgegeben werden sollen. Hinweis: Dieser Parameter wird nicht zur Verwendung in Verbindung mit dem ID-Parameter unterstützt. Akzeptable Werte sind 1 bis einschließlich 100. Der Standardwert ist 20. – KENdi

Verwandte Themen