DEV Community

Captain Iminza
Captain Iminza

Posted on

Building an Event Scheduler in .NET Using Google Calendar API

Prerequisites

Before diving in, ensure you have the following:

  1. Visual Studio: A recent version for developing your .NET application.
  2. .NET SDK: Make sure you have the latest version installed.
  3. Google Account: Required for accessing the Google Tasks API.
  4. Google Cloud Project:Set up in the Google Cloud Console.

Step 1: Setting Up Your Google Cloud Project

Create a New Project:

  • Navigate to the Google Cloud Console.
  • Click on Select a project, then New Project.
  • Name your project and click Create.

Enable the Google Tasks API:

  • In the project dashboard, go to Library.
  • Search for "Google Calendar API" and enable it.

Create Credentials:

  • Go to the Credentials section and click on Create Credentials.
  • Choose OAuth client ID.
  • Configure the consent screen with the required fields.
  • Set the application type to Web application.
  • Add authorized redirect URIs (e.g., http://localhost:5000/signin-google).
  • Save your credentials and note the Client ID and Client Secret.

Step 2: Creating a .NET Application

Create a New Project:

Open Visual Studio and create a new ASP.NET Core Web Application.
Choose the Web Application (Model-View-Controller) template.

Install Required NuGet Packages: Open the Package Manager Console and run the following command:
Install-Package Google.Apis.Calendar.v3
Install-Package Google.Apis.Auth

Create Event Model:

public class CalendarEvent
{
public string Summary { get; set; }
public string Location { get; set; }
public string Description { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}

Create Google Calendar Service

Create _ICalendarService _Interface:

public interface ICalendarService
{
void CreateEvent(CalendarEvent calendarEvent);
}

Create an implementation of this interface:

using Google.Apis.Calendar.v3;
using Google.Apis.Calendar.v3.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.IO;
using System.Threading;

public class CalendarService : ICalendarService
{
    private readonly CalendarService _calendarService;

    public CalendarService()
    {
        _calendarService = InitializeService();
    }

    private CalendarService InitializeService()
    {
        UserCredential credential;

        using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
        {
            string credPath = "token.json";
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                new[] { CalendarService.Scope.Calendar },
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
        }

        return new CalendarService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Event Scheduler",
        });
    }

    public void CreateEvent(CalendarEvent calendarEvent)
    {
        var newEvent = new Event()
        {
            Summary = calendarEvent.Summary,
            Location = calendarEvent.Location,
            Description = calendarEvent.Description,
            Start = new EventDateTime()
            {
                DateTime = calendarEvent.Start,
                TimeZone = "America/Los_Angeles",
            },
            End = new EventDateTime()
            {
                DateTime = calendarEvent.End,
                TimeZone = "America/Los_Angeles",
            },
        };

        var calendarId = "primary";
        _calendarService.Events.Insert(newEvent, calendarId).Execute();
    }
}
Enter fullscreen mode Exit fullscreen mode

Add Services

Register Services in Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<ICalendarService, CalendarService>();
services.Configure<GoogleApiSettings>(builder.Configuration.GetSection(nameof(GoogleApiSettings)));
}

Configure AppSettings.json

"GoogleApiSettings": {
"ClientId": "your client id",
"ClientSecret": "your client secret",
"Scope": [ "https://www.googleapis.com/auth/calendar" ],
"ApplicationName": "Google Canlendar Api",
"User": "user",
"CalendarId": "primary"
}

Create CalendarController:

using Microsoft.AspNetCore.Mvc;

public class CalendarController : Controller
{
    private readonly ICalendarService _calendarService;

    public CalendarController(ICalendarService calendarService)
    {
        _calendarService = calendarService;
    }

    [HttpPost]
    public IActionResult CreateEvent(CalendarEvent newEvent)
    {
        _calendarService.CreateEvent(newEvent);
        return RedirectToAction("Index");
    }
}
Enter fullscreen mode Exit fullscreen mode

Conclusion

Integrating Google Calendar API into your .NET application enables users to manage events seamlessly.

With the powerful combination of .NET and Google Calendar API, the possibilities for building robust event management solutions are virtually limitless. Happy coding!

Top comments (2)

Collapse
 
anthony05 profile image
Anthony

Hello I'm getting error 400

Collapse
 
dianaiminza profile image
Captain Iminza

Hello did you get your credentials from Google 400 is usually a bad request error. Configure app settings using valid credentials