YouTube APIを使用すると、ユーザーはコメントフィードを取得できます。 https://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments?orderby=published
経由。
ただし、ライブストリームのビデオIDを使用してそれを実行しようとすると、コメントがいくつ送信されても、結果は常に空になります。ライブビデオと他のビデオ(またはライブストリームの録画)の唯一の違いは、「コメント」セクションが「チャット」ボックスに置き換えられていることです。このボックスのコメントはAPI経由では利用できないようです。
ストリームが停止すると、チャットボックスを介して送信されたすべてのコメントが完全に消え、アクセスできなくなります。ただし、ライブブロードキャストがアーカイブされた後(つまり、録画が利用可能になった後)に送信されたすべてのコメントは、コメントフィードに表示されます。
リアルタイムアプリケーションの場合、ユーザーが送信した質問を取得するために、ブロードキャストがまだライブである間に「チャット」コメントにアクセスする必要があります。
これを行う方法はありますか?
LiveChatMessages
エンドポイントを一部として使用して、独自のブロードキャストのチャットメッセージを返すことができるようになりましたYouTubeライブストリーミング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
}
Ibrahim Ulukaya YouTubeAPIに焦点を当てたGoogleのDeveloperRelationsチームのメンバーは、同様の質問について次のように述べています( JavaでYoutubeライブイベントのチャットコンテンツを取得する方法 ) :
現時点では、APIはライブチャットに接続していません。そのコンテンツがすぐに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);
}
}
}
コメントが流れるようにページを読ませるには、さらに多くの作業時間が必要になります。