質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1404閲覧

YouTubeのLIve配信動画におけるチャットコメントを習得するプログラムをUnity上で作成していますが、うまくいきません。

rinrinsan

総合スコア6

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/03/03 02:16

編集2020/03/03 02:44

タイトルにも書きましたが、YoutubeのLIve配信での視聴者のチャットコメントを習得するプログラムを以下のサイトを参考にして作っていますが、このサイトのプログラムで実行をしますと、デバッグログには次のように表示されます。

・参考サイト
https://qiita.com/n0mimono/items/0c2921c9b964cd305fe3

・ソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using System.Threading; 4using System; 5using System.Net; 6using System.Text.RegularExpressions; 7using UnityEngine; 8using UnityEngine.Networking; 9using SimpleJSON; 10 11public class YouTubeLiveController : MonoBehaviour { 12 13 IEnumerator Start() { 14 var clientId = "僕のクライアントID"; 15 var clientSecret = "僕のクライアントシークレット"; 16 17 var code = ""; 18 LocalServer (c => code = c); 19 20 var authUrl = "https://accounts.google.com/o/oauth2/v2/auth?response_type=code" 21 + "&client_id=" + clientId 22 + "&redirect_uri=" + "http://localhost:8080" 23 + "&scope=" + "https://www.googleapis.com/auth/youtube.readonly" 24 + "&access_type=" + "offline"; 25 Application.OpenURL (authUrl); 26 yield return new WaitUntil (() => code != ""); 27 28 Debug.Log (code); 29 30 var tokenUrl = "https://www.googleapis.com/oauth2/v4/token"; 31 var content = new Dictionary<string,string> () { 32 { "code", code }, 33 { "client_id", clientId }, 34 { "client_secret", clientSecret }, 35 { "redirect_uri", "http://localhost:8080" }, 36 { "grant_type", "authorization_code" }, 37 { "access_type", "offline" }, 38 }; 39 var request = UnityWebRequest.Post (tokenUrl, content); 40 yield return request.SendWebRequest(); 41 42 var json = JSON.Parse (request.downloadHandler.text); 43 var token = json["access_token"].RawString(); 44 45 Debug.Log (token); 46 47 var url = "https://www.googleapis.com/youtube/v3/liveBroadcasts?part=snippet"; 48 url += "&id=" + "5iyt8IgOBOI"; // watch?v= 以降のクエリを入力 49 50 var req = UnityWebRequest.Get (url); 51 req.SetRequestHeader ("Authorization", "Bearer " + token); 52 yield return req.SendWebRequest(); 53 54 json = JSON.Parse (req.downloadHandler.text); 55 var chatId = json["items"][0]["snippet"]["liveChatId"].RawString(); 56 57 Debug.Log (chatId); 58 59 url = "https://www.googleapis.com/youtube/v3/liveChat/messages?part=snippet,authorDetails"; 60 url += "&liveChatId=" + chatId; 61 62 req = UnityWebRequest.Get (url); 63 req.SetRequestHeader ("Authorization", "Bearer " + token); 64 yield return req.SendWebRequest(); 65 66 json = JSON.Parse (req.downloadHandler.text); 67 var items = json["items"]; 68 69 foreach (var item in items) { 70 var snip = item.Value ["snippet"]; 71 var author = item.Value["authorDetails"]; 72 Debug.Log (author ["displayName"].RawString () + ": " 73 + snip ["displayMessage"].RawString()); 74 } 75 Debug.Log (json["nextPageToken"]); 76 } 77 78 void LocalServer(Action<string> onReceive) { 79 ThreadStart start = () => { 80 try { 81 var listener = new HttpListener(); 82 listener.Prefixes.Add("http://*:8080/"); 83 listener.Start(); 84 85 var context = listener.GetContext(); 86 var req = context.Request; 87 var res = context.Response; 88 89 var re = new Regex (@"/?code=(?<c>.*)"); 90 var code = re.Match (req.RawUrl).Groups ["c"].ToString(); 91 onReceive(code); 92 93 res.StatusCode = 200; 94 res.Close(); 95 } catch (Exception e) { 96 Debug.LogError(e); 97 } 98 }; 99 new Thread (start).Start (); 100 } 101 102} 103 104public static class SimpleJsonUtility { 105 public static string RawString(this JSONNode node) { 106 var len = node.ToString ().Length - 2; 107 return node.ToString ().Substring (1, len); 108 } 109}

イメージ説明

このDebagログはソースコードにおける28行目、45行目、57行目、75行目です。

C#

1Debug.Log (code); 2Debug.Log (token); 3Debug.Log (chatId); 4Debug.Log (json["nextPageToken"]);

YoutubeApisはすでに有効にしており、認証も済んでいるので何が問題なのかわかりません。

対象としている動画はこちらになります。
https://www.youtube.com/watch?v=5iyt8IgOBOI

問題点と解決策をご教示していただきたいです。どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2020/03/03 02:28

「ul」と「null」はスクリプトのどの部分に当たりますか? もし参考サイトのコードから改変している部分があるならそれを質問に追記してください。
rinrinsan

2020/03/03 02:35

ご回答ありがとうございます。修正いたしましたのでご確認をよろしくお願いたします。
sakura_hana

2020/03/04 01:50

「Debug.Log (chatId);」の直前辺りで「Debug.Log(req.downloadHandler.text);」を追加して、表示されるデータを確認してみてください。(=JSON変換される前のデータを確認してエラーなどが無いか見る) また、参考サイトに「対象にしている動画がライブ中でない(かそもそもライブでない)場合はliveChatIdがレスポンスの中に含まれません。」とあるので、ライブ中ではない場合そもそもデータが取得出来ないのではないかと思います。現在ライブ中の違う動画を使用してみてください。
rinrinsan

2020/03/04 09:00

迅速なご回答ありがとうございます。どうやら配信中じゃないことが理由だったみたいです・・・・。 とても助かりました。またよろしくお願いいたします。
guest

回答1

0

自己解決

ライブ配信中のみしかとれなかったみたいです・・・笑

投稿2020/03/04 09:01

rinrinsan

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問