Usare Google Calendar in Ruby

Mattepuffo's logo
Usare Google Calendar in Ruby

Usare Google Calendar in Ruby

Google mette a disposzione parecchie API per i suoi servizi; oggi vediamo come usare quelle per Google Calendar con Ruby!

Il punto di partenza, per qualsiasi API, è creare un progetto; potete iniziare con il wizard ufficiale.

Poi andate nella sezione Libreria ed attivate le API che volete; Google Calendar richiede delle credenziali, che potete creare nella sezione Credenziali.

Create quelle di tipo OAuth; una volta fatto dovete scaricare il file in formato JSON (sempre dalla pagina Credenziali), e salvatelo da qualche parte.

Adesso installiamo la gem:

$ sudo gem install google-api-client -v '~> 0.8'

E adesso il codice:

require 'google/apis/calendar_v3'
require 'googleauth'
require 'googleauth/stores/file_token_store'
require 'fileutils'

OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'.freeze
APPLICATION_NAME = 'Google Calendar Test'.freeze
CLIENT_SECRETS_PATH = 'client_secret.json'.freeze
CREDENTIALS_PATH = 'token.yaml'.freeze
SCOPE = Google::Apis::CalendarV3::AUTH_CALENDAR_READONLY

def authorize
  client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH)
  token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH)
  authorizer = Google::Auth::UserAuthorizer.new(client_id, SCOPE, token_store)
  user_id = 'default'
  credentials = authorizer.get_credentials(user_id)
  if credentials.nil?
    url = authorizer.get_authorization_url(base_url: OOB_URI)
    puts 'Seguire il link per autorizzare il programma:' + url
    code = gets
    credentials = authorizer.get_and_store_credentials_from_code(
      user_id: user_id, code: code, base_url: OOB_URI
    )
  end
  credentials
end

service = Google::Apis::CalendarV3::CalendarService.new
service.client_options.application_name = APPLICATION_NAME
service.authorization = authorize

calendar_id = 'primary'
response = service.list_events(calendar_id,
                               max_results: 10,
                               single_events: true,
                               order_by: 'startTime',
                               time_min: Time.now.iso8601)
puts 'EVENTI TROVATI:'
puts 'NON CI SONO EVENTI' if response.items.empty?
response.items.each do |event|
  start = event.start.date || event.start.date_time
  puts "- #{event.summary} (#{start})"
end

Qui prendiamo solo gli ultimi 10 eventi, se ci stanno.

Enjoy!


Condividi

Commentami!