SQL Server
SQL Server
Google Calendar Search Events (List Events with Optional Query Parameters)
See more Google Calendar Examples
Demonstrates how to specify optional query parameters for listing events. This example uses the "q" parameter to free-text search for events, and uses the "timeMin" parameter to specify a lower bound for an event's end time.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- This example uses a previously obtained access token having permission for the
-- Google Calendar scope.
-- In this example, Get Google Calendar OAuth2 Access Token, the access
-- token was saved to a JSON file. This example fetches the access token from the file..
DECLARE @jsonToken int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonToken OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @jsonToken, 'LoadFile', @success OUT, 'qa_data/tokens/googleCalendar.json'
EXEC sp_OAMethod @jsonToken, 'HasMember', @iTmp0 OUT, 'access_token'
IF @iTmp0 = 0
BEGIN
PRINT 'No access token found.'
EXEC @hr = sp_OADestroy @jsonToken
RETURN
END
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
EXEC sp_OAMethod @jsonToken, 'StringOf', @sTmp0 OUT, 'access_token'
EXEC sp_OASetProperty @http, 'AuthToken', @sTmp0
-- We'll want to build a URL with the query params..
DECLARE @sbUrl int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbUrl OUT
EXEC sp_OAMethod @sbUrl, 'Append', @success OUT, 'https://www.googleapis.com/calendar/v3/calendars/{$calendarId}/events?'
-- Use the HTTP request object as a helper for creating the URL encoded query param list..
DECLARE @req int
EXEC @hr = sp_OACreate 'Chilkat.HttpRequest', @req OUT
-- Find events with the word "pizza".
EXEC sp_OAMethod @req, 'AddParam', NULL, 'q', 'pizza'
-- Get events for the current date/time or later.
DECLARE @dt int
EXEC @hr = sp_OACreate 'Chilkat.CkDateTime', @dt OUT
EXEC sp_OAMethod @dt, 'SetFromCurrentSystemTime', @success OUT
EXEC sp_OAMethod @dt, 'GetAsTimestamp', @sTmp0 OUT, 0
EXEC sp_OAMethod @req, 'AddParam', NULL, 'timeMin', @sTmp0
-- Add these query params to the URL:
EXEC sp_OAMethod @req, 'GetUrlEncodedParams', @sTmp0 OUT
EXEC sp_OAMethod @sbUrl, 'Append', @success OUT, @sTmp0
-- Examine the URL..
EXEC sp_OAMethod @sbUrl, 'GetAsString', @sTmp0 OUT
PRINT 'URL: ' + @sTmp0
-- The URL looks like this:
-- https://www.googleapis.com/calendar/v3/calendars/{$calendarId}/events?q=pizza&timeMin=2017-08-11T13%3A35%3A28Z
-- Let's get events in the primary calendar. A calendar ID could have be used instead of "primary".
EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'calendarId', 'primary'
DECLARE @sbResponse int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbResponse OUT
EXEC sp_OAMethod @sbUrl, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, @sTmp0, @sbResponse
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbUrl
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @dt
EXEC @hr = sp_OADestroy @sbResponse
RETURN
END
EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT
IF @iTmp0 <> 200
BEGIN
-- Note: If a 401 unauthorized response is received, it likely means that the OAuth2 access token needs
-- to be refreshed or re-fetched.
EXEC sp_OAGetProperty @http, 'LastStatus', @iTmp0 OUT
PRINT 'Error response status: ' + @iTmp0
EXEC sp_OAMethod @sbResponse, 'GetAsString', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbUrl
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @dt
EXEC @hr = sp_OADestroy @sbResponse
RETURN
END
EXEC sp_OAMethod @sbResponse, 'GetAsString', @sTmp0 OUT
PRINT @sTmp0
-- A sample JSON response:
-- (Code for parsing the Google Calendar events is shown below.)
-- {
-- "kind": "calendar#events",
-- "etag": "\"p32cafkumkb7ta0g\"",
-- "summary": "support@chilkatcloud.com",
-- "updated": "2017-08-11T13:19:48.143Z",
-- "timeZone": "America/Chicago",
-- "accessRole": "owner",
-- "defaultReminders": [
-- {
-- "method": "popup",
-- "minutes": 10
-- }
-- ],
-- "nextSyncToken": "CJin09aiz9UCEJin09aiz9UCGAU=",
-- "items": [
-- {
-- "kind": "calendar#event",
-- "etag": "\"3004915160212000\"",
-- "id": "02pv1cpdp7vm11htnfi3ii7iie",
-- "status": "confirmed",
-- "htmlLink": "https://www.google.com/calendar/event?eid=MDJwdjFjcGRwN3ZtMTFodG5maTNpaTdpaWUgc3VwcG9ydEBjaGlsa2F0Y2xvdWQuY29t",
-- "created": "2017-08-11T13:19:40.000Z",
-- "updated": "2017-08-11T13:19:40.106Z",
-- "summary": "Eat Lou Malnati's Pizza",
-- "creator": {
-- "email": "support@chilkatcloud.com",
-- "self": true
-- },
-- "organizer": {
-- "email": "support@chilkatcloud.com",
-- "self": true
-- },
-- "start": {
-- "dateTime": "2017-08-12T12:00:00-05:00"
-- },
-- "end": {
-- "dateTime": "2017-08-12T13:00:00-05:00"
-- },
-- "iCalUID": "02pv1cpdp7vm11htnfi3ii7iie@google.com",
-- "sequence": 0,
-- "hangoutLink": "https://plus.google.com/hangouts/_/chilkatcloud.com/support?hceid=c3VwcG9ydEBjaGlsa2F0Y2xvdWQuY29t.02pv1cpdp7vm11htnfi3ii7iie",
-- "reminders": {
-- "useDefault": true
-- }
-- }
-- ]
-- }
--
--
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
EXEC sp_OAMethod @json, 'LoadSb', @success OUT, @sbResponse
DECLARE @numEvents int
EXEC sp_OAMethod @json, 'SizeOfArray', @numEvents OUT, 'items'
DECLARE @i int
SELECT @i = 0
WHILE @i < @numEvents
BEGIN
EXEC sp_OASetProperty @json, 'I', @i
EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'items[i].summary'
PRINT @sTmp0
EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'items[i].start.dateTime'
PRINT @sTmp0
EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'items[i].end.dateTime'
PRINT @sTmp0
PRINT '--'
SELECT @i = @i + 1
END
-- Sample output:
-- Eat Lou Malnati's Pizza
-- 2017-08-12T12:00:00-05:00
-- 2017-08-12T13:00:00-05:00
-- --
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbUrl
EXEC @hr = sp_OADestroy @req
EXEC @hr = sp_OADestroy @dt
EXEC @hr = sp_OADestroy @sbResponse
EXEC @hr = sp_OADestroy @json
END
GO