diff --git a/README.md b/README.md index 8cba03d4..d245af76 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,5 @@ Yet Another Very Small Company For the moment, overall a little home made blogging system. -See for more information +See for more information diff --git a/web/Helpers/Google/CalendarApi.cs b/web/Helpers/Google/CalendarApi.cs new file mode 100644 index 00000000..4badd376 --- /dev/null +++ b/web/Helpers/Google/CalendarApi.cs @@ -0,0 +1,103 @@ +// +// Calendar.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +using System; +using Yavsc.Helpers; +using System.Web.Profile; +using Yavsc.Model.Google; +using System.Net; +using System.IO; +using System.Text; +using Newtonsoft.Json; +using System.Web; + +namespace Yavsc.Helpers.Google +{ + public class Calendar: ApiClient + { + protected static string getCalListUri = "https://www.googleapis.com/calendar/v3/users/me/calendarList"; + protected static string getCalEntriesUri = "https://www.googleapis.com/calendar/v3/calendars/{0}/events"; + + private static string dateFormat = "yyyy-MM-ddTHH:mm:ss"; + private string timeZone = "+01:00"; + + public CalendarList GetCalendars (string cred, out string json) + { + CalendarList res = null; + HttpWebRequest webreq = WebRequest.CreateHttp (getCalListUri); + webreq.Headers.Add (HttpRequestHeader.Authorization, cred); + webreq.Method = "GET"; + webreq.ContentType = "application/http"; + using (WebResponse resp = webreq.GetResponse ()) { + using (Stream respstream = resp.GetResponseStream ()) { + using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) { + json = readresp.ReadToEnd (); + res = JsonConvert.DeserializeObject (json); + } + } + resp.Close (); + } + webreq.Abort (); + return res; + } + + public CalendarEntryList GetCalendar (string calid, DateTime mindate, DateTime maxdate, ProfileBase upr, out string responseStr) + { + string uri = string.Format ( + getCalEntriesUri, HttpUtility.UrlEncode (calid)) + + string.Format ("?orderBy=startTime&singleEvents=true&timeMin={0}&timeMax={1}&key=" + API_KEY, + HttpUtility.UrlEncode (mindate.ToString (dateFormat) + timeZone), + HttpUtility.UrlEncode (maxdate.ToString (dateFormat) + timeZone)); + + HttpWebRequest webreq = WebRequest.CreateHttp (uri); + string cred = OAuth2.GetFreshGoogleCredential (upr); + webreq.Headers.Add (HttpRequestHeader.Authorization, cred); + webreq.Method = "GET"; + webreq.ContentType = "application/http"; + CalendarEntryList res = null; + try { + using (WebResponse resp = webreq.GetResponse ()) { + using (Stream respstream = resp.GetResponseStream ()) { + using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) { + responseStr = readresp.ReadToEnd (); + try { + res = JsonConvert.DeserializeObject (responseStr); + } catch (JsonReaderException ex) { + respstream.Close (); + resp.Close (); + webreq.Abort (); + throw new GoogleErrorException(ex,responseStr); + } + } + respstream.Close (); + } + resp.Close (); + } + } catch (WebException ex) { + webreq.Abort (); + throw new GoogleErrorException (ex); + } + webreq.Abort (); + return res; + } + } + +}