回答編集履歴
45
test
CHANGED
@@ -141,8 +141,10 @@
|
|
141
141
|
}
|
142
142
|
```
|
143
143
|
という形式のデータが返ってくることがわかります。
|
144
|
+
|
144
|
-
|
145
|
+

|
146
|
+
|
145
|
-
さらに「CourseWork」オブジェクトの中身を知りたいので、「CourseWork」の青色のリンクをクリックすると、[このページ](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork#resource:-coursework) にジャンプします。
|
147
|
+
さらに「CourseWork」オブジェクトの中身を知りたいので、「object (CourseWork)」の青色のリンクをクリックすると、[このページ](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork#resource:-coursework) にジャンプします。
|
146
148
|
|
147
149
|
これを読むと、title がコースワークのタイトル、description がコースワークの説明文に該当するらしいことがわかります。
|
148
150
|
|
44
test
CHANGED
@@ -119,14 +119,15 @@
|
|
119
119
|
function showCourseWorks() {
|
120
120
|
const params = {orderBy: 'updateTime desc'}; // クエリパラメータ
|
121
121
|
const response = Classroom.Courses.CourseWork.list('コースID', params); // 「コースID」は、パスパラメータです。実際にはアクセス可能なコースIDに置き換えてください。
|
122
|
+
console.log(response)
|
122
123
|
}
|
123
124
|
```
|
124
125
|
|
125
126
|
|
126
127
|
---
|
127
128
|
|
128
|
-
これで、正常にデータが取得できていれば、
|
129
|
+
これで、正常にデータが取得できていれば、ずらずらっと表示されるはずです。
|
129
|
-
どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目に書いてあります。
|
130
|
+
どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目にも書いてあります。
|
130
131
|
|
131
132
|
[先のページのこの部分](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#response-body)によると、レスポンス本文として
|
132
133
|
```json
|
43
test
CHANGED
@@ -94,9 +94,9 @@
|
|
94
94
|
```
|
95
95
|
(これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明が冗長となるため省略します。とにかくコースIDを取得できないことには始まらないので。このコードを作るまでの調べ方は、基本的には以降に書いてある手順と同じです)
|
96
96
|
|
97
|
-
そ
|
97
|
+
それでは、質問文に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使ったコードを、下記のように調べながら実装していきましょう。
|
98
98
|
|
99
|
-
|
99
|
+
ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
|
100
100
|

|
101
101
|
|
102
102
|
|
42
test
CHANGED
@@ -117,8 +117,8 @@
|
|
117
117
|
(※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
|
118
118
|
```js
|
119
119
|
function showCourseWorks() {
|
120
|
-
const
|
120
|
+
const params = {orderBy: 'updateTime desc'}; // クエリパラメータ
|
121
|
-
const response = Classroom.Courses.CourseWork.list('コースID',
|
121
|
+
const response = Classroom.Courses.CourseWork.list('コースID', params); // 「コースID」は、パスパラメータです。実際にはアクセス可能なコースIDに置き換えてください。
|
122
122
|
}
|
123
123
|
```
|
124
124
|
|
@@ -153,8 +153,8 @@
|
|
153
153
|
const courses = Classroom.Courses.list().courses;
|
154
154
|
courses.forEach(course => {
|
155
155
|
console.log(`コース名:${course.name}, コースID:${course.id}`)
|
156
|
-
const
|
156
|
+
const params = { orderBy: 'updateTime desc' };
|
157
|
-
const response = Classroom.Courses.CourseWork.list(course.id,
|
157
|
+
const response = Classroom.Courses.CourseWork.list(course.id, params);
|
158
158
|
const courseWork = response.courseWork;
|
159
159
|
if (!courseWork || courseWork.length === 0) {
|
160
160
|
console.log('コースワークがないか、有効なコースIDではありません');
|
41
test
CHANGED
@@ -66,10 +66,20 @@
|
|
66
66
|
ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
|
67
67
|
+ 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.Aaa.Bbb.ccc() という形式になる。(先頭は全部「Classroom」で始まり、各階層のオブジェクトは先頭が大文字)
|
68
68
|
+ パスパラメータ(スラッシュで区切って指定するパラメータのこと)は、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
69
|
-
+ クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名を
|
69
|
+
+ クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名をプロパティ、パラメータ値を値とする**オブジェクト**で定義し、関数の引数に指定する。
|
70
|
-
|
70
|
+
|
71
71
|
となっています。
|
72
72
|
|
73
|
+
これを一般化すると
|
74
|
+
```js
|
75
|
+
const クエリパラメータ = {クエリパラメータ名: パラメータの値};
|
76
|
+
Classroom.Aaa.Bbb.ccc(パスパラメータ, クエリパラメータ);
|
77
|
+
|
78
|
+
```
|
79
|
+
という書き方になります。
|
80
|
+
|
81
|
+
|
82
|
+
|
73
83
|
# 実装の例
|
74
84
|
|
75
85
|
まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
@@ -107,8 +117,8 @@
|
|
107
117
|
(※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
|
108
118
|
```js
|
109
119
|
function showCourseWorks() {
|
110
|
-
const options = {orderBy: 'updateTime desc'};
|
120
|
+
const options = {orderBy: 'updateTime desc'}; // クエリパラメータ
|
111
|
-
const response = Classroom.Courses.CourseWork.list('コースID', options); // 「コースID」は、アクセス可能なコースIDに置き換えてください
|
121
|
+
const response = Classroom.Courses.CourseWork.list('コースID', options); // 「コースID」は、パスパラメータです。実際にはアクセス可能なコースIDに置き換えてください。
|
112
122
|
}
|
113
123
|
```
|
114
124
|
|
40
test
CHANGED
@@ -176,9 +176,9 @@
|
|
176
176
|
先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
|
177
177
|
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等の対応を行ってください。
|
178
178
|
|
179
|
-
なお、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題がある
|
179
|
+
なお、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があるかもしれません。
|
180
180
|
|
181
181
|
したがって、開発中は「自分がアクセス可能な情報へのアクセス権限」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
|
182
|
-
↓
|
182
|
+
↓
|
183
183
|
本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
|
184
184
|
といった運用が考えられます。
|
39
test
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
|
65
65
|
|
66
66
|
ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
|
67
|
-
+ 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.aa
|
67
|
+
+ 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.Aaa.Bbb.ccc() という形式になる。(先頭は全部「Classroom」で始まり、各階層のオブジェクトは先頭が大文字)
|
68
68
|
+ パスパラメータ(スラッシュで区切って指定するパラメータのこと)は、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
69
69
|
+ クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名をキーとするオブジェクトで指定する。
|
70
70
|
|
38
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
---
|
56
56
|
|
57
|
-
#
|
57
|
+
# ドキュメントの調べ方について:
|
58
58
|
|
59
59
|
[Classroomサービスのヘルプ](https://developers.google.com/apps-script/advanced/classroom) には最低限のことしか記載されていません。
|
60
60
|
|
@@ -64,16 +64,16 @@
|
|
64
64
|
API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
|
65
65
|
|
66
66
|
ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
|
67
|
-
+ 『REST リソース: v1.
|
67
|
+
+ 『REST リソース: v1.aaa.bbb』の『ccc』というメソッド に対応するGAS上の関数は、 Classroom.aaa.bbb.ccc() という形式になる。(先頭は全部「Classroom」で始まる)
|
68
|
-
+ パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
68
|
+
+ パスパラメータ(スラッシュで区切って指定するパラメータのこと)は、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
69
|
-
+ クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
|
69
|
+
+ クエリパラメータ(「?」以降にパラメータ名を明記して指定するパラメータのこと)は、パラメータ名をキーとするオブジェクトで指定する。
|
70
70
|
|
71
|
-
とい
|
71
|
+
となっています。
|
72
72
|
|
73
|
-
# 実装の
|
73
|
+
# 実装の例
|
74
74
|
|
75
75
|
まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
76
|
-
|
76
|
+
|
77
77
|
```js
|
78
78
|
function showCourses() {
|
79
79
|
const courses = Classroom.Courses.list().courses;
|
@@ -82,7 +82,8 @@
|
|
82
82
|
});
|
83
83
|
}
|
84
84
|
```
|
85
|
-
|
85
|
+
(これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明が冗長となるため省略します。とにかくコースIDを取得できないことには始まらないので。このコードを作るまでの調べ方は、基本的には以降に書いてある手順と同じです)
|
86
|
+
|
86
87
|
そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使っていく場合、下記のように調べながら実装していきます。
|
87
88
|
|
88
89
|
まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
|
37
test
CHANGED
@@ -107,7 +107,7 @@
|
|
107
107
|
```js
|
108
108
|
function showCourseWorks() {
|
109
109
|
const options = {orderBy: 'updateTime desc'};
|
110
|
-
const
|
110
|
+
const response = Classroom.Courses.CourseWork.list('コースID', options); // 「コースID」は、アクセス可能なコースIDに置き換えてください
|
111
111
|
}
|
112
112
|
```
|
113
113
|
|
36
test
CHANGED
@@ -73,7 +73,7 @@
|
|
73
73
|
# 実装の進め方
|
74
74
|
|
75
75
|
まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
76
|
-
これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明
|
76
|
+
(これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明が冗長となるため省略します。とにかくコースIDを取得できないことには始まらないので。このコードを作るまでの調べ方は、基本的には以降に書いてある手順と同じです)
|
77
77
|
```js
|
78
78
|
function showCourses() {
|
79
79
|
const courses = Classroom.Courses.list().courses;
|
35
test
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
「GASを用いて」というのが前提であるならば、素のREST APIを使おうとするよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が楽で
|
1
|
+
「GASを用いて」というのが前提であるならば、素のREST APIを使おうとするよりも、Google Apps Scriptにもとから備わっている **Classroom サービス**を利用した方が楽です。
|
2
2
|
https://developers.google.com/apps-script/advanced/classroom
|
3
3
|
|
4
4
|
|
5
|
-
# Classroomサービスの
|
5
|
+
# Classroom サービスの利用開始準備
|
6
|
-
Classroomサービスを
|
6
|
+
GAS で Classroom サービスを利用するには、下記のようにします。
|
7
7
|
|
8
8
|
①エディタの左側のうち、「サービス」のプラス記号をクリックします。
|
9
9
|

|
34
test
CHANGED
@@ -173,17 +173,11 @@
|
|
173
173
|
# 開発/運用に関するアドバイス
|
174
174
|
|
175
175
|
先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
|
176
|
-
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
|
176
|
+
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等の対応を行ってください。
|
177
|
-
・権限を付与してもらう
|
178
|
-
または
|
179
|
-
・権限を持っている先生/システム担当者にコードを渡して実行してもらう
|
180
|
-
等の対応を行ってください。
|
181
|
-
|
182
|
-
なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではありません。
|
183
177
|
|
184
|
-
|
178
|
+
なお、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
|
185
|
-
|
179
|
+
|
186
|
-
したがって、開発中は「自分がアクセス可能な情報へのアクセス権」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
|
180
|
+
したがって、開発中は「自分がアクセス可能な情報へのアクセス権限」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
|
187
181
|
↓
|
188
182
|
本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
|
189
183
|
といった運用が考えられます。
|
33
test
CHANGED
@@ -183,8 +183,7 @@
|
|
183
183
|
|
184
184
|
一方、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
|
185
185
|
|
186
|
-
したがって、権限を貰うと言っても、
|
187
|
-
「自分がアクセス可能な情報へのアクセス権」だけもらい、
|
186
|
+
したがって、開発中は「自分がアクセス可能な情報へのアクセス権」だけもらい、自分がアクセス可能なデータだけを材料に開発を行う
|
188
187
|
↓
|
189
188
|
本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
|
190
189
|
といった運用が考えられます。
|
32
test
CHANGED
@@ -170,7 +170,7 @@
|
|
170
170
|
|
171
171
|
---
|
172
172
|
|
173
|
-
# 運用に関するアドバイス
|
173
|
+
# 開発/運用に関するアドバイス
|
174
174
|
|
175
175
|
先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
|
176
176
|
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
|
31
test
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
というやり方になります。
|
72
72
|
|
73
|
-
# 実装
|
73
|
+
# 実装の進め方
|
74
74
|
|
75
75
|
まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
76
76
|
これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明を省略します。(基本的には以降に書いてあるやり方と同じです)
|
30
test
CHANGED
@@ -170,6 +170,7 @@
|
|
170
170
|
|
171
171
|
---
|
172
172
|
|
173
|
+
# 運用に関するアドバイス
|
173
174
|
|
174
175
|
先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
|
175
176
|
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
|
29
test
CHANGED
@@ -180,7 +180,7 @@
|
|
180
180
|
|
181
181
|
なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではありません。
|
182
182
|
|
183
|
-
一方、いくら「課題チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
|
183
|
+
一方、いくら「課題提出状況チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
|
184
184
|
|
185
185
|
したがって、権限を貰うと言っても、
|
186
186
|
「自分がアクセス可能な情報へのアクセス権」だけもらい、開発中は自分がアクセス可能なデータだけを材料に開発を行う
|
28
test
CHANGED
@@ -178,8 +178,10 @@
|
|
178
178
|
・権限を持っている先生/システム担当者にコードを渡して実行してもらう
|
179
179
|
等の対応を行ってください。
|
180
180
|
|
181
|
-
なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的では
|
181
|
+
なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではありません。
|
182
|
+
|
182
|
-
|
183
|
+
一方、いくら「課題チェックの効率化」という大義名分があるといっても、一生徒に過ぎないあなたが、全生徒の課題提出状況にアクセスできてしまうのは、情報管理の観点から問題があると言えるでしょう。
|
184
|
+
|
183
185
|
したがって、権限を貰うと言っても、
|
184
186
|
「自分がアクセス可能な情報へのアクセス権」だけもらい、開発中は自分がアクセス可能なデータだけを材料に開発を行う
|
185
187
|
↓
|
27
test
CHANGED
@@ -176,4 +176,12 @@
|
|
176
176
|
・権限を付与してもらう
|
177
177
|
または
|
178
178
|
・権限を持っている先生/システム担当者にコードを渡して実行してもらう
|
179
|
+
等の対応を行ってください。
|
180
|
+
|
179
|
-
|
181
|
+
なお、後者のように、開発中に修正が発生する都度、修正したコードを他人に提供して実行してもらうのは、現実的ではないと思います。
|
182
|
+
|
183
|
+
したがって、権限を貰うと言っても、
|
184
|
+
「自分がアクセス可能な情報へのアクセス権」だけもらい、開発中は自分がアクセス可能なデータだけを材料に開発を行う
|
185
|
+
↓
|
186
|
+
本番稼働時は(全生徒の課題情報に対してアクセス権限を持っている)先生/システム担当の方で実行してもらう、
|
187
|
+
といった運用が考えられます。
|
26
test
CHANGED
@@ -175,5 +175,5 @@
|
|
175
175
|
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
|
176
176
|
・権限を付与してもらう
|
177
177
|
または
|
178
|
-
・権限を持っている先生/システム担当者にコードを実行してもらう
|
178
|
+
・権限を持っている先生/システム担当者にコードを渡して実行してもらう
|
179
|
-
等の対応を行ってください。
|
179
|
+
等の対応を行ってください。(後者について、開発中もずっと他人にコードを実行してもらうのは現実的ではないと思います。開発中の期間だけ権限を貰って開発し、本番稼働時は権限を返上し、先生/システムの方で実行してもらう、といった運用は考えられます)
|
25
test
CHANGED
@@ -171,5 +171,9 @@
|
|
171
171
|
---
|
172
172
|
|
173
173
|
|
174
|
-
|
174
|
+
先生やシステム担当者によって、生徒がGASやREST API経由でアクセスできないように制限されており、コース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示される場合が有ります。
|
175
|
-
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
|
175
|
+
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、
|
176
|
+
・権限を付与してもらう
|
177
|
+
または
|
178
|
+
・権限を持っている先生/システム担当者にコードを実行してもらう
|
179
|
+
等の対応を行ってください。
|
24
test
CHANGED
@@ -93,7 +93,7 @@
|
|
93
93
|
・パスパラメータとして、「courseId」
|
94
94
|
・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
|
95
95
|
|
96
|
-
|
96
|
+
説明のため、例として、もうすこし具体的な要件を想定してみます。
|
97
97
|
|
98
98
|
> 要件:
|
99
99
|
> 自分がアクセスできる各コースごとに、更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
|
23
test
CHANGED
@@ -93,14 +93,13 @@
|
|
93
93
|
・パスパラメータとして、「courseId」
|
94
94
|
・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
|
95
95
|
|
96
|
-
|
97
|
-
|
96
|
+
・「『courses.courseWork』の『list』というメソッドを使う例」として、たとえば以下のような要件を想定してみましょう。
|
98
97
|
|
99
98
|
> 要件:
|
100
99
|
> 自分がアクセスできる各コースごとに、更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
|
101
|
-
|
102
|
-
|
100
|
+
|
101
|
+
|
103
|
-
「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうです。
|
102
|
+
「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうですね。
|
104
103
|
(下の図は https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#query-parameters より引用)
|
105
104
|

|
106
105
|
したがって、第一段階のGASのコードは下記のようになります。
|
22
test
CHANGED
@@ -163,7 +163,7 @@
|
|
163
163
|
|
164
164
|
基本的に全部公式ドキュメントに書かれていますし、公式ドキュメント以外にも、Classroom APIに関するサンプルコードはたくさん転がっているので、
|
165
165
|
・ドキュメントをきちんと読む
|
166
|
-
・いろいろなサイトを検索して実際にコードを書いてみる
|
166
|
+
・いろいろなサイトを検索して実際にコードを書いて実行してみる
|
167
167
|
の試行錯誤を繰り返しさえすれば、質問者さんのやりたいことはできると思います。
|
168
168
|
|
169
169
|
LINE関係の実装も同じです。「ドキュメントを読む/検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し。
|
21
test
CHANGED
@@ -16,7 +16,8 @@
|
|
16
16
|
|
17
17
|
④次に、エディタに戻り、appsscript.jsonファイルを開きます。
|
18
18
|
|
19
|
-
そして、appsscript.json に、下記**「oauthScopes」以降を追加**します。
|
19
|
+
そして、appsscript.json に、下記に記載の **「oauthScopes」以降を追加**します。
|
20
|
+
|
20
21
|
```json
|
21
22
|
{
|
22
23
|
"timeZone": "Asia/Tokyo",
|
@@ -49,6 +50,8 @@
|
|
49
50
|
}
|
50
51
|
```
|
51
52
|
|
53
|
+
⑤ Ctrl+S(Macの場合はCommand+S)を押してコードを保存します。
|
54
|
+
|
52
55
|
---
|
53
56
|
|
54
57
|
# コードの書き方について:
|
20
test
CHANGED
@@ -158,8 +158,12 @@
|
|
158
158
|
---
|
159
159
|
|
160
160
|
|
161
|
-
基本的に全部公式ドキュメントに書かれていますし、Classroom APIに関するサンプルコード
|
161
|
+
基本的に全部公式ドキュメントに書かれていますし、公式ドキュメント以外にも、Classroom APIに関するサンプルコードはたくさん転がっているので、
|
162
|
+
・ドキュメントをきちんと読む
|
163
|
+
・いろいろなサイトを検索して実際にコードを書いてみる
|
164
|
+
の試行錯誤を繰り返しさえすれば、質問者さんのやりたいことはできると思います。
|
165
|
+
|
162
|
-
|
166
|
+
LINE関係の実装も同じです。「ドキュメントを読む/検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し。
|
163
167
|
|
164
168
|
|
165
169
|
---
|
19
test
CHANGED
@@ -159,7 +159,7 @@
|
|
159
159
|
|
160
160
|
|
161
161
|
基本的に全部公式ドキュメントに書かれていますし、Classroom APIに関するサンプルコードもたくさん転がっているので、ドキュメントをきちんと読んでいろいろなサイトを検索して試行錯誤しさえすれば、質問者さんのやりたいことはできると思います。
|
162
|
-
(LINE関係の実装も同じです。「ドキュメントを読む
|
162
|
+
(LINE関係の実装も同じです。「ドキュメントを読む/検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し)
|
163
163
|
|
164
164
|
|
165
165
|
---
|
18
test
CHANGED
@@ -158,7 +158,8 @@
|
|
158
158
|
---
|
159
159
|
|
160
160
|
|
161
|
-
基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読
|
161
|
+
基本的に全部公式ドキュメントに書かれていますし、Classroom APIに関するサンプルコードもたくさん転がっているので、ドキュメントをきちんと読んでいろいろなサイトを検索して試行錯誤しさえすれば、質問者さんのやりたいことはできると思います。
|
162
|
+
(LINE関係の実装も同じです。「ドキュメントを読む→検索して見つけたコードを実際に書いて実行してみて試行錯誤する」の横断を繰り返し)
|
162
163
|
|
163
164
|
|
164
165
|
---
|
17
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
素のREST APIを使
|
1
|
+
「GASを用いて」というのが前提であるならば、素のREST APIを使おうとするよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が楽で確実であると思います。
|
2
2
|
https://developers.google.com/apps-script/advanced/classroom
|
3
3
|
|
4
4
|
|
16
test
CHANGED
@@ -70,6 +70,7 @@
|
|
70
70
|
# 実装
|
71
71
|
|
72
72
|
まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
73
|
+
これは Classroom API を扱う際のベースとなるコードですが、なぜこのようなコードになるかについては説明を省略します。(基本的には以降に書いてあるやり方と同じです)
|
73
74
|
```js
|
74
75
|
function showCourses() {
|
75
76
|
const courses = Classroom.Courses.list().courses;
|
@@ -79,7 +80,7 @@
|
|
79
80
|
}
|
80
81
|
```
|
81
82
|
|
82
|
-
そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使
|
83
|
+
そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使っていく場合、下記のように調べながら実装していきます。
|
83
84
|
|
84
85
|
まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
|
85
86
|

|
15
test
CHANGED
@@ -71,7 +71,7 @@
|
|
71
71
|
|
72
72
|
まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
73
73
|
```js
|
74
|
-
function
|
74
|
+
function showCourses() {
|
75
75
|
const courses = Classroom.Courses.list().courses;
|
76
76
|
courses.forEach(course => {
|
77
77
|
console.log(`コース名:${course.name}, ID:${course.id}`)
|
@@ -102,7 +102,7 @@
|
|
102
102
|
したがって、第一段階のGASのコードは下記のようになります。
|
103
103
|
(※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
|
104
104
|
```js
|
105
|
-
function
|
105
|
+
function showCourseWorks() {
|
106
106
|
const options = {orderBy: 'updateTime desc'};
|
107
107
|
const response = Classroom.Courses.CourseWork.list('コースID', options);
|
108
108
|
}
|
@@ -131,11 +131,11 @@
|
|
131
131
|
|
132
132
|
これを読むと、title がコースワークのタイトル、description がコースワークの説明文に該当するらしいことがわかります。
|
133
133
|
|
134
|
-
したがって先ほどの
|
134
|
+
したがって先ほどのshowCourseWorks()に、showCourses()の内容と、ループ、 title / descriptionを取得する処理を合体して、完成となります。
|
135
135
|
(※簡便のため、下記のコードは nextPageTokenを使ったページ切替を実装していません。したがってコースワークの合計数によっては、一部のコースワークしか列挙されない場合が有ります)
|
136
136
|
|
137
137
|
```js
|
138
|
-
function
|
138
|
+
function showCourseWorks() {
|
139
139
|
const courses = Classroom.Courses.list().courses;
|
140
140
|
courses.forEach(course => {
|
141
141
|
console.log(`コース名:${course.name}, コースID:${course.id}`)
|
14
test
CHANGED
@@ -85,7 +85,7 @@
|
|
85
85
|

|
86
86
|
|
87
87
|
|
88
|
-
**ドキュメントを見ると**
|
88
|
+
**ドキュメントの[該当部分](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#path-parameters)を見ると**
|
89
89
|
・パスパラメータとして、「courseId」
|
90
90
|
・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
|
91
91
|
|
13
test
CHANGED
@@ -163,5 +163,5 @@
|
|
163
163
|
---
|
164
164
|
|
165
165
|
|
166
|
-
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒
|
166
|
+
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒がGASやREST API経由でアクセスできないように制限されている可能性が有ります。
|
167
167
|
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
|
12
test
CHANGED
@@ -138,7 +138,7 @@
|
|
138
138
|
function getCourseWorks() {
|
139
139
|
const courses = Classroom.Courses.list().courses;
|
140
140
|
courses.forEach(course => {
|
141
|
-
console.log(`コース名:${course.name}, ID:${course.id}`)
|
141
|
+
console.log(`コース名:${course.name}, コースID:${course.id}`)
|
142
142
|
const options = { orderBy: 'updateTime desc' };
|
143
143
|
const response = Classroom.Courses.CourseWork.list(course.id, options);
|
144
144
|
const courseWork = response.courseWork;
|
11
test
CHANGED
@@ -93,7 +93,7 @@
|
|
93
93
|
質問者さんの書き方だと、やりたいことが漠然としているので、たとえば下記のような具体的な要件を想定してみましょう。
|
94
94
|
|
95
95
|
> 要件:
|
96
|
-
> 更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
|
96
|
+
> 自分がアクセスできる各コースごとに、更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
|
97
97
|
|
98
98
|
|
99
99
|
「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうです。
|
10
test
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
素のREST APIを使用するよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が確実かと思います。
|
2
2
|
https://developers.google.com/apps-script/advanced/classroom
|
3
3
|
|
4
|
+
|
5
|
+
# Classroomサービスの追加手順
|
4
|
-
サービス
|
6
|
+
Classroomサービスを追加するには、下記のようにします。
|
7
|
+
|
5
|
-
エディタの左側のうち、「サービス」のプラス記号をクリックします。
|
8
|
+
①エディタの左側のうち、「サービス」のプラス記号をクリックします。
|
6
9
|

|
7
|
-
|
10
|
+
|
8
|
-
次に、「Google Classroom API」を選択して、右下の「追加」ボタンをクリックします。
|
11
|
+
②次に、「Google Classroom API」を選択して、右下の「追加」ボタンをクリックします。
|
9
12
|

|
10
|
-
|
13
|
+
|
11
|
-
次に、左側に並んでいる、歯車のアイコンをクリックし「appsscript.json」マニフェスト ファイルをエディタで表示する」にチェックを入れます。
|
14
|
+
③次に、左側に並んでいる、歯車のアイコンをクリックし「appsscript.json」マニフェスト ファイルをエディタで表示する」にチェックを入れます。
|
12
15
|

|
13
|
-
|
16
|
+
|
14
|
-
次に、エディタに戻り、appsscript.jsonファイルを開きます。
|
17
|
+
④次に、エディタに戻り、appsscript.jsonファイルを開きます。
|
15
18
|
|
16
19
|
そして、appsscript.json に、下記**「oauthScopes」以降を追加**します。
|
17
20
|
```json
|
@@ -45,25 +48,39 @@
|
|
45
48
|
]
|
46
49
|
}
|
47
50
|
```
|
51
|
+
|
52
|
+
---
|
48
53
|
|
49
|
-
---
|
50
|
-
|
51
|
-
コードの書き方について:
|
54
|
+
# コードの書き方について:
|
52
55
|
|
53
56
|
[Classroomサービスのヘルプ](https://developers.google.com/apps-script/advanced/classroom) には最低限のことしか記載されていません。
|
57
|
+
|
54
|
-
Classroomサービスの各関数は、APIとほぼ1対1対応していますので
|
58
|
+
Classroomサービスの各関数は、APIとほぼ1対1対応していますので、
|
55
59
|
基本的に **[APIのヘルプ](https://developers.google.com/classroom/reference/rest)を参照し、それをClassroomサービスの各関数の呼び出しに置き換えて実行していく**というステップになります。
|
60
|
+
|
61
|
+
API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
|
62
|
+
|
63
|
+
ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
|
64
|
+
+ 『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) 形式になる。(先頭は全部「Classroom」で始まる)
|
65
|
+
+ パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
66
|
+
+ クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
|
56
67
|
|
57
|
-
API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
|
58
|
-
|
59
|
-
ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
|
60
|
-
・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) 形式になる。(先頭は全部「Classroom」で始まる)
|
61
|
-
・パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
62
|
-
・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
|
63
68
|
というやり方になります。
|
64
69
|
|
65
|
-
|
70
|
+
# 実装
|
66
71
|
|
72
|
+
まず、自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
73
|
+
```js
|
74
|
+
function getCoursesInfo() {
|
75
|
+
const courses = Classroom.Courses.list().courses;
|
76
|
+
courses.forEach(course => {
|
77
|
+
console.log(`コース名:${course.name}, ID:${course.id}`)
|
78
|
+
});
|
79
|
+
}
|
80
|
+
```
|
81
|
+
|
82
|
+
そして、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使う場合は下記のようにします。
|
83
|
+
|
67
84
|
まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
|
68
85
|

|
69
86
|
|
@@ -85,22 +102,13 @@
|
|
85
102
|
したがって、第一段階のGASのコードは下記のようになります。
|
86
103
|
(※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
|
87
104
|
```js
|
88
|
-
function
|
105
|
+
function getCourseWorks() {
|
89
106
|
const options = {orderBy: 'updateTime desc'};
|
90
107
|
const response = Classroom.Courses.CourseWork.list('コースID', options);
|
91
108
|
}
|
92
109
|
```
|
93
110
|
|
94
|
-
|
111
|
+
|
95
|
-
注)自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
96
|
-
```js
|
97
|
-
function getCourseInfo() {
|
98
|
-
const courses = Classroom.Courses.list().courses;
|
99
|
-
courses.forEach(course => {
|
100
|
-
console.log(`コース名:${course.name}, ID:${course.id}`)
|
101
|
-
});
|
102
|
-
}
|
103
|
-
```
|
104
112
|
---
|
105
113
|
|
106
114
|
これで、正常にデータが取得できていれば、response にデータ一式が格納されます。
|
@@ -123,29 +131,37 @@
|
|
123
131
|
|
124
132
|
これを読むと、title がコースワークのタイトル、description がコースワークの説明文に該当するらしいことがわかります。
|
125
133
|
|
126
|
-
したがって先ほどの
|
134
|
+
したがって先ほどのgetCourseWorks()に、getCourseInfo()の内容と、ループ、 title / descriptionを取得する処理を合体して、完成となります。
|
127
135
|
(※簡便のため、下記のコードは nextPageTokenを使ったページ切替を実装していません。したがってコースワークの合計数によっては、一部のコースワークしか列挙されない場合が有ります)
|
128
136
|
|
129
137
|
```js
|
130
|
-
function
|
138
|
+
function getCourseWorks() {
|
139
|
+
const courses = Classroom.Courses.list().courses;
|
140
|
+
courses.forEach(course => {
|
141
|
+
console.log(`コース名:${course.name}, ID:${course.id}`)
|
131
|
-
const options = { orderBy: 'updateTime desc' };
|
142
|
+
const options = { orderBy: 'updateTime desc' };
|
132
|
-
const response = Classroom.Courses.CourseWork.list(
|
143
|
+
const response = Classroom.Courses.CourseWork.list(course.id, options);
|
133
|
-
const courseWork = response.courseWork;
|
144
|
+
const courseWork = response.courseWork;
|
134
|
-
if (!courseWork || courseWork.length === 0) {
|
145
|
+
if (!courseWork || courseWork.length === 0) {
|
135
|
-
console.log('
|
146
|
+
console.log('コースワークがないか、有効なコースIDではありません');
|
136
|
-
return;
|
147
|
+
return;
|
137
|
-
}
|
148
|
+
}
|
138
|
-
courseWork.forEach(work => {
|
149
|
+
courseWork.forEach(work => {
|
139
|
-
console.log(`タイトル:${work.title}`)
|
150
|
+
console.log(`タイトル:${work.title}`)
|
140
|
-
console.log(`説明:${work.description}`)
|
151
|
+
console.log(`説明:${work.description}`)
|
152
|
+
});
|
141
153
|
});
|
142
154
|
}
|
143
155
|
```
|
144
156
|
|
145
157
|
---
|
158
|
+
|
146
159
|
|
147
160
|
基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読みさえすれば、質問者さんのやりたいことはできると思います。
|
161
|
+
|
148
162
|
|
149
163
|
---
|
164
|
+
|
150
165
|
|
151
|
-
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒にGASやREST API経由でアクセスさせないように制限されている可能性が有ります。
|
166
|
+
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒にGASやREST API経由でアクセスさせないように制限されている可能性が有ります。
|
167
|
+
そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
|
9
test
CHANGED
@@ -148,4 +148,4 @@
|
|
148
148
|
|
149
149
|
---
|
150
150
|
|
151
|
-
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒
|
151
|
+
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒にGASやREST API経由でアクセスさせないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
|
8
test
CHANGED
@@ -148,4 +148,4 @@
|
|
148
148
|
|
149
149
|
---
|
150
150
|
|
151
|
-
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、GASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
|
151
|
+
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、生徒がGASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
|
7
test
CHANGED
@@ -148,4 +148,4 @@
|
|
148
148
|
|
149
149
|
---
|
150
150
|
|
151
|
-
もしコース一覧が表示できなかったり、権限がない等のエラーが表示された場合は、先生や業者によって、GASから
|
151
|
+
もしコース一覧が表示できなかったり、権限がない(PERMISSION_DENIED)等のエラーが表示された場合は、先生や業者によって、GASからアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
|
6
test
CHANGED
@@ -56,8 +56,8 @@
|
|
56
56
|
|
57
57
|
API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
|
58
58
|
|
59
|
-
|
59
|
+
ドキュメント本文やその他ドキュメントに付属のサンプルコードに記載の内容を総合すると
|
60
|
-
・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆)
|
60
|
+
・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) 形式になる。(先頭は全部「Classroom」で始まる)
|
61
61
|
・パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
62
62
|
・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
|
63
63
|
というやり方になります。
|
5
test
CHANGED
@@ -57,8 +57,9 @@
|
|
57
57
|
API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
|
58
58
|
|
59
59
|
要約すると
|
60
|
+
・『REST リソース: v1.●●.▲▲』の『☆☆』というメソッド に対応するGAS上の関数は、 Classroom.●●.▲▲(☆☆) である。(先頭は全部「Classroom」で始まる)
|
60
|
-
・パスパラメータは、各関数の引数として指定(エディタで自動的に候補表示される)
|
61
|
+
・パスパラメータは、各関数の引数として指定する(エディタで自動的に候補表示される)。
|
61
|
-
・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定
|
62
|
+
・クエリパラメータは、パラメータ名をキーとするオブジェクトで指定する。
|
62
63
|
というやり方になります。
|
63
64
|
|
64
65
|
たとえば、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使う場合は下記のようにします。
|
4
test
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
(※手元の環境ではClassroom APIが使えないため、下記は動作確認していません)
|
2
|
-
|
3
1
|
素のREST APIを使用するよりも、Google Apps Scriptにもとから備わっている Classroom サービスを利用した方が確実かと思います。
|
4
2
|
https://developers.google.com/apps-script/advanced/classroom
|
5
3
|
|
@@ -10,6 +8,44 @@
|
|
10
8
|
次に、「Google Classroom API」を選択して、右下の「追加」ボタンをクリックします。
|
11
9
|

|
12
10
|
|
11
|
+
次に、左側に並んでいる、歯車のアイコンをクリックし「appsscript.json」マニフェスト ファイルをエディタで表示する」にチェックを入れます。
|
12
|
+

|
13
|
+
|
14
|
+
次に、エディタに戻り、appsscript.jsonファイルを開きます。
|
15
|
+
|
16
|
+
そして、appsscript.json に、下記**「oauthScopes」以降を追加**します。
|
17
|
+
```json
|
18
|
+
{
|
19
|
+
"timeZone": "Asia/Tokyo",
|
20
|
+
"dependencies": {
|
21
|
+
"enabledAdvancedServices": [
|
22
|
+
{
|
23
|
+
"userSymbol": "Classroom",
|
24
|
+
"version": "v1",
|
25
|
+
"serviceId": "classroom"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
},
|
29
|
+
"exceptionLogging": "STACKDRIVER",
|
30
|
+
"runtimeVersion": "V8",
|
31
|
+
"webapp": {
|
32
|
+
"executeAs": "USER_DEPLOYING",
|
33
|
+
"access": "ANYONE_ANONYMOUS"
|
34
|
+
},
|
35
|
+
"oauthScopes": [
|
36
|
+
"https://www.googleapis.com/auth/classroom.courses",
|
37
|
+
"https://www.googleapis.com/auth/classroom.coursework.me.readonly",
|
38
|
+
"https://www.googleapis.com/auth/classroom.profile.emails",
|
39
|
+
"https://www.googleapis.com/auth/classroom.profile.photos",
|
40
|
+
"https://www.googleapis.com/auth/classroom.rosters",
|
41
|
+
"https://www.googleapis.com/auth/classroom.coursework.me",
|
42
|
+
"https://www.googleapis.com/auth/classroom.coursework.me.readonly",
|
43
|
+
"https://www.googleapis.com/auth/classroom.coursework.students",
|
44
|
+
"https://www.googleapis.com/auth/classroom.coursework.students.readonly"
|
45
|
+
]
|
46
|
+
}
|
47
|
+
```
|
48
|
+
|
13
49
|
---
|
14
50
|
|
15
51
|
コードの書き方について:
|
@@ -53,6 +89,19 @@
|
|
53
89
|
const response = Classroom.Courses.CourseWork.list('コースID', options);
|
54
90
|
}
|
55
91
|
```
|
92
|
+
|
93
|
+
---
|
94
|
+
注)自分がアクセス可能なコース名およびコースIDは、下記のようにして取得できます。
|
95
|
+
```js
|
96
|
+
function getCourseInfo() {
|
97
|
+
const courses = Classroom.Courses.list().courses;
|
98
|
+
courses.forEach(course => {
|
99
|
+
console.log(`コース名:${course.name}, ID:${course.id}`)
|
100
|
+
});
|
101
|
+
}
|
102
|
+
```
|
103
|
+
---
|
104
|
+
|
56
105
|
これで、正常にデータが取得できていれば、response にデータ一式が格納されます。
|
57
106
|
どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目に書いてあります。
|
58
107
|
|
@@ -82,7 +131,7 @@
|
|
82
131
|
const response = Classroom.Courses.CourseWork.list('コースID', options);
|
83
132
|
const courseWork = response.courseWork;
|
84
133
|
if (!courseWork || courseWork.length === 0) {
|
85
|
-
console.log('コースワークがないか、有効なコースIDではありません');
|
134
|
+
console.log('teratail_1vughhd1dfeus0:コースワークがないか、有効なコースIDではありません');
|
86
135
|
return;
|
87
136
|
}
|
88
137
|
courseWork.forEach(work => {
|
@@ -95,3 +144,7 @@
|
|
95
144
|
---
|
96
145
|
|
97
146
|
基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読みさえすれば、質問者さんのやりたいことはできると思います。
|
147
|
+
|
148
|
+
---
|
149
|
+
|
150
|
+
もしコース一覧が表示できなかったり、権限がない等のエラーが表示された場合は、先生や業者によって、GASからはアクセスできないように制限されている可能性が有ります。そのような場合は、Google Classroomを担当している先生もしくは学校のシステム担当者に相談して、権限を付与してもらう等してください。
|
3
test
CHANGED
@@ -36,14 +36,15 @@
|
|
36
36
|
・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
|
37
37
|
|
38
38
|
|
39
|
-
たとえば
|
39
|
+
質問者さんの書き方だと、やりたいことが漠然としているので、たとえば下記のような具体的な要件を想定してみましょう。
|
40
|
-
```
|
41
|
-
要件:
|
42
|
-
更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
|
43
|
-
```
|
44
40
|
|
41
|
+
> 要件:
|
45
|
-
|
42
|
+
> 更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
|
46
43
|
|
44
|
+
|
45
|
+
「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できそうです。
|
46
|
+
(下の図は https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#query-parameters より引用)
|
47
|
+

|
47
48
|
したがって、第一段階のGASのコードは下記のようになります。
|
48
49
|
(※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
|
49
50
|
```js
|
2
test
CHANGED
@@ -55,7 +55,7 @@
|
|
55
55
|
これで、正常にデータが取得できていれば、response にデータ一式が格納されます。
|
56
56
|
どのようなデータが入っているかに関しては、ドキュメントの「レスポンス本文」の項目に書いてあります。
|
57
57
|
|
58
|
-
先のページによると、レスポンス本文として
|
58
|
+
[先のページのこの部分](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list#response-body)によると、レスポンス本文として
|
59
59
|
```json
|
60
60
|
{
|
61
61
|
"courseWork": [
|
1
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
Classroomサービスの各関数は、APIとほぼ1対1対応していますので
|
19
19
|
基本的に **[APIのヘルプ](https://developers.google.com/classroom/reference/rest)を参照し、それをClassroomサービスの各関数の呼び出しに置き換えて実行していく**というステップになります。
|
20
20
|
|
21
|
-
API と サービスの記述の変換方法については、[こ
|
21
|
+
API と サービスの記述の変換方法については、[このドキュメント](https://developers.google.com/apps-script/guides/services/advanced#how_method_signatures_are_determined)に書かれているとおりです。
|
22
22
|
|
23
23
|
要約すると
|
24
24
|
・パスパラメータは、各関数の引数として指定(エディタで自動的に候補表示される)
|
@@ -27,17 +27,24 @@
|
|
27
27
|
|
28
28
|
たとえば、質問に記載の「『REST リソース: v1.courses.courseWork』の『list』というメソッド」を使う場合は下記のようにします。
|
29
29
|
|
30
|
-
まず、ブラウザで、APIドキュメントの左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
|
30
|
+
まず、ブラウザで、**APIドキュメント**の左側ガイド一覧より、[course.CourseWork -> list](https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list)を開きます。
|
31
31
|

|
32
32
|
|
33
33
|
|
34
|
-
ドキュメントを見ると
|
34
|
+
**ドキュメントを見ると**
|
35
35
|
・パスパラメータとして、「courseId」
|
36
36
|
・クエリパラメータとして、courseWorkStates[]、orderBy、pageSize、pageToken の4つがあることが分かります。
|
37
37
|
|
38
38
|
|
39
|
+
たとえば、下記のような要件を想定します。
|
40
|
+
```
|
41
|
+
要件:
|
39
|
-
|
42
|
+
更新時刻降順にコースワークを取得し、それぞれのタイトルと説明文を表示する。
|
43
|
+
```
|
44
|
+
|
45
|
+
「更新時刻降順にコースワークを取得」という処理は、ドキュメントに書いてあるクエリパラメータのうち、orderBy を使用することで実現できます。
|
46
|
+
|
40
|
-
|
47
|
+
したがって、第一段階のGASのコードは下記のようになります。
|
41
48
|
(※下記コードのうち、「コースID」の部分は、実在するアクセス可能なコースIDに置き換えてください)
|
42
49
|
```js
|
43
50
|
function main() {
|
@@ -84,3 +91,6 @@
|
|
84
91
|
}
|
85
92
|
```
|
86
93
|
|
94
|
+
---
|
95
|
+
|
96
|
+
基本的に全部公式ドキュメントに書かれていますので、ドキュメントをきちんと読みさえすれば、質問者さんのやりたいことはできると思います。
|