如何在 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 字符串将作为liveBroadcastsnippet 的一部分返回。将广播的聊天 ID 传递给LiveChatMessages/list 端点的liveChatId 参数,并将idsnippetauthorDetails 传递给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“实时聊天”直接网址

使用 YouTube API,如何从频道名称中获取直播的视频 ID?

您如何使用 YouTube 数据 API 获取过去的直播流

如何在 android 的 Youtube API V3 中按频道 ID 获取 Youtube 直播?

如何在 youtube 上获取可下载的直播视频 URL