I'm curious as to how to obtain assignments for a specific date from a user's classroom. I know you can use calendar, although it doesn't provide the coursework meta or individually assigned items.
Thanks, Will
Related
I'm trying to query attendance for a Google Meet conference created via Google Calendars API.
I've found that the conferenceId returned by Calendar API > Events > insert it's different from the one I can use to filter in Reports API.
conferenceId from Calendar API --> ["conferenceId"]=>string(12) "xxx-xxxx-xxx"
conferenceId from Reports API{"name": "conference_id", "value": "xxxxxxx_12234XXXXXxxxxXX56"}
Does anyone knows why?
How can I query attendance based on the data returned by Calendar API > Events > insert ?
Steps to reprocuduce:
Insert calendar events (be sure to add conferenceData structure to create also the Meet conference):
https://developers.google.com/calendar/api/v3/reference/events/insert
Use the conference
List activities from Report API and check the conference_id: https://developers.google.com/admin-sdk/reports/reference/rest/v1/activities/list
It seems that the conferenceId from the Calendar event object is different from the conference_id in the Reports (note that the name is different). The activities.list output also has another field called meeting_code, it's also under items.events.parameters:
{
"name": "meeting_code",
"value": "ASDFASFFGJ"
}
This one matches the conferenceId in a calendar event, except that it's without dashes and capitalized, so for the example "conferenceId": "asd-fasf-fgj" in a Calendar Event object you'll find "meeting_code": "ASDFASFFGJ" in the activity reports. So you can just remove the dashes and capitalize the conferenceId to match it to its corresponding meeting_code.
As to why this discrepancy exists, my guess after reading the definition of the Meet activity events is that it tracks different "conference sessions" within the same meeting code. For example, if you join the meeting asd-fasf-fgj it will create a new conference_id until everyone leaves the meeting. Then if the same meeting code is used again a different conference_id will be created to track the new session and so on.
I did some cursory testing and the logs do create a different conference_id every time I joined the same Meeting code. I didn't have multiple accounts to test so I'm not sure if two users can have matching IDs, but I may be close. I couldn't find any in-depth documentation so it would require more testing to figure out exactly how it works.
Either way, to address your immediate concern, you should be able to match the Event's conferenceId with the Report's meeting_code to track the attendance.
Reference:
Meet Activity log definition
We have a service which syncs our calender with an exhange calender. In the synchronisation process we use the unique ids to identify the appointments. Now we have a customer, which has non-unique UniqueIds.
I used the EwsEditor (https://github.com/dseph/EwsEditor) to inspect the elements and yes, both appointments (same user, same month, same UniqueId, but a different appointment) have exact the same UniqueId.
Both appointments are not created with our software. They are manually created by the user via Outlook.
Is there a reason why the exchange creates appointments/meetings with the same Ids?
Are you saying that an Id has been reused (if so that's possible as it will still be unique). Or are you saying that you have two id's in the same calendar that are the same if so are you sure your not confusing recurring appointments or that fact that the UnqiueId's are base64 encoded so this means the Id's are case sensitive.
That said using the UniqueId for calendar appointment isn't a great idea and you would be better using the GOID property like PidLidCleanGlobalObjectId https://learn.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidcleanglobalobjectid-canonical-property
I was reviewing the Google Classroom API and noticed there was not an option for getting grades. I need to extract the assignment grades from Google Classroom into an external grade book app that I am creating. Does anyone know if this is possible, or how to do this?
You can definitely get grades from the API.
Classroom.Courses.CourseWork.StudentSubmissions.list(course.id, work.id).studentSubmissions
From there, loop through the studentSubmissions:
studentSubmissions[i].assignedGrade
That gets the assigned grade for that specific assignment. I also grab studentSubmissions.userId in order to get the student name. Let me know if you need anything else.
It is possible with Google Sheets and Apps Script. You can export your grades to Google Sheets and from there, you can use Apps Script to extract data from the sheets. To do that, you can check this SO question and the methods to access and modify spreadsheet sheets.
Using the Google Classroom API method userProfile, I can get various information about a user, including their name and email address, but not whether they are a student or teacher. How can I determine whether a user is a student or teacher?
Classroom does have the concept of teachers and students, however the distinction between teachers and students is only meaningful relative to a particular course (it’s possible for a user to be a “teacher” of one course and a “student” of another) and so you might not be able to use these categories to apply access controls in the way you were expecting.
For example, if alice#school.edu is a member of a particular course’s courses.teachers collection, and bob#school.edu is a member of courses.students, then you can use this information to decide that bob#school.edu should not see certain content created by alice#school.edu. (For example, you might not want to show Bob the answers to a quiz that Alice has created on your website, just the questions.)
However, because by default all users can create courses, you probably do not want to show alice#school.edu sensitive information created by teachers of other courses, information intended for teachers that you provide (for example, if you are a textbook publisher), or giving her domain-wide admin features.
If you need to distinguish between “real-world” teachers and students, we recommend that you do this via a mechanism entirely separate from Classroom, such as checking that the user’s email address appears in:
a separately-maintained list of teachers (e.g. CSV uploaded by admin)
the classroom_teachers group – domain administrators can choose to verify teachers to allow them to create new classes (use the Directory API to list a user’s groups)
Classroom api dosent provide global role for a teacher or a student its vary from course to course so you can just call student/teacher api
after that you will get json output and you find a special permission for teacher "Create Course" it will help you to recognized that the person is teacher.
"permissions": [
{
"permission": "CREATE_COURSE"
}
]
in case of student this array will be null.
I was messing around trying to add a new calendar and it took me quite a while to figure out that I had to add it to 'Calendars' and not to 'CalendarList'. It works now, which is nice, but I what is the difference between the two concepts? It seems to me I only need Calendars? Also, CalendarList doesn't seem to work, trying to insert a Calendar returned a 404 error.
Calendars is a collection of all calendars in the world (it does not have a list method). When creating a new calendar, you should call an insert on the calendars collection. When you want calendar specific data (such as the timezone, the name) then you should retrieve a calendar from calendars collection using get.
CalendarLists is a collection of all calendar entries that a user added to their list (in the web UI it's the list of calendars in the left panel). You cannot create a new calendar through the calendar list collection but you can add an existing calendar to the list of your users calendars. Each user can for example have a different color for the same calendar and this detail will be stored in the calendar list entries.
What is sometimes confusing is that when you create a new calendar through calendars collection, it will be automatically added to your list.
Let me give you an example of how Calendars and CalendarLists work. Imagine your friend creates a calendar for a trip that you will be going on together. He does so by doing a Calendars.insert() call.
Now he makes the calendar public (via ACLs collection) and sends you and all the friends an email of this calendar. You can go into the CalendarLists collection and do an insert() call there to add it into your list of calendars and make it blue.
Calendars:
The Calendars collection represents all existing calendars. It can be
used to create and delete calendars. You can also retrieve or set
global properties shared across all users with access to a calendar.
For example, a calendar's title and default time zone are global
properties.
CalendarList:
The CalendarList is a collection of all calendar entries that a user
has added to their list (shown in the left panel of the web UI). You
can use it to add and remove existing calendars to/from the users’
list. You also use it to retrieve and set the values of user-specific
calendar properties, such as default reminders. Another example is
foreground color, since different users can have different colors set
for the same calendar.
Here the comparison table:
https://developers.google.com/google-apps/calendar/concepts/events-calendars