0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Canvas LMS で課題の採点結果を履修者に開示する

Posted at

やりたいこと

  • Python の canvasapi を用いて Canvas LMS 上で課題の採点結果を履修者に開示する([成績表]で課題の[成績を掲示する]をスクリプトから実行する)。

実装方法の検討

  • Canvas の REST API から実行できれば簡単だが、どうもその機能はなさそう。
  • ブラウザで観察したところ、採点結果の公開には GraphQL を用いている。
  • canvasapi には、GraphQL のクエリを実行する関数 Canvas.graphql が用意されている。
  • これを用いて実装してみる。

実装

Canvas.graphql

graphql(query, variables=None, **kwargs)

  • Canvas に GraphQL 形式のリクエストを送信する

パラメータ

query (str)
実行する GraphQL クエリの**文字列**
variables (dict)
クエリが要求する変数の**辞書**

戻り値

  • GraphQL クエリに対するレスポンスを格納した辞書

クエリの形式

  • この記事を書いている時点ではドキュメントは整っていないので、Canvas LMS のソースから抽出する。
canvas-lms/ui/shared/post-assignment-grades-tray/react/Api.js
export const POST_ASSIGNMENT_GRADES = gql`
    mutation ($assignmentId: ID!, $gradedOnly: Boolean) {
        postAssignmentGrades(input: {assignmentId: $assignmentId, gradedOnly: $gradedOnly}) {
        progress {
            _id
            state
        }
        }
    }
`

Python による実装

result = canvas.graphql(f'''
    mutation {{
        postAssignmentGrades(input: {{
            assignmentId: {assignmentId}, 
            gradedOnly: {gradedOnly}
        }}) {{
            progress {{
                _id
                state
            }}
        }}
    }}
''')
  • canvasCanvas オブジェクト

  • assignmentId は、操作したい課題のID(念のため文字列にキャストしておくとより安全)

  • gradedOnly は、"true" または "false" の文字列。"true" なら、採点済みの提出物についてのみ採点結果を開示する。"false" なら、履修者全員の採点結果を開示する。

  • この例では、レスポンスとして _idstate を要求している。レスポンスを格納する変数 result には以下のような辞書が返ってくる。

{
    'data': {
        'postAssignmentGrades': {
            'progress': {
                '_id': '785446', 
                'state': 'queued'
            }
        }
    }
}

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?