我正在尝试使用Python googleapiclient
为Google课堂创建推送通知注册。我的代码适用于用户为老师的课程,但不适用于特定课程中的学生。我已经尝试过使用gsuite和非gsuite帐户。
错误是googleapiclient.errors.HttpError: <HttpError 403 when requesting https://classroom.googleapis.com/v1/registrations?alt=json returned "The caller does not have permission">
相关代码是
def register(self, courseId):
body = constants.registration_body(courseId)
o = self.service.registrations().create(body=body).execute()
return o["registrationId"], o["expiryTime"]
其中self.service
是build("classroom", "v1", credentials=get_creds(uid, db))
。
和constants.registration_body
返回
{
"feed": {
"feedType": "COURSE_WORK_CHANGES",
"courseWorkChangesInfo": {
"courseId": courseId,
},
},
"cloudPubsubTopic": {
"topicName": secret.pubSubTopicName,
},
}
我还启用了所有相关的API范围,以将其从故障排除中删除:
scopes = [
"https://www.googleapis.com/auth/classroom.push-notifications",
"https://www.googleapis.com/auth/classroom.coursework.students.readonly",
"https://www.googleapis.com/auth/classroom.coursework.me.readonly",
"https://www.googleapis.com/auth/classroom.announcements.readonly",
"https://www.googleapis.com/auth/classroom.courses.readonly",
"https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly",
"https://www.googleapis.com/auth/classroom.topics.readonly",
"openid",
]
我不确定这是否是代码错误,因为它在用户为教师时有效。这是Google Classroom API的限制吗?
完整代码:https://github.com/karmanyaahm/google_classroom_discord_feed
答案 0 :(得分:0)
您的代码很好,并且可以正常工作。推送通知是一种管理课程的工具,不供学生使用,因此只有教师和管理员才能create registrations来使用。
以下in the official docs语句隐含了用户必须是老师才能管理通知的事实,该事实可从Push notifications in the Classroom API中找到:
您的Cloud Pub / Sub主题仅接收有关创建注册时可以使用提供的凭据查看的资源的通知。例如,如果用户撤消了您的应用程序的权限或被教师取消了,则通知的发送时间将更长。