YouTube API允许用户获取评论源,例如通过https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published
。
然而,当我试图用直播流的视频ID来做这件事时,无论提交了多少评论,结果总是空的。直播视频与任何其他视频(或直播流的录制)之间的唯一区别是,"评论"部分被替换为"聊天"框,其评论似乎无法通过API获得。
当流停止时,所有通过聊天框提交的评论都会完全"消失",无法再访问。然而,在直播存档后提交的所有评论(即录音已可用)都会显示在评论源中。
对于实时应用程序,我需要在直播时访问"聊天"评论,以检索用户提交的问题。
有办法做到这一点吗?
现在可以使用LiveChatMessages
端点作为YouTube直播API的一部分,为您自己的广播返回聊天消息。
创建新的liveBroadcast
对象时,将返回一个liveChatId
字符串作为该liveBroadcast
的snippet
的一部分。将广播的聊天ID传递给LiveChatMessages/list
端点的liveChatId
参数,将id
、snippet
和authorDetails
传递给part
参数。
HTTP GET https://www.googleapis.com/youtube/v3/liveChat/messages?liveChatId={liveChatId}&part=id%2C+snippet%2C+authorDetails&key={YOUR_API_KEY}
这将返回一个liveChatMessage
资源数组。实际聊天消息被包含在textMessageDetails
字典中作为messageText
密钥的值。
"textMessageDetails": {
"messageText": string
}
Ibrahim Ulukaya,专注于YouTube API的Google开发人员关系团队的成员,在一个类似的quesiton(如何在Java中获得YouTube直播活动的聊天内容)上陈述了以下内容:
API目前没有连接到实时聊天。我们是希望很快将这些内容纳入API。
通过https://stackoverflow.com/a/26427743/1085891
编辑:请注意,这是使用Selenium,这是在youtube的api支持它之前发布的,而不是查看其他答案以获得更好的支持
我想出了这个的基本脚本
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);
}
}
}
将需要更多的工作时间,使其在评论流中阅读页面。