2025年4月30日水曜日

Google Classroom APIの実行環境が課題の提出物を変更できるか確認したい


Classroom API で提出物に変更を加えることができるのは

その課題を作成したときと同じ OAuthクライアント(Developer Console Project)のみのようです

そのため

提出物に変更を加えるコードを記述した OAuthクライアントと

その提出物に紐づく課題を作成した OAuthクライアントが

同じかどうか確認する方法を知りたくて試しました


基本的には同じ Apps Script のプロジェクトで

課題の作成と提出物の読み書きを行えばよさそう




courseId, courseWorkId を自身の環境に合わせて書き換えて

checkDeveloperAssociation() を実行すると

ture か false が返ってくるはずですが

手元の環境では true か undefined が返ってきました


Code.gs
function checkDeveloperAssociation() {
const courseId = '699141862609';
const courseWorkId = '767848967890';

// Advanced Service で取得
const cw = Classroom.Courses.CourseWork.get(courseId, courseWorkId);

// associatedWithDeveloper が true なら「同じクライアント」で作成された課題
Logger.log('associatedWithDeveloper: ' + cw.associatedWithDeveloper);
}


true が返ってきたら同じOAuthクライアントということらしい


別の Apps Script プロジェクトで同じコードを実行すると 
undefined が返ってきたので OAuthクライアントが異なると考えられる



Tips

提出物を返却する場合は上記のコードを実行して associatedWithDeveloper が true でも
404 エラーが出ました

この場合は
UrlFetch で REST API に直接リクエストを送ることでエラーを回避できました
Google Classroom APIで提出物の返却を試してみる



Reference

生徒の回答を管理する
https://developers.google.com/workspace/classroom/guides/manage-coursework?hl=ja#manage_student_responses


関連記事