Google Classroom - How to list only created/updated/deleted courses - google-classroom

I am trying to create a google sync API(background API using scheduler) which basically updates my database courses with the google classroom courses.
The Google Classroom API does not seem to have a mechanism for fetching only create/update/delete courses. right now I am able to fetch all courses from google classrooms using google classrooms API but i want only created/updated/deleted courses list.
Also, can I call my API endpoint, if a course is created/updated/deleted into google classrooms course?

Upon checking the documentation, it is not yet supported. You can restrict returned courses to those in one of the specified states "only" using courseStates parameter.
Possible states a course can be in.
COURSE_STATE_UNSPECIFIED
ACTIVE
ARCHIVED
PROVISIONED
DECLINED
SUSPENDED
If the feature hasn't been requested yet, you can file a feature request on the Issue Tracker.

I got a reply on Google Issue Tracker after creating a feature request:-
Google Issue Tracker Url:
https://issuetracker.google.com/issues/74175718
Reply:
So, you're correct that we don't yet support returning the list of courses which have been updated since your last sync. I've changed this to a feature request to reflect that.
However, in case it's helpful to you, we do offer two things that might address some of your needs:
(1) Our courses.list endpoint (https://developers.google.com/classroom/reference/rest/v1/courses/list) guarantees that results are ordered by most recently created. So it should be easy to detect all the courses that have been created since the last sync by doing timestamp comparisons.
(2) If your sync job is running with the credentials of a domain administrator, you can use push notifications (https://developers.google.com/classroom/guides/push-notifications) to get updated when the rosters change for all courses in the domain (course creation will appear as a notification that the primary teacher has been added to the course, so you should be able to detect that as well).

Related

best way to extract meeting history data with Microsoft Graph

sorry I'm new to MS Graph. I'm working on a app to extract meeting history data for past hour/day/week/month for my company. I found there are APIs I can use:
List events
List calendarView
getSchedule
all 3 have different version under Users, Calendar and Groups,
which is the best to do the job?
I heard about delegated permission and application permission.
is delegated permssion good enough for me? or I have to ask for application permission?
one solution I heard: deletegated permission, create a normal account, share all meeting room account to this account. does this work for me?
Thanks
Wes
You need to understand the differences first: List events - its used to retrieve a list of events in a given calendar. List calendarview - using this you can get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, from the user's default calendar, or from some other calendar of the user's. getschedule - you can get the free/busy availability information for a collection of users, distributions lists, or resources (rooms or equipment) for a specified time period.
Also you need to understand the differences between the delegated & application permission - documentation. In short, if you want to access your calendar then go for Delegated, wherein if you want to access others calendar as well then go for application permission.

Places API returning NOT_FOUND

Since this morning the Places API has returned NOT_FOUND results for every single place ID we've tried searching for.
We regularly query the API to check details & it has been running fine for over a year but today it's fell over and only returns NOT_FOUND, for over 300 different place ids.
Is there a current issue with the API?
I contacted Google Cloud support today about this because it still hasn't changed.
Yes they no longer support Service area businesses in the Places API. Here is their response:
Thank you for contacting Maps Platform Technical Support. My name is Ana and I'm here to assist you.
Places API mission is to enable developers to help users find relevant places to visit. Since Service Area Businesses are not places users can visit, they do not belong in the Places API. That is the reason why you cannot search it in Places API and it is an intended behavior.
Business owners can fix this via MyBusiness IF they have a brick-and-mortar shop
(a shop someone can visit on the streets).
I find this shocking that developers are unable to pull out information about any ACTIVE business on Google. I have responded with my own views but as expected Google will not change their stance.
Well that is very confusing to customers. You (rightly so) allow local listings to be setup as service area businesses. Why should only brick and mortar shops be allowed to utilise the Place API? That’s separating the market for businesses to advertise properly and surely is not legal.
Regardless of if you agree about service area businesses not being allowed to be shown on Maps – there is no reason that an ACTIVE business should not return details through a Development API which has no public facing impact. It is stifling the support agencies and businesses can provide to its customers.
We're denied access to the Google My Business API and then resort to pulling out data via the Places API and now we can no longer do that.
You should at the very least provide some kind of development data for ANY business that is available on Google, whether that be via the Places API or not – business owners should have a right to pull out data about their own business at any time.
Please forward this to the GMB team.

using google classroom api to change course ownerId

How? Easiest method?
Tried using postman on desktop, googles OAuth2 playground and google help pages to try make sense of what to do. Ended up using GAM as this is the easiest and gives the most helpful responses.
I have tried changing this from multiple places and i always get the error:
ERROR: 400: #UserInIllegalDomain Invitation cannot be created for user in this domain - failedPrecondition
the command:
gam update course 8077159861 owner hiddenusername#longleypark.ac.uk
(username is DEFINITELY correct ive just hidden it as its not vital information)
Any help would be much appreciated, from what i can tell some guides said to add longleypark.ac.uk to whitelisted domain under classroom but because this is the primary domain for this g suite it says you cant add your current domain so this isnt an option.
I believe the google API is broken. If anyone can prove otherwise would be a great help.
Google API support haven't managed to give me any proper response, keep saying they will test and let me know but I haven't been informed of any results yet.
Google forums support has informed me once a user account is deleted and 20 days have passed the account becomes unrecoverable which means any classrooms they are the owner of become "orphans" which means "limited functionality" and the inability to change the owner ever again, the only solution is to recreate the classroom from scratch, unfortunately along with the original account all the documents submitted to that classroom are also lost.
There are NO ways around this even though the ownerId field for a classroom really should be editable from some sort of database management tool or admin console/API.
I have run into this problem today. Thought using the API I'd be able to swap the ownerId, but no.
Bizarre that Google don't let you do this as a Google Workspace admin. We know have 3 GCSE sets which are unusable with 3 months of the 2 year course left. Very frustrating.

Prevent conflicts when creating events in a resource calendar using Google Calendar V3

I'm trying to solve a problem of preventing double bookings using the Google Calendar Api (v3). I'm using Google resources in a GSuite environment. The bookings are made from a centralized platform on behalf of multiple users and are applied to multiple rooms (resources). The responsible application authenticates using a Service Account. The resource calendars are all configured to only accept invitations that do not conflict.
So far I found out that there are at least two ways to book a resource:
Create an event in the resource calendar
Create an event in a personal calendar en add the resource as attendee
I found out that in the first senario, events can be added to the resource calendar, even if they cause a conflict. There is no failure in the api response, the event is just added.
I tested the second scenario with my personal calendar and found out that the room needs to respond to the event invitation. Apparently that process may take several minutes before the room responds.
I'm building an api that should respond as fast as possible, but I want it to only create an event if it doesn't conflict. Of course I can use the free/busy information to reduce the chance of conclicts, but I would like to eliminate that chance entirely.
Does anyone know if Google provides functionality for this problem out of the box?
Thanks in advance.
Google does not do any validation on the api. You send what you want inserted and they insert it. Its up to you to ensure that it does not conflict with anything already there.
May i suggest that you check before you insert it and then do a double check in a few minutes to ensure there is no conflicts if there is then delete it again.

Google Calendar API - Designed for?

I would like to implement a Google Calendar API using FullCalendar Javascript.
Before any start of coding I have some problem to understand what is the main purpose of the Google Calendar API.
As you know there is some Auth process before creation and enabling API.
That means that I, as owner or developer want to use Google Calendar API so I get client/secret/keys strings and it is OK.
I can create an app where I can “promote” my Google Account Calendar being public and then I can show all events from that calendar (dentist booking etc).
Also I am able to use Calendar in another way. For example: Within my App I can create one page where users can auth to their google accounts and see their events
are already created.
But, What if my logged users don't have a Google Accounts.
Google Calendar is strongly connected to already created google accounts? Is it possible to use Google Calendar strictly as an REST API?
I know that this may be a stupid questions but this is something that most of Google Calendar API beginners have problem with.
There are technically two ways of accessing a calendar on Google Calendar.
Your first option is where you are using Oauth2 to authenticate your users. They give you access to their google calendar and you can then insert events directly into their calendar. You can also see the events that they currently have. This as you said wont work if the user in question does not have a google account.
Your second option is to use something called a service account. Think of a service account as a dummy user. It has its own Google calendar account minus the web view. You could potentially us that to store events in a global calendar application calendar. Then when you want to add a user to an event you invite them you can set notification no they should receive an email and they will them be able to add the event to their own personal calendar. For you this may work out better because it does not require you to have access to the Users google calendar the only draw back will be there is no way for you to see if said user has any events going on at that time since you don't have access to their account to check.
I have given you a couple of links to some tutorials that I have write a few years ago that explains the difference between oauth2 and service accounts.
Google Calendars are tied to users, which means Google users. First of all, to access the API you need a GoogleAPIs developer key. This requires a Google account. Then you need Google accounts to use or test with the API.
The Google Calendar is tied to a user account as described at https://developers.google.com/google-apps/calendar/concepts/. One thing to notice is that "event" is an atomic unit in the API and a calendar is a set of events. In other words, a calendar in the Calendar API isn't a timespan like we think of "this year's calendar", it's a set of event objects. Within the app you describe, if the users don't have google accounts then they don't have associated calendars. You would have to tie these users to some kind of public or shared calendar. It's unclear if using the Calendar API solely as a REST API as you describe (without actual or "verified" user accounts) is in accordance with the Terms & Conditions. That aside, in theory it may be possible to use a service like that as a REST API to suit your needs. Maybe you can try inverting the problem so an event becomes the user with a primary calendar. Now the location of the event can be treated as the API-event. Other (normal Google) users can "attend" the location, at the given time, created by this event (=user). You could also apply the same approach to invert the problem by location. Location becomes the user, event becomes the API-event, and attendees are normal users. The latter approach is used commonly in businesses to book resources like rooms, equipment, etc.

Resources