Coder Social home page Coder Social logo

zen-juen / autocalendar Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 2.0 1.43 MB

A Python automation scheduling system based on the Google Calendar API

License: MIT License

Python 100.00%
automation calendar-events autoschedule python-google api-client googlecalendarapi

autocalendar's Introduction

AutoCalendar ๐Ÿ“†

AutoCalendar is a Python scheduling automation system based on the Google Calendar API ideal for scheduling research participants.

For now, there are two main functions:

  1. Automatic allocation of time slots indicated on a doodle poll (especially useful if participants are told to choose as many available slots as they can).
  2. Add events into Google Calendar by extracting the relevant information from an excel sheet containing participants' details, such as date, time, and location.

Check out AutoRemind too!

How to Use

Automatic Scheduling of Participants

Download your doodle poll into an excel spreadsheet, like so:

Screenshot1

For demonstration purposes, we will use the doodle_poll.xls file located in the data folder in this repository. Pass the excel file into the autoallocate function. Here, we set export_to=False so that the final dataframe is not exported, but printed in the console (to check before exporting).

import autocalendar
file = 'doodle_poll.xls'  
autocalendar.autoallocate(file, allocate_type='multiple', export_to=False)

Feedback is provided on whether participants are successfully allocated or not, and the name of any participant who is not allocated will be printed, like so:

All participants successfully allocated.

Out[50]: 
        Date      Timeslots      Participant
0   03/11/20  08:00 โ€“ 11:30        Subject 1
1   03/11/20  08:30 โ€“ 12:00        Subject 4
2   03/11/20  09:00 โ€“ 12:30        Subject 3
3   05/11/20  08:00 โ€“ 11:30        Subject 2
4   05/11/20  08:30 โ€“ 12:00        Subject 6
5   05/11/20  11:30 โ€“ 15:00        Subject 8
6   05/11/20  12:00 โ€“ 15:30        Subject 6
7   05/11/20  15:00 โ€“ 18:30        Subject 7
8   05/11/20  15:30 โ€“ 19:00        Subject 7
9   09/11/20  08:00 โ€“ 11:30        Subject 5
10  09/11/20  08:30 โ€“ 12:00        Subject 4
11  09/11/20  11:30 โ€“ 15:00        Subject 3
12  09/11/20  12:00 โ€“ 15:30        Subject 3
13  09/11/20  15:00 โ€“ 18:30        Subject 7
14  09/11/20  15:30 โ€“ 19:00  No One Assigned
15  11/11/20  08:00 โ€“ 11:30        Subject 9
16  11/11/20  08:30 โ€“ 12:00        Subject 5
17  11/11/20  11:30 โ€“ 15:00        Subject 3
18  11/11/20  12:00 โ€“ 15:30        Subject 8
19  11/11/20  15:00 โ€“ 18:30  No One Assigned
20  11/11/20  15:30 โ€“ 19:00  No One Assigned
21  13/11/20  08:00 โ€“ 11:30  No One Assigned
22  13/11/20  08:30 โ€“ 12:00  No One Assigned
23  13/11/20  11:30 โ€“ 15:00       Subject 10
24  13/11/20  12:00 โ€“ 15:30        Subject 8
25  13/11/20  15:00 โ€“ 18:30       Subject 10
26  13/11/20  15:30 โ€“ 19:00       Subject 10

Adding Events into Google Calendar

You will first need to start with a xlsx file containing information on participants' scheduled slots. For example:

Screenshot

For demonstration purposes, we will use the participant_schedules.xlsx file located in the data folder in this repository.

Firstly, you would need a client_secret.json file: you can do this by going to https://console.developers.google.com/apis/credentials. Click on the 'credentials' tab and then download the client secret file. This will set up OAuth 2.0 so that Google API can be accessed.

import autocalendar

# Set up Oauth to access Google API
service = autocalendar.setup_oath(token_path='token.pkl',
                                  client_path='client_secret.json')

Then, you can preprocess the input excel sheet (containing participants' scheduled slots). As you may have multiple headers in this file, you can denote which row is the main header row specifying the information we want to extract, using header_row.

# Read and tidy excel sheet
participants = autocalendar.preprocess_file('participant', header_row=2)

The next step is to extract the date, time and location based on header column names in the participants file. Argument filter_column can also be activated to select only some participants to be added into google calendar. In this example here, we are adding events for only those whom have No under the Calendar_Event column.

# Extract info
dates, start_points, end_points, locations, to_add = autocalendar.extract_info(participants, date_col='Date_Session1', time_col='Timeslot_Session1', location_col='Location_Session1', filter_column='Calendar_Event', select='No')

The final step is to prepare the event details and add them into Google Calendar. Argument calendar_id (defaults to 'primary') can also be modified according to which active google calendar to use by simply specifying the name of the calendar.

# Execute
autocalendar.add_event(service, dates, start_points, end_points, locations, to_add,
                       event_name='MRI study Session 1', description='', timezone='Asia/Singapore',
                       creator_email='[email protected]', calendar_id='NTU Calendar',
                       silent=False, name_col='Participant Name', date_col='Date_Session1',
                       location_col='Location_Session1', time_col='Timeslot_Session1')

If silent in add_event() is set to False, you will also get printed output on each participant's appointment that is added into Google Calendar!

Adding calendar event for Subject1 at 01-01-2021, 11.00am-11.30am, B1-26 
Adding calendar event for Subject2 at 01-01-2021, 10.30am-11.00am, B1-26 
Adding calendar event for Subject3 at 01-01-2021, 4.00pm-4.30pm, B1-26 
Adding calendar event for Subject4 at 02-01-2021, 9.30am-10.00am, B1-26 
Adding calendar event for Subject5 at 02-01-2021, 11.30am-12.00pm, B1-26 
Adding calendar event for Subject6 at 03-01-2021, 12.00pm-12.30pm, B1-26 

Future Direction

autocalendar's People

Contributors

zen-juen avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.