2017-03-14 171 views
0

Classroom API v1を使用して、Google Apps Scriptで自分のGoogle Classroomからコースワークにアクセスしようとしています。私は正常に私のコースのリストを取得するために、クイックスタートの手順に従ったが、私は、以下のものを使用して、私のクラスのいずれかでコースにアクセスしようとしたとき:Google Classroom Apps Script - CourseWork.list権限エラー

var coursework = Classroom.Courses.CourseWork.list('valid courseId'); 

I「の呼び出し側が許可されていません」というエラーが表示されます。私は、API Explorerを使用してコースリストを正常に取得できます。

APIエクスプローラで再生すると、このコマンドに「classroom.coursework.students.readonly」スコープが必要なように見えます。しかし、権限のダイアログで[許可]ボタンを押すと、そのスコープがプロジェクトに追加されません。それをプロジェクトのスコープリストに追加する方法はありますか?私はSOを検索し、他の言語(たとえばpython)でスコープを設定することに言及しましたが、Apps Scriptではそうではありません。また、Appsスクリプトに誰かがauthorizing a scope manuallyという言葉を見たこともありますが、その方法についての説明はありません。

私はこれについて壁を打ったので、誰かが示唆を持っていれば、本当に感謝しています。ありがとう。

答えて

0

このthreadに記載されているように、アプリスクリプトが正しい開発コンソールプロジェクトに関連付けられていることを確認してください。

スクリプトは、使用されているOAuth 2.0クライアントIDに対応する開発コンソールのプロジェクトIDに関連付けられている必要があります(このデベロッパーコンソールプロジェクトには「Apps Script Execution API」も有効にする必要があります)。

次のメニュー項目を選択アプリスクリプトのデベロッパーコンソールプロジェクトを変更するには:この画面でリソース>デベロッパーコンソールプロジェクトを...

は、あなたのdevのコンソールのプロジェクト番号を入力してください。

APIを使用するには有効なOAuthトークンを指定する必要があります。これにはDeveloper Consoleプロジェクトが必要です。

+0

私はこれらのものが正しく設定されていない場合は、コースリストは失敗しますか?それはしません。私はコースリストと学生リストを手に入れることができます。コースリストではありません。スコットの固定セットについてClassroomサービスがプロンプトを出していることを示す、関連性のあるthis [thread](http://stackoverflow.com/questions/31845646/authorization-needed-for-classroom-profile-emails)が見つかりました。そのセットには授業は含まれていません。これは私が授業にアクセスできないということですか? –

+0

私は、以前のスレッドへのリンクを含めるように質問を編集しました。この[スレッド](http://stackoverflow.com/questions/31845646/authorization-needed-for-classroom-profile-emails)は教室のためにAppsスクリプトでスコープが固定されていることを示しています。このための回避策はありますか? –

0

Google Appsスクリプトアドオンをプロジェクトの教師として実行すると、Courses.CourseWork.listの呼び出しがうまく機能します。

コースの学生と同じスクリプトアドオンを実行すると、「呼び出し元に許可がありません」というエラーが表示されます。

これは、アドオンの開発者がClassroom APIを有効にすること以外には制御できません。スコープは開発者によって制御されません。

コアの問題は、コードがコースの教師のために働くことです。コースの学生はコードが失敗します。

これはすべて、Classroom APiリファレンス自体は問題なく動作します。 https://developers.google.com/classroom/reference/rest/v1/courses.courseWork/list

これはおそらくバグです。少なくとも、上記の@abielitaで与えられた包括的キャッチオール回答とは関係ありません。

私はこのバグが古いので、私は答えがほんとうにありませんが、ここには期待しています。

0

ドメイン管理者と私がテストしているコースの教師としてコードを繰り返し実行していました(つまり、本当にアクセスしていたはずです)。

アクセス許可の問題を解決しようとする中で、私はClassroom.Courses.CourseWork.createを呼び出して、コースワークにアクセスするための追加のアクセス許可を含む別の認証ダイアログを呼び出しました。私の作成呼び出しが(私はまだAPI/wを遊んでいたと右の構文を得ていなかった)失敗したにもかかわらず、それがトリガー権限は、私が正しいリストコースを取得するために必要なものでした。

function getCoursework(id) { 
    var resp = Classroom.Courses.CourseWork.list(id); 
    work = resp.courseWork 
    if (work && work.length > 0) { 
    for (var i=0; i< work.length; i++) { 
     piece = work[i] 
     Logger.log('Work: %s (%s)',piece.title,JSON.stringify(piece)); 
    } 
    } 
} 

このコードは、それが持っている必要がありますように、アクセス権ダイアログをトリガしませんでした:

は要するに、ここで最初にあなたが記述権限エラーで失敗しましたコードです。しかし、一度私は次の(破損した)コードを実行すると、私はアクセス許可のダイアログボックスを取得し、上記のコードが働いた:

function createCoursework (id) { 
    Classroom.Courses.CourseWork.create(id, 
    { // doesn't work but triggers permissions correctly 
    "courseId": id, 
    "title": 'foo', 
    "description": 'desc', 
    }); 
} 
関連する問題