I'm confused about using the Google Calendar API for adding/modifying events in ASP.NET webforms (C#).
I'm not sure if I need oAuth or what. My app is on my own server accessing my own domain and my own calendar. I don't need other users to give me access to their calendar; I only need to access my own via my app.
On on one of my aspx pages, I'd like to send event info to my Google calendar to add (or later modify) the event.
I've checked all kinds of code examples and the Google getting started guides. I'm just not clear on what exactly is needed. I've set up an API key and an oAuth2 client ID. The Google instructions have sent me in circles and it's likely due to my needing clarification on what's need.
Can someone please clear-up my confusion and point me in the right direction?
To Call a google clould oauth2 protected resource
From your server to google server
Without user interaction
Accessing your own data
Using C#
Code :
var private_key = @"-----BEGIN PRIVATE KEY-ccc-END PRIVATE KEY-----\n";
string calendarId = @"[email protected]";
var client_email = @"[email protected]";
var credential =
new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(client_email)
{
Scopes = new string[] { CalendarService.Scope.Calendar }
}.FromPrivateKey(private_key));
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
});
Use service methods to get the data
Private Key and client_email can be generated from this link
Calendar Id can be found on calendar.google.com
You must share your calendar with client_email see the demo
Google You You
Pay + Pay + Pay +
Google Google You
Manage Manage Manage%
+----------+ +----------+ +----------+
| Gmail | | | | |
| Calendar | | G Suite | | Google |
| drive | | | | Cloud |
| | | | | |
+----^-----+ +----+-----+ +------+---+
| ^ ^
| | |
| | |
| | |
+-------------------------------------------------------------+
| | | | |
| | | | |
| | | Google | |
| | | Oauth2 | |
| | | Server | |
| | | | |
| | | | |
+-------------------------------------------------------------+
| | |
| | +----------------+ |
| | | | |
| | | | | No
| |require | | | Consent
| |admin | | |
| |consent | | |
|require | | +-------+
|user | | |
|consent +---------+ Your app |
| | |
| | |
| | |
| | |
+-------------------------+ |
| |
| |
| |
+----------------+
You
Pay +
You
Manage
https://console.developers.google.com/projectselector/apis/library/calendar-json.googleapis.com
click send
Install-Package Google.Apis.Calendar.v3
using Google.Apis.Auth.OAuth2;
using Google.Apis.Calendar.v3;
using Google.Apis.Calendar.v3.Data;
using Google.Apis.Services;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace CalendarQuickstart
{
class Program
{
static void Main(string[] args)
{
string jsonFile = "xxxxxxx-xxxxxxxxxxxxx.json";
string calendarId = @"[email protected]";
string[] Scopes = { CalendarService.Scope.Calendar };
ServiceAccountCredential credential;
using (var stream =
new FileStream(jsonFile, FileMode.Open, FileAccess.Read))
{
var confg = Google.Apis.Json.NewtonsoftJsonSerializer.Instance.Deserialize<JsonCredentialParameters>(stream);
credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(confg.ClientEmail)
{
Scopes = Scopes
}.FromPrivateKey(confg.PrivateKey));
}
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Calendar API Sample",
});
var calendar = service.Calendars.Get(calendarId).Execute();
Console.WriteLine("Calendar Name :");
Console.WriteLine(calendar.Summary);
Console.WriteLine("click for more .. ");
Console.Read();
// Define parameters of request.
EventsResource.ListRequest listRequest = service.Events.List(calendarId);
listRequest.TimeMin = DateTime.Now;
listRequest.ShowDeleted = false;
listRequest.SingleEvents = true;
listRequest.MaxResults = 10;
listRequest.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
// List events.
Events events = listRequest.Execute();
Console.WriteLine("Upcoming events:");
if (events.Items != null && events.Items.Count > 0)
{
foreach (var eventItem in events.Items)
{
string when = eventItem.Start.DateTime.ToString();
if (String.IsNullOrEmpty(when))
{
when = eventItem.Start.Date;
}
Console.WriteLine("{0} ({1})", eventItem.Summary, when);
}
}
else
{
Console.WriteLine("No upcoming events found.");
}
Console.WriteLine("click for more .. ");
Console.Read();
var myevent = DB.Find(x => x.Id == "eventid" + 1);
var InsertRequest = service.Events.Insert(myevent, calendarId);
try
{
InsertRequest.Execute();
}
catch (Exception)
{
try
{
service.Events.Update(myevent, calendarId, myevent.Id).Execute();
Console.WriteLine("Insert/Update new Event ");
Console.Read();
}
catch (Exception)
{
Console.WriteLine("can't Insert/Update new Event ");
}
}
}
static List<Event> DB =
new List<Event>() {
new Event(){
Id = "eventid" + 1,
Summary = "Google I/O 2015",
Location = "800 Howard St., San Francisco, CA 94103",
Description = "A chance to hear more about Google's developer products.",
Start = new EventDateTime()
{
DateTime = new DateTime(2019, 01, 13, 15, 30, 0),
TimeZone = "America/Los_Angeles",
},
End = new EventDateTime()
{
DateTime = new DateTime(2019, 01, 14, 15, 30, 0),
TimeZone = "America/Los_Angeles",
},
Recurrence = new List<string> { "RRULE:FREQ=DAILY;COUNT=2" },
Attendees = new List<EventAttendee>
{
new EventAttendee() { Email = "[email protected]"},
new EventAttendee() { Email = "[email protected]"}
}
}
};
}
}
string jsonFile = "xxxxxxx-xxxxxxxx.json";
string calendarId = @"[email protected]";
2019/01/13