Mit der YouTube-API können Benutzer einen Kommentar-Feed abrufen, z. über https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published
.
Wenn ich jedoch versuche, genau das mit der Video-ID eines Live-Streams zu tun, ist das Ergebnis immer leer, egal wie viele Kommentare eingereicht wurden. Der einzige Unterschied zwischen einem Live-Video und einem anderen Video (oder der Aufzeichnung eines Live-Streams) besteht darin, dass der Abschnitt "Kommentare" durch ein "Chat" -Feld ersetzt wird, dessen Kommentare scheinbar nicht über die API verfügbar sind.
Wenn der Stream gestoppt wird, verschwinden alle Kommentare, die über das Chat-Feld gesendet werden, vollständig und es kann nicht mehr auf sie zugegriffen werden. Alle Kommentare, die nach der Archivierung der Live-Übertragung eingereicht wurden (d. H. Die Aufzeichnung wurde verfügbar gemacht), werden jedoch im Kommentar-Feed angezeigt.
Für eine Echtzeitanwendung muss ich auf die "Chat" -Kommentare zugreifen, während die Sendung noch live ist, um vom Benutzer eingereichte Fragen abzurufen.
Gibt es eine Möglichkeit, dies zu tun?
Es ist jetzt möglich, Chat-Nachrichten für Ihre eigenen Broadcasts über den Endpunkt LiveChatMessages
als Teil der YouTube Live Streaming-API zurückzugeben.
Beim Erstellen eines neuen liveBroadcast
-Objekts wird eine liveChatId
-Zeichenfolge als Teil der liveBroadcast
der snippet
zurückgegeben. Übergeben Sie die Chat-ID Ihres Broadcasts an den Parameter liveChatId
des LiveChatMessages/list
-Endpunkts und id
, snippet
und authorDetails
an den Parameter part
.
HTTP GET https://www.googleapis.com/youtube/v3/liveChat/messages?liveChatId={liveChatId}&part=id%2C+snippet%2C+authorDetails&key={YOUR_API_KEY}
Dies gibt ein Array von liveChatMessage
resources zurück. Die eigentliche Chat-Nachricht ist im textMessageDetails
-Wörterbuch als Wert für den messageText
-Schlüssel enthalten.
"textMessageDetails": {
"messageText": string
}
Ibrahim Ulukaya , ein Mitglied des Google Developer Relations-Teams, das sich auf die YouTube-API konzentriert, äußerte sich zu einer ähnlichen Frage ( So erhalten Sie Chat-Inhalte von Youtube-Live-Events in Java ):
Die API hat momentan keine Verbindung zum Live-Chat. Wir hoffen, dass der Inhalt bald in die API aufgenommen werden kann.
Dafür habe ich ein Basic Script erstellt
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);
}
}
}
Benötigt mehr Arbeitsstunden, um die Seite lesen zu lassen, während der Kommentarfluss angezeigt wird.