15

YouTube API 使用户能够获得评论提要,例如通过https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published.

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

当流停止时,通过聊天框提交的所有评论完全“消失”,无法再访问。但是,所有在直播存档后提交的评论(即录制内容已提供)都会显示在评论源中。

对于实时应用程序,我需要在直播期间访问“聊天”评论,以检索用户提交的问题。

有没有办法做到这一点?

4

3 回答 3

10

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

创建新liveBroadcast对象时,liveChatId将返回一个 String 作为 thatliveBroadcast的一部分snippet。将广播的聊天 ID 传递给LiveChatMessages/list端点的liveChatId参数,并将idsnippet和传递authorDetailspart参数。

HTTP GET https://www.googleapis.com/youtube/v3/liveChat/messages?liveChatId={liveChatId}&part=id%2C+snippet%2C+authorDetails&key={YOUR_API_KEY}

这将返回一个资源数组liveChatMessagetextMessageDetails实际的聊天消息作为键的值包含在字典中messageText

"textMessageDetails": {
  "messageText": string
}
于 2015-12-23T14:47:38.910 回答
4

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

API 目前没有与实时聊天的连接。我们希望尽快将这些内容整合到 API 中。

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

于 2014-12-08T14:04:54.053 回答
0

编辑:注意这是使用 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);

            
            
        }
    }
}

将需要更多的工作时间才能使其在评论流中阅读页面。

于 2015-09-09T17:26:49.873 回答