2025年4月30日水曜日

Google Classroom APIで提出物の返却を試してみる


Classroom API 経由で提出物の返却を試してみました

提出物を返却する際はコメントもつけると思いますが

提出物にプライベートコメントをつける API は用意されていないようです(2025-04-30現在)


そのためここでは API で提出物の返却のみを行う実験をしました


提出物を返却するために必要な情報



Apps Script の Serviceに Classroom API を追加する Advanced Service 経由では 404 で失敗しましたが

UrlFetch で Classroom API にリクエストを送ると成功しました

※ UrlFetch の方でも課題を作成したときと同じ Apps Script のプロジェクトで実行しないと OAuthクライアントが異なるため失敗します


UrlFetch で Classroom API にリクエストを送って成功したコード


Code.gs
function returnSubmissionUrlFetch() {
const courseId = "699141862609"; // クラスID
const courseWorkId = "776715772295"; // 課題ID
const submissionId = "Cg4I0Nr04LoWEIfD-L7NFg"; // 提出物ID
const accessToken = ScriptApp.getOAuthToken();

const url = [
'https://classroom.googleapis.com/v1',
`courses/${courseId}`,
`courseWork/${courseWorkId}`,
`studentSubmissions/${submissionId}:return`
].join('/');

const options = {
method: "post",
contentType: "application/json",
headers: {
Authorization: `Bearer ${accessToken}`
},
payload: JSON.stringify({}),
muteHttpExceptions: true
};

try {
const response = UrlFetchApp.fetch(url, options);
const responseCode = response.getResponseCode(); // ← ここでステータスコード取得!
if (responseCode === 200) {
Logger.log(`返却成功!ステータスコード: ${responseCode}`);
} else {
Logger.log(`返却失敗!ステータスコード: ${responseCode}`);
Logger.log(response.getContentText()); // エラー内容も出す
}
} catch (e) {
Logger.log('返却失敗: ' + e.message);
}
}



実行すると対象の提出物の返却が成功して 200 が返ってきました



Tips: Advanced Service 経由では 失敗した

Apps Script のサービスに Google Classroom API を追加するのが Advanced Service だと理解していますが


これを使って提出物を返却しようとして失敗したコードも共有します


Code.gs: これは404で失敗する
function returnSubmission() {
const courseId = '699141862609';
const courseWorkId = '776715772295';
const submissionId = 'Cg4I0Nr04LoWEIfD-L7NFg';

try {
const response = Classroom.Courses.CourseWork.StudentSubmissions.return(
courseId,
courseWorkId,
submissionId,
{} // 必須の空オブジェクト
);
Logger.log('返却成功!');
Logger.log(response);
} catch (e) {
Logger.log('返却エラー: ' + e.message);
}
}



実行するとエラーが発生して 404 が返ってきました


課題を作成したときと同じ Apps Script のプロジェクトで実行していても失敗しました

ちなみに
ここでは特にプロジェクトの変更はしておらず
デフォルトの GCP プロジェクトを使っています

デフォルトプロジェクトと標準プロジェクトについて

もしかしたら標準の GCP プロジェクトに切り替えると 404 が返らずに成功するのかもしれません(これは試していないので未確認)


高度な Google サービス




関連記事