2016-02-16 15 views
8

Bir YouTube programı kullanarak YouTube videosundaki tüm yorumları almaya çalışıyorum. Tüm yorumları yerine "Daha Fazla Göster" olduğu için onları alamıyorum. İçine girebileceğim tüm yorumların veya yorumların sayfalarını almanın bir yolunu arıyorum. Bir video kimliğim ve bazı şeyler var, sadece yorumlara ihtiyacım var.Bir YouTube videosundaki tüm yorumları görüntüle

URL'de izlemek yerine all_comments'ı denedim, ancak tüm yorumları hala göstermiyor ve tekrar izlemek için yeniden yönlendiriyor.

Ayrıca, YouTube API'sine de baktım ve yalnızca kimlikleriyle nasıl yorum alabileceğimizi bulabilirim ancak bir video kimliğindeki tüm yorumları almam gerekiyor.

Bunu nasıl yapacağını bilen varsa lütfen bana söyleyin.

Bana bunun için iyi bir cevap verebilecek bir 50 rep ödül ekledim.

+0

ilginç im de bir cevap – KillBill

+2

Hmm için ileriye dönük. Eğer 6 saat içinde cevap verilmezse bir ödül vereceğim. – bwfcwalshy

+0

Muhtemelen herkesin kefil olmasının beklenmesi gerekiyor: D –

cevap

4

Videonuz için açıklama ipler liste isteği almak ve ardından son yanıttan sonraki sayfa jetonu kullanarak ileriye kaydırmak gerekir: Bir örnek iskelet proje gerekiyorsa

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(); 
    } 
} 

, api-samples düşünün.


Güncelleme

tüm yorumlar da (en azından ben bunu karşılaştığı) quota limits neden olabilir alamayan durum:

  • birimleri/gün 50.000.000
  • units/100seconds/kullanıcı 300.000

Bu bir java, python, js veya herhangi bir dile özgü kurallar değildir. Kotanın yukarısına çıkmak istiyorsanız, apply for higher quota'u deneyemezsiniz. Yine de, üretiminizi kontrol etmekten başlıyorum. 100seconds/kullanıcı kotasının üst kısmına çıkmak çok kolaydır.

+0

Bu yaklaşımla tarayabileceğiniz yorumların hiçbiri için bir sınır yoktur. – KillBill

+0

'un sayfa boyutunu ".setMaxResults()" ile sınırlandıracağından şüpheliyim. Bu onların api bir parçası, bu yüzden python istemcisi de kullanabilirsiniz. –

+0

Bir videoda 1M yorumlar varsa, bunların hepsini indirebilir miyim? api'nin bu – KillBill

2

bunu denedim, test ettiğim belirli bir video için tüm yorumları indirebilir.

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! 

çıktı JSON biçimindedir:

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

Evet, bir tanesi çalışıyor! YouTube API kimlik bilgileri ve kota sınırlamaları olmadan da :-) :-) Bu tür meta değerler aldığım halde biraz komik: {"text": "Mega Madness \ ufeff", "time": "vor 1 Woche" , "yazar": "Jessica Fischer", "cid": "z135hboyasa2j1rgy04cgdrwxmunhdvajqg0k"} –

+0

ancak bu betik, indirilecek yorum sayısı arttıkça çok yavaşlar. YT API çok daha hızlı. – KillBill

İlgili konular