web-dev-qa-db-ja.com

YouTubeのライブ放送中に「チャット」ボックスから入力されたコメントのフィードを取得するにはどうすればよいですか?

YouTube APIを使用すると、ユーザーはコメントフィードを取得できます。 https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published経由。

ただし、ライブストリームのビデオIDを使用してそれを実行しようとすると、コメントがいくつ送信されても​​、結果は常に空になります。ライブビデオと他のビデオ(またはライブストリームの録画)の唯一の違いは、「コメント」セクションが「チャット」ボックスに置き換えられていることです。このボックスのコメントはAPI経由では利用できないようです。

ストリームが停止すると、チャットボックスを介して送信されたすべてのコメントが完全に消え、アクセスできなくなります。ただし、ライブブロードキャストがアーカイブされた後(つまり、録画が利用可能になった後)に送信されたすべてのコメントは、コメントフィードに表示されます。

リアルタイムアプリケーションの場合、ユーザーが送信した質問を取得するために、ブロードキャストがまだライブである間に「チャット」コメントにアクセスする必要があります。

これを行う方法はありますか?

11
Marcus Wernicke

LiveChatMessages エンドポイントを一部として使用して、独自のブロードキャストのチャットメッセージを返すことができるようになりましたYouTubeライブストリーミングAPI。

新しいliveBroadcastオブジェクトを作成すると、liveChatId文字列がそのliveBroadcastsnippetの一部として返されます。ブロードキャストのチャット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}

これにより、 liveChatMessage リソースの配列が返されます。実際のチャットメッセージは、textMessageDetailsキーの値としてmessageTextディクショナリに含まれています。

"textMessageDetails": {
  "messageText": string
}
8
JAL

Ibrahim Ulukaya YouTubeAPIに焦点を当てたGoogleのDeveloperRelationsチームのメンバーは、同様の質問について次のように述べています( JavaでYoutubeライブイベントのチャットコンテンツを取得する方法 ) :

現時点では、APIはライブチャットに接続していません。そのコンテンツがすぐにAPIに組み込まれることを望んでいます。

経由 https://stackoverflow.com/a/26427743/1085891

3
JSuar

このための基本的なスクリプトを思いついた

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



        }
    }
}

コメントが流れるようにページを読ませるには、さらに多くの作業時間が必要になります。

0
DarkPh03n1X