如何在YouTube直播期间获取通过“聊天”框输入的评论摘要?

时间:2014-10-07 06:22:22

标签: youtube youtube-api youtube-livestreaming-api

YouTube API可让用户获取评论Feed,例如通过https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published

但是,当我尝试使用实时流的视频ID时,无论提交了多少条评论,结果始终为空。实时视频和任何其他视频(或直播视频的录制)之间的唯一区别是“评论”部分被“聊天”框替换,其评论似乎无法通过API获得。

当流停止时,通过聊天框提交的所有评论都会“完全消失”,无法再访问。但是,在现场直播之后提交的所有评论都已存档(即录音已经可用)显示在评论摘要中。

对于实时应用程序,我需要在广播仍然有效时访问“聊天”评论,以检索用户提交的问题。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:6)

现在可以使用LiveChatMessages端点作为YouTube直播API的一部分,返回您自己的广播的聊天消息。

创建新的liveBroadcast对象时,liveChatId字符串将作为liveBroadcast snippet的一部分返回。将您广播的聊天ID传递到LiveChatMessages/list端点的liveChatId参数,将idsnippetauthorDetails传递到{{ 1}}参数。

part

这将返回liveChatMessage个资源的数组。实际的聊天消息包含在HTTP GET https://www.googleapis.com/youtube/v3/liveChat/messages?liveChatId={liveChatId}&part=id%2C+snippet%2C+authorDetails&key={YOUR_API_KEY} 字典中,作为textMessageDetails密钥的值。

messageText

答案 1 :(得分:3)

Ibrahim Ulukaya是Google开发者关系团队的成员,专注于YouTube API,在类似的问题(How to get chat content of Youtube live event in Java)上说明如下:

  

此时API尚未与实时聊天建立联系。我们是   希望尽快将这些内容纳入API。

通过https://stackoverflow.com/a/26427743/1085891

答案 2 :(得分:0)

我想出了一个基本脚本

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);



        }
    }
}

需要更多时间工作才能使其作为评论流程阅读页面。