2014年4月21日 星期一

GData APIs ( Google Data APIs ) - Calendar

個人通常記錄未來工作事項都是習慣使用紙本記錄,因為好處是隨身、任意塗改、做不止文字的記錄,但我相信還是有更多的人較喜歡使用 Google 日曆,除了可以記錄工作事項外,且可將事項分類、重要性、附檔、結合 Gmail....等好處多多 ( 請參閱: Google日曆 最佳化:在忙碌瑣事中有效率掌握最重要行程)。

此篇文章只提供重要程式碼,去使用 C# Windows Form 來建置一個視窗程式與 Google 日曆互動。

未下載 GData APIs 且未安裝請參考:GData APIs ( Google Data APIs ) 介紹與安裝

引用參考

using Google.GData.Calendar;
using Google.GData.Client;
using Google.GData.Extensions;

建立 CalendarService

service = new CalendarService(projectid);
service.setUserCredentials(username, password);

若無 projectid,請到 Google Developers Console 申請。

取得 使用者 所有日曆

public void GetUserCalendars()
{
    FeedQuery query = new FeedQuery();
    query.Uri = new Uri("http://www.google.com/calendar/feeds/default");

    AtomFeed calFeed = service.Query(query);

    for (int i = 0; i < calFeed.Entries.Count; i++)
    {
        // Console.WriteLine(calFeed.Entries[i].Title.Text);
        // do something ...
    }
}

取得所有日曆事件

public AtomEntryCollection GetAllEvents()
{
    EventQuery myQuery = new EventQuery(calendarURI);
    EventFeed myResultsFeed = service.Query(myQuery) as EventFeed;

    entries = myResultsFeed.Entries;

    return entries;
}
calendarURI 為 https://www.google.com/calendar/feeds/default/private/full。

取得日曆 日期區間 事件

public AtomEntryCollection GetDateRangeEvents(DateTime startTime, DateTime endTime)
{
    EventQuery myQuery = new EventQuery(calendarURI);
    myQuery.StartTime = startTime;
    myQuery.EndTime = endTime;

    EventFeed myResultsFeed = service.Query(myQuery) as EventFeed;

    entries = myResultsFeed.Entries;

    return entries;
}

建立事件

public void CreateEvent(string title, string content, DateTime dtStart, DateTime dtEnd)
{
    EventEntry entry = new EventEntry();

    entry.Title.Text = title;
    entry.Content.Content = content;

    When eventTime = new When(dtStart, dtEnd);
    entry.Times.Add(eventTime);

    Uri postUri = new Uri(calendarURI);

    AtomEntry insertedEntry = service.Insert(postUri, entry);

}

更新事件

public void UpdateEvent(EventEntry entry)
{
    Uri postUri = new Uri(calendarURI);

    AtomEntry insertedEntry = service.Update(entry);

}

實作

我用以上幾個函式寫了一個視窗程式,下圖為成品




3 則留言 :

  1. 您好!
    我照您的程式執行後(我有改成vb)
    在Dim calFeed As atomfeed = service.Query(query)
    會發生Execution of request failed: https://www.google.com/calendar/feeds/default
    的問題
    您也會有一樣的問題嗎?

    回覆刪除
    回覆
    1. 我想了解一下詳細狀況,我的 SKYPE:david06172002

      刪除
    2. Google API v2 在 2014/11/17 更新到 Google API v3 了,所以在 2014/11/17 後都不能用。

      刪除

Related Posts Plugin for WordPress, Blogger...