如何在 YouTube 直播期间获取通过“聊天”框输入的评论源?
Posted
技术标签:
【中文标题】如何在 YouTube 直播期间获取通过“聊天”框输入的评论源?【英文标题】:How to obtain a feed of comments entered through the 'chat' box during a YouTube live broadcast? 【发布时间】:2014-12-01 12:13:41 【问题描述】:YouTube API 使用户能够获取 cmets 供稿,例如通过https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published
。
但是,当我尝试使用直播的视频 ID 执行此操作时,无论提交了多少个 cmets,结果始终为空。直播视频与任何其他视频(或直播视频录制)之间的唯一区别是“cmets”部分被替换为“聊天”框,其 cmets 似乎无法通过 API 获得。
流停止后,通过聊天框提交的所有 cmets 将完全“消失”,无法再访问。但是,所有在直播存档后提交的 cmets(即已提供录制文件)都会显示在 cmets Feed 中。
对于实时应用程序,我需要在直播期间访问“聊天”cmets,以检索用户提交的问题。
有什么办法吗?
【问题讨论】:
短时间可以用youtube.com/live_chat?v=VID_ID&embed_domain=www.example.com 用了一段时间,第二天就没了 【参考方案1】:编辑:注意这是使用 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);
需要更多时间才能使其在 cmets 流动时读取页面。
【讨论】:
你为什么要像 Jaden Smith 那样写句子? 但是说真的,这真的不是最好的方法。它很慢,当他们更改任何标记时很可能会中断,它不会得到所有的 cmets,只有那些可见的,等等。 我实际上是使用 google 的 api 完成的。当谷歌的 api 几个月前支持它时。至于你的第一个问题,我不知道你在说什么。【参考方案2】:现在可以使用 LiveChatMessages
端点作为 YouTube Live Streaming 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
【讨论】:
你能给个C#方法吗?? @DarkPh03n1X 你有什么问题?网络请求?也许你应该问一个新问题。 为什么不是所有的广播都可用?没有私人广播,对吧? 自发布答案以来已经过去了五年。情况变了?我们还必须坚持使用 Selenium 来获取其他人的直播聊天吗?【参考方案3】:Ibrahim Ulukaya,一位专注于 YouTube API 的 Google 开发者关系团队成员,在类似的问题 (How to get chat content of Youtube live event in Java) 上发表了以下声明:
API 目前没有与实时聊天的连接。我们是 希望尽快将该内容整合到 API 中。
通过https://***.com/a/26427743/1085891
【讨论】:
以上是关于如何在 YouTube 直播期间获取通过“聊天”框输入的评论源?的主要内容,如果未能解决你的问题,请参考以下文章
Youtube [Data-API] LiveChat,登录用户为版主
使用 YouTube API,如何从频道名称中获取直播的视频 ID?