2014-10-07 15 views
9

L'API YouTube consente agli utenti di ottenere un feed di commenti, ad es. via https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published.Come ottenere un feed di commenti inseriti attraverso la casella "chat" durante una trasmissione live di YouTube?

Tuttavia, quando provo a farlo con l'ID video di uno streaming live, il risultato è sempre vuoto, indipendentemente dal numero di commenti inviati. L'unica differenza tra un video live e qualsiasi altro video (o la registrazione di un live stream) è che la sezione "commenti" viene sostituita con una casella "chat", i cui commenti sembrano non essere disponibili tramite l'API.

Quando lo streaming viene interrotto, tutti i commenti inviati tramite la casella di chat "scompaiono" completamente e non è più possibile accedervi. Tuttavia, tutti i commenti inviati dopo che la trasmissione dal vivo è stata archiviata (ovvero la registrazione è stata resa disponibile) vengono visualizzati nel feed dei commenti.

Per un'applicazione in tempo reale è necessario accedere ai commenti di "chat" mentre la trasmissione è ancora in diretta, per recuperare le domande inviate dagli utenti.

C'è un modo per farlo?

+0

Per un breve periodo di tempo, è possibile utilizzare https://www.youtube.com/live_chat?v=VID_ID&embed_domain=www.example.com Si lavora per un po ', ma giorno dopo erano andati – netdragon

risposta

4

E 'ora possibile restituire i messaggi di chat per le proprie trasmissioni utilizzando il LiveChatMessages endpoint come parte della API di YouTube Live Streaming.

Quando si crea un nuovo oggetto liveBroadcast, una stringa liveChatId verrà restituito come parte di quel liveBroadcast s' snippet. Passa l'ID chat della tua trasmissione al parametro liveChatId dell'endpoint liveChatId e id, snippet e authorDetails nel parametro part.

HTTP GET https://www.googleapis.com/youtube/v3/liveChat/messages?liveChatId={liveChatId}&part=id%2C+snippet%2C+authorDetails&key={YOUR_API_KEY} 

Ciò restituirà un array di risorse liveChatMessage. Il messaggio chat effettivo è contenuto nel dizionario textMessageDetails come valore per la chiave messageText.

"textMessageDetails": { 
    "messageText": string 
} 
+0

Potresti per favore dare un metodo C# per questo ?? – DarkPh03n1X

+0

@ DarkPh03n1X con cosa stai avendo problemi? La richiesta web? Forse dovresti fare una nuova domanda. – JAL

+1

Perché non tutte le trasmissioni sono disponibili? Non ci sono trasmissioni private, giusto? – DJV

0

mi si avvicinò con un Basic Script per questo

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Net; 
using System.IO; 
using System.Text.RegularExpressions; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 

namespace test 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      Starting(); 
     } 

     public void Starting() 
     { 
      IWebDriver driver = new ChromeDriver(); 
      driver.Navigate().GoToUrl("https://www.youtube.com/watch?v=Yu5Om0SH3No"); 

      Thread.Sleep(10000); 

      //Find Comments 
      IWebElement element = driver.FindElement(By.ClassName("comment-text")); 
      Console.WriteLine("Text: " + element.Text); 

      //Find User names 
      IWebElement element2 = driver.FindElement(By.XPath(".//*[@class='g-hovercard yt-uix-sessionlink yt-user-name']")); 
      Console.WriteLine("Username: " + element2.Text); 



     } 
    } 
} 

avrà bisogno di più ore di lavoro per renderlo leggere la pagina come i commenti di flusso.

+0

Perché sono Hai scritto nel caso di una sentenza come Jaden Smith? –

+0

Ma seriamente, questo non è davvero il metodo migliore per farlo. È lento, è molto probabile che si interrompa quando modificano qualsiasi markup, non otterrà tutti i commenti, solo quelli visibili, ecc. –

+0

L'ho fatto utilizzando l'API di Google. quando l'API di google lo supportava un paio di mesi fa.Per quanto riguarda la tua prima domanda, non ho idea di cosa stai parlando. – DarkPh03n1X