#126 課題の提出期限を変更する → 現状ではできない
以下のような感じでコメントをいただきました。
要するに Google Classroom で作成した課題に、GAS で提出期限を設定できるか?ということです。
今回も記事タイトルにも書いていますが、実現できませんでした。同じことで悩む人の手助けになるように、確認できた内容については、以降にまとめておきます。 ※どのように実現できなかったのかが気になる方は、以下もご覧ください。
実現可能なのか?
①使用する API
以下 URL で公開されている API のリファレンスを確認すると…
以下の API を利用すれば、課題の提出期限である dueDate と dueTime を変更できるように見受けられました。
実際にプログラムを作成してみると、Classroom.Courses.CourseWork.patch() に対して、下図のような説明が表示されました。
②引数は 3つ? 4つ?
英語での説明文は置いといて… 引数が 3つの場合と 4つの場合があるようです。
resource: Classroom_v1.Classroom.V1.Schema.CourseWork
→ 更新する内容courseId: string
→ コースの識別子id: string
→ コースの課題の識別子optionalArgs: Object
→ クエリ パラメータ
しかしながら、引数が 3つで API を呼び出すと、以下のように updateMask が必要、といったエラーになってしまいます。
GoogleJsonResponseException: API call to classroom.courses.courseWork.patch failed with error: updateMask: Update mask is required
ということで、作成した API の呼び出し部分が以下のような感じ。更新する dueDate と dueTime は、適切な形式で用意して setDate と setTime に設定してあります。
③過去の日付は設定できない?
この状態で実行すると、以下のようなエラーになってしまいました。
GoogleJsonResponseException: API call to classroom.courses.courseWork.patch failed with error: dueDate: Due date must be in the future
冒頭の寄せられたコメントの内容からも、何となく既に過ぎている過去の日付を設定しようとしたのですが、API の仕様上、設定できるのは未来の日付でなければならないようです。
Google Classroom の UI では、過去の日付でも設定できるのですが、API で設定する場合には、未来の日時(現在よりも後)でなければ設定できないようです。
④未来の日付でも設定できない?
前述のように、設定する日付に不備があるとエラーになっていたので、未来の日付を指定したところ、違うエラーが発生しました。
GoogleJsonResponseException: API call to classroom.courses.courseWork.patch failed with error: @ProjectPermissionDenied The Developer Console project is not permitted to make this request.
エラーメッセージを翻訳すると、上記のような感じで、この API のリクエストが許可されていないような感じのメッセージとなっています。
前項③で過去の日付で API を呼び出したときには「与えられた日付が悪い」と返していたのに、適切な日付を渡したら「リクエストが許可されていません」とは…😖
この ProjectPermissionDenied というエラーメッセージを、Classroom API のリファレンスで確認すると、
と説明されている。
⑤API Explorer でも駄目
リファレンスページから利用できる API Explorer で同じ動作を試してみたけれど、下図のように Googleスプレッドシートにバインドされた GAS のプログラムから実行したときと同様に結果になります。
下部中央に表示されているように、
メッセージでは「OAuth 2.0 を使ってみて」と説明されているけれど、API Explorer は下図のように OAuth 2.0 での認証は行っているはずで…
画面右下に表示されているエラーメッセージは、以下のような感じで GAS で表示されていたものと同様の内容です。やはり、Developer Console project 経由で利用しないといけないみたい…
HTTP/1.1 403
cache-control: private
content-encoding: gzip
content-length: 163
content-type: application/json; charset=UTF-8
date: Wed, 16 Oct 2024 14:09:42 GMT
server: ESF
vary: Origin, X-Origin, Referer
{
"error": {
"code": 403,
"message": "@ProjectPermissionDenied The Developer Console project is not permitted to make this request.",
"status": "PERMISSION_DENIED"
}
}
試行錯誤してみたけれど… GCP
前項の ① ~ ⑤ のような感じで、API の呼び出し方法は間違っていないような感じなのですが、Googleスプレッドシートにバインドされた GAS のプログラムから、単純に呼び出しても利用できないような感じです。
前述の ④ で ProjectPermissionDenied の説明のところで、下図のように「OAuth クライアント ID」の部分にリンクが設定されており、
このリンクをクリックすると以下のページに遷移します。 ※この記事を書いている時点では、日本語でのページは用意されていないようです。
ページのタイトルに説明されているように、この先は GCP(Google Cloud Platform)が利用できる環境でなければ利用できないもののようです。
GCP を利用したプログラムにもチャレンジしてみたいとは思うものの、GCP が利用できる環境でなければ利用できないプログラムになってしまうと、手軽に共有・実行できなくなってしまうので、ここで断念することにしました。
Classroom API は、リファレンスページ内の ↓ で説明されているように、プレビュープログラムが行われていたりもするので、今後の更新によっては前述の事象が変わってくるのかもしれません。その辺りに期待して、この記事は一旦ペンディングとします…