質問編集履歴

3

コードを追加した。

2020/03/03 02:44

投稿

rinrinsan
rinrinsan

スコア6

test CHANGED
File without changes
test CHANGED
@@ -240,7 +240,17 @@
240
240
 
241
241
  このDebagログはソースコードにおける28行目、45行目、57行目、75行目です。
242
242
 
243
-
243
+ ```C#
244
+
245
+ Debug.Log (code);
246
+
247
+ Debug.Log (token);
248
+
249
+ Debug.Log (chatId);
250
+
251
+ Debug.Log (json["nextPageToken"]);
252
+
253
+ ```
244
254
 
245
255
 
246
256
 

2

コードを追加した。

2020/03/03 02:44

投稿

rinrinsan
rinrinsan

スコア6

test CHANGED
File without changes
test CHANGED
@@ -2,16 +2,248 @@
2
2
 
3
3
 
4
4
 
5
- 参考サイト
5
+ 参考サイト
6
6
 
7
7
  https://qiita.com/n0mimono/items/0c2921c9b964cd305fe3
8
8
 
9
9
 
10
10
 
11
+ ・ソースコード
12
+
13
+ ```C#
14
+
15
+ using System.Collections;
16
+
17
+ using System.Collections.Generic;
18
+
19
+ using System.Threading;
20
+
21
+ using System;
22
+
23
+ using System.Net;
24
+
25
+ using System.Text.RegularExpressions;
26
+
27
+ using UnityEngine;
28
+
29
+ using UnityEngine.Networking;
30
+
31
+ using SimpleJSON;
32
+
33
+
34
+
35
+ public class YouTubeLiveController : MonoBehaviour {
36
+
37
+
38
+
39
+ IEnumerator Start() {
40
+
41
+ var clientId = "僕のクライアントID";
42
+
43
+ var clientSecret = "僕のクライアントシークレット";
44
+
45
+
46
+
47
+ var code = "";
48
+
49
+ LocalServer (c => code = c);
50
+
51
+
52
+
53
+ var authUrl = "https://accounts.google.com/o/oauth2/v2/auth?response_type=code"
54
+
55
+ + "&client_id=" + clientId
56
+
57
+ + "&redirect_uri=" + "http://localhost:8080"
58
+
59
+ + "&scope=" + "https://www.googleapis.com/auth/youtube.readonly"
60
+
61
+ + "&access_type=" + "offline";
62
+
63
+ Application.OpenURL (authUrl);
64
+
65
+ yield return new WaitUntil (() => code != "");
66
+
67
+
68
+
69
+ Debug.Log (code);
70
+
71
+
72
+
73
+ var tokenUrl = "https://www.googleapis.com/oauth2/v4/token";
74
+
75
+ var content = new Dictionary<string,string> () {
76
+
77
+ { "code", code },
78
+
79
+ { "client_id", clientId },
80
+
81
+ { "client_secret", clientSecret },
82
+
83
+ { "redirect_uri", "http://localhost:8080" },
84
+
85
+ { "grant_type", "authorization_code" },
86
+
87
+ { "access_type", "offline" },
88
+
89
+ };
90
+
91
+ var request = UnityWebRequest.Post (tokenUrl, content);
92
+
93
+ yield return request.SendWebRequest();
94
+
95
+
96
+
97
+ var json = JSON.Parse (request.downloadHandler.text);
98
+
99
+ var token = json["access_token"].RawString();
100
+
101
+
102
+
103
+ Debug.Log (token);
104
+
105
+
106
+
107
+ var url = "https://www.googleapis.com/youtube/v3/liveBroadcasts?part=snippet";
108
+
109
+ url += "&id=" + "5iyt8IgOBOI"; // watch?v= 以降のクエリを入力
110
+
111
+
112
+
113
+ var req = UnityWebRequest.Get (url);
114
+
115
+ req.SetRequestHeader ("Authorization", "Bearer " + token);
116
+
117
+ yield return req.SendWebRequest();
118
+
119
+
120
+
121
+ json = JSON.Parse (req.downloadHandler.text);
122
+
123
+ var chatId = json["items"][0]["snippet"]["liveChatId"].RawString();
124
+
125
+
126
+
127
+ Debug.Log (chatId);
128
+
129
+
130
+
131
+ url = "https://www.googleapis.com/youtube/v3/liveChat/messages?part=snippet,authorDetails";
132
+
133
+ url += "&liveChatId=" + chatId;
134
+
135
+
136
+
137
+ req = UnityWebRequest.Get (url);
138
+
139
+ req.SetRequestHeader ("Authorization", "Bearer " + token);
140
+
141
+ yield return req.SendWebRequest();
142
+
143
+
144
+
145
+ json = JSON.Parse (req.downloadHandler.text);
146
+
147
+ var items = json["items"];
148
+
149
+
150
+
151
+ foreach (var item in items) {
152
+
153
+ var snip = item.Value ["snippet"];
154
+
155
+ var author = item.Value["authorDetails"];
156
+
157
+ Debug.Log (author ["displayName"].RawString () + ": "
158
+
159
+ + snip ["displayMessage"].RawString());
160
+
161
+ }
162
+
163
+ Debug.Log (json["nextPageToken"]);
164
+
165
+ }
166
+
167
+
168
+
169
+ void LocalServer(Action<string> onReceive) {
170
+
171
+ ThreadStart start = () => {
172
+
173
+ try {
174
+
175
+ var listener = new HttpListener();
176
+
177
+ listener.Prefixes.Add("http://*:8080/");
178
+
179
+ listener.Start();
180
+
181
+
182
+
183
+ var context = listener.GetContext();
184
+
185
+ var req = context.Request;
186
+
187
+ var res = context.Response;
188
+
189
+
190
+
191
+ var re = new Regex (@"/?code=(?<c>.*)");
192
+
193
+ var code = re.Match (req.RawUrl).Groups ["c"].ToString();
194
+
195
+ onReceive(code);
196
+
197
+
198
+
199
+ res.StatusCode = 200;
200
+
201
+ res.Close();
202
+
203
+ } catch (Exception e) {
204
+
205
+ Debug.LogError(e);
206
+
207
+ }
208
+
209
+ };
210
+
211
+ new Thread (start).Start ();
212
+
213
+ }
214
+
215
+
216
+
217
+ }
218
+
219
+
220
+
221
+ public static class SimpleJsonUtility {
222
+
223
+ public static string RawString(this JSONNode node) {
224
+
225
+ var len = node.ToString ().Length - 2;
226
+
227
+ return node.ToString ().Substring (1, len);
228
+
229
+ }
230
+
231
+ }
232
+
233
+ ```
234
+
235
+
236
+
11
237
  ![イメージ説明](a385f50ead993654489f5a211e6b3395.png)
12
238
 
13
239
 
14
240
 
241
+ このDebagログはソースコードにおける28行目、45行目、57行目、75行目です。
242
+
243
+
244
+
245
+
246
+
15
247
  YoutubeApisはすでに有効にしており、認証も済んでいるので何が問題なのかわかりません。
16
248
 
17
249
 

1

参考URLを追加した

2020/03/03 02:35

投稿

rinrinsan
rinrinsan

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,10 @@
1
1
  タイトルにも書きましたが、YoutubeのLIve配信での視聴者のチャットコメントを習得するプログラムを以下のサイトを参考にして作っていますが、このサイトのプログラムで実行をしますと、デバッグログには次のように表示されます。
2
+
3
+
4
+
5
+ 参考サイト
6
+
7
+ https://qiita.com/n0mimono/items/0c2921c9b964cd305fe3
2
8
 
3
9
 
4
10