introbotics’s blog

人工知能、機械の心について思いついたことを並べてます

スポンサーリンク

youtubeAPIを使ってyoutubeのライブ配信のチャットを取得(Visual Studio C++)② youtubeAPIの準備+概要

youtubeAPIを使ってyoutubeのライブ配信のチャットを取得する方法②

youtubeAPIの準備+概要

概要

ライブ配信のコメントをC++で取得するには、youtubeAPIへ接続する必要があります。

本記事ではAPIへの接続準備、および取得できる情報の形式についてのメモを行います。

 

なお、APIは外部サイトのURLへアクセスする必要があります

VisualC++の場合、デフォルトではURLへアクセスする機能がありません

 

従って下記curlを利用してアクセスしています

Visual C++にcurl(libcurl)を導入する方法 - introbotics’s blog

■youtubeのAPIキーを取得 ※googleアカウントが必要

https://console.developers.google.com にアクセス

・「CREATE ボタン」を押して、プロジェクトを作成します。

 プロジェクト名は何でもよい。
 場所(location)も指定なし
 作成を選択しプロジェクト作成

・右上の通知マークから、作成したプロジェクトを選択

・APIの概要(Go to APIs overview) を選択

・APIとサービスの有効化 を選択

・APIライブラリへようこそ の画面へ移動するので、
 検索欄に youtube と入力し、 YouTube Data API v3 を選択

 有効 をクリック

・概要ページへ移動するので、認証情報を作成 を選択

・プロジェクトへの認証情報の追加 画面へ移動される

 下記を入力
 必要な認証情報の種類 ⇒ youtube data api v3
 APIを呼び出す場所 → その他のUI(windows デーモン)
 アクセスするデータの種類 ⇒ 一般公開データ

・APIキーが生成されるので、コピーして控える

■ライブチャットを取得APIのページへ接続

 APIは下記の形式でアクセスします

 操作(GET等) https://www.googleapis.com/youtube/v3/リソース?クエリ


※各機能に対してどんなURLを使うかは下記のような資料から探します
 https://developers.google.com/youtube/v3/docs?hl=ja

 

ライブチャットを取得するAPIは下記のような形式のAPIになります

ブラウザで表示すると情報が取得できます

最終的にはプログラムで自動取得したいので、別記事にてソース記載します

https://www.googleapis.com/youtube/v3/liveChat/messages?key=AAAAAA&part=snippet,authorDetails&liveChatId=ZJBUQORXLlM&pageToken=NULL

 

 

◆メモ
key=AAAAAA        ※APIキー
&part=snippet,authorDetails  ※コメント・ユーザ取得
&liveChatId=ZJBUQORXLlM  ※ライブチャットID
&pageToken=        ※更新用

従ってライブチャットのコメントを拾う場合、まずライブチャットIDを取得する必要があります

■livechatidを確認

下記形式のURLをブラウザで表示する事で確認可能です。

https://www.googleapis.com/youtube/v3/videos?part=liveStreamingDetails&id=xxxxxxxxxxx&key=APIキー


id=xxxxxxxxxxx

https://www.youtube.com/watch?v=xxxxxxxxxxx

のxxxxxxxxxxxの部分を入れます
自分の配信の場合、右上の共有可能なリンクを取得 から確認可能

 

実行結果例

{
"kind": "youtube#videoListResponse",
"etag": "5a3ooxiwvRHBLqtMnPxhGIrfhEc",
"items": [
{
"kind": "youtube#video",
"etag": "u6jytQN2gXw9bf5AyjnGZ_bNfBk",
"id": "IFITMt2kgBI",
"liveStreamingDetails": {
"actualStartTime": "2021-03-01T17:56:16Z",
"activeLiveChatId": "Cg0KC0lGSVRNdDJrZ0JJKicKGFVDVWtNMlQ1bVNTcXdvVHpLQjcyVjluZxILSUZJVE10MmtnQkk"
}
}
],
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
}
}


=====


"activeLiveChatId": "

"Cg0KC0lGSVRNdDJrZ0JJKicKGFVDVWtNMlQ1bVNTcXdvVHpLQjcyVjluZxILSUZJVE10MmtnQkk"

これがライブチャットidです

ライブ配信のチャットを取得

繰り返しになりますが、ライブチャット取得は下記のような形式のAPIへ接続することになります


https://www.googleapis.com/youtube/v3/liveChat/messages?key=AIzaSyAr3vYHX--Cw2aLVJ_Yn6229rILJSjifko&part=snippet,authorDetails&liveChatId=ZJBUQORXLlM&pageToken=NULL

 

◆メモ
key=AIzaSyAr3vYHX--Cw2aLVJ_Yn6229rILJSjifko ※APIキー
&part=snippet,authorDetails  ※コメント・ユーザ取得
&liveChatId=ZJBUQORXLlM  ※ライブチャットID
&pageToken=        ※更新用

 

https://www.googleapis.com/youtube/v3/liveChat/messages?
key=API_KEY
&
part=snippet,authorDetails
&
liveChatId=liveChatId
&
pageToken=pageToken

 

※part部分について

 コメントを取得するにはsnippet、
 コメント送信者を取得するにはauthorDetails

※pageToken は取得ごとにもらえる(初回はnullで全取得)

 

■ライブチャット取得URL応答結果例

{
"kind": "youtube#liveChatMessageListResponse",
"etag": "YDXiJSickUoDWZ8MpNE-ZerAmzY",
"pollingIntervalMillis": 5188,
"pageInfo": {
"totalResults": 2,
"resultsPerPage": 2
},
"nextPageToken": "GGGGGGGGGGGGGG",
"items": [
{
"kind": "youtube#liveChatMessage",
"etag": "citzOJOxEMAcSEbXSFN8KqulfOA",
"id": "LCC.CjgKDQoLSUZJVE10MmtnQkkqJwoYVUNVa00yVDVtU1Nxd29UektCNzJWOW5nEgtJRklUTXQya2dCSRI5ChpDT0w5eS1EVmotOENGYWdEclFZZHQ1Z0UxURIbQ051cXhlM1VqLThDRlJCY1lBb2RvcTRLckEw",
"snippet": {
"type": "textMessageEvent",
"liveChatId": "Cg0KC0lGSVRNdDJrZ0JJKicKGFVDVWtNMlQ1bVNTcXdvVHpLQjcyVjluZxILSUZJVE10MmtnQkk",
"authorChannelId": "UCUkM2T5mSSqwoTzKB72V9ng",
"publishedAt": "2021-03-01T17:58:05.235988+00:00",
"hasDisplayContent": true,
"displayMessage": "テスト1",
"textMessageDetails": {
"messageText": "テスト1"
}
},
"authorDetails": {
"channelId": "XXXXXXXXXXXXXXXXXXXXXXXXXXX",
"channelUrl": "http://www.youtube.com/channel/UCUkM2T5mSSqwoTzKB72V9ng",
"displayName": "チャンネル名",
"profileImageUrl": "https://yt3.ggpht.com/ytc/AAUvwnjNSjUb3psH8jfVk1A_V5iqHT-Rd4kOfW3XPdRe=s88-c-k-c0x00ffffff-no-rj",
"isVerified": false,
"isChatOwner": true,
"isChatSponsor": false,
"isChatModerator": false
}
},
{
"kind": "youtube#liveChatMessage",
"etag": "v3Ughl2Up8-wihvfJNEHj2MBFEU",
"id": "LCC.CjgKDQoLSUZJVE10MmtnQkkqJwoYVUNVa00yVDVtU1Nxd29UektCNzJWOW5nEgtJRklUTXQya2dCSRI5ChpDT25ibzZiWmotOENGUWdUclFZZHNnOEVJURIbQ0puZTlzM1dqLThDRlFoY1dBb2RYX0VLRlEw",
"snippet": {
"type": "textMessageEvent",
"liveChatId": "Cg0KC0lGSVRNdDJrZ0JJKicKGFVDVWtNMlQ1bVNTcXdvVHpLQjcyVjluZxILSUZJVE10MmtnQkk",
"authorChannelId": "UUUUUUUUUUUUUUUUUUUUUUUUUUU",
"publishedAt": "2021-03-01T18:13:56.683303+00:00",
"hasDisplayContent": true,
"displayMessage": "テスト2",
"textMessageDetails": {
"messageText": "テスト2"
}
},
"authorDetails": {
"channelId": "UCUkM2T5mSSqwoTzKB72V9ng",
"channelUrl": "http://www.youtube.com/channel/UCUkM2T5mSSqwoTzKB72V9ng",
"displayName": "チャンネル名",
"profileImageUrl": "https://yt3.ggpht.com/ytc/AAUvwnjNSjUb3psH8jfVk1A_V5iqHT-Rd4kOfW3XPdRe=s88-c-k-c0x00ffffff-no-rj",
"isVerified": false,
"isChatOwner": true,
"isChatSponsor": false,
"isChatModerator": false
}
}
]
}

 

最新のコメントのみ取得

nextpagetokenをpagetokenに入力すると、更新分のコメントだけが入手できる

{
"kind": "youtube#liveChatMessageListResponse",
"etag": "U1S6McfNKWlhtdLhq1J3I9MHfrs",
"pollingIntervalMillis": 5111,
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"nextPageToken": "GNSbxb3aj-8CIKX8-sHaj-8C",
"items": [
{
"kind": "youtube#liveChatMessage",
"etag": "rmE44vWKAaigedHDbDynPxm1m8w",
"id": "LCC.CjgKDQoLSUZJVE10MmtnQkkqJwoYVUNVa00yVDVtU1Nxd29UektCNzJWOW5nEgtJRklUTXQya2dCSRI5ChpDSWlieGIzYWotOENGYWdEclFZZHdTOEtoQRIbQ0puZTlzM1dqLThDRlFoY1dBb2RYX0VLRlEx",
"snippet": {
"type": "textMessageEvent",
"liveChatId": "Cg0KC0lGSVRNdDJrZ0JJKicKGFVDVWtNMlQ1bVNTcXdvVHpLQjcyVjluZxILSUZJVE10MmtnQkk",
"authorChannelId": "UUUUUUUUUUUUUUUUUUUUUUUU",
"publishedAt": "2021-03-01T18:19:13.902036+00:00",
"hasDisplayContent": true,
"displayMessage": "テスト3",
"textMessageDetails": {
"messageText": "テスト3"
}
},
"authorDetails": {
"channelId": "xxxxxxxxxxxxxxxxxxxxxxxxx",
"channelUrl": "http://www.youtube.com/channel/xxxxxxxxxxxx",
"displayName": "チャンネル名",
"profileImageUrl": "https://xxxxxxxx",
"isVerified": false,
"isChatOwner": true,
"isChatSponsor": false,
"isChatModerator": false
}
}
]
}

 

■参考

Youtube Data APIを使用して、Youtube Liveのコメントを取得する
※C#言語
https://qiita.com/MCK9595/items/fdbd543ff938febcd136

YouTubeライブチャットを取得する
※Python言語
https://gist.github.com/yuta0801/2e3cd3581f078d4a0f68ff3e3953c513

Youtube LiveStreaming APIで配信のコメントを取得する
※Python言語
https://blog.sky-net.pw/article/86

・Curlコマンド例
Bash と cURL で YouTube DATA API からプレイリストを取得するサンプル
https://qiita.com/KEINOS/items/e87017e47cea7165a844

PHPからCURLでYouTube APIを実行し動画データを取得
https://diy-programming.site/tools/movie-matome-site-4/#toc9


・youtube公式
YouTube Data API の概要
https://developers.google.com/youtube/v3/getting-started?hl=ja

LiveChatMessages
https://developers.google.com/youtube/v3/live/docs/liveChatMessages

LiveChatMessages:リスト
https://developers.google.com/youtube/v3/live/docs/liveChatMessages/list

Visual C++における文字コード変換
https://nekko1119.hatenablog.com/entry/2017/01/02/054629