Google Calendar APIメモ

Data API Developer’s Guide: .NET

How to Read the Google Calendar in C#

.NET Client Library Developer’s Guide(日本語訳 原文入り)

予定取得のサンプル

/*
Google Calendarからデータを取得するためのサンプル。
(c) 2011 Tadahiro Ishisaka
Source Code License : Apache License, Version 2.0
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.GData.Client;
using Google.GData.Calendar;
using Google.GData.Extensions;
using Google.GData.AccessControl;

namespace GCal1
{
    class Program
    {
        static private List events; //予定のリスト
        static private List dates;    //予定のある日付のリスト

        static void Main(string[] args) {
            events = new List();
            dates = new List();
            //ログインする
            CalendarService service = new CalendarService("Gcal1");
            //認証設定
            service.setUserCredentials("HOGE@gmail.com", "PASSWORD");

            //カレンダーのリストを取得し、表示する。
            CalendarQuery cQuery = new CalendarQuery();
            cQuery.Uri = new Uri("https://www.google.com/calendar/feeds/default/allcalendars/full");
            CalendarFeed cFeeds = service.Query(cQuery);
            Console.WriteLine("私のカレンダー");
            foreach (var entry in cFeeds.Entries) {
                //カレンダーのタイトルを表示
                Console.WriteLine(entry.Title.Text);
                //カレンダーのURIを表示
                Console.WriteLine(entry.Content.Src.Content);
                Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
                EventQuery query = new EventQuery();
                query.Uri = new Uri(entry.Content.Src.Content);
                query.StartTime = DateTime.Today;
                query.EndTime = DateTime.Today.AddMonths(3);
                query.SortOrder = CalendarSortOrder.ascending; //あんまり当てにならない
                //取得して表示
                EventFeed feeds = service.Query(query) as EventFeed;
                //各カレンダーの予定を取得する。
                foreach (EventEntry cEntry in feeds.Entries) {
                    events.Add(cEntry);
                    cEntry.Times.ToList().ForEach(d => {
                        if (dates.Count() > 0) {
                            //重複した日付は日付のリストに保存しない
                            if (dates.FindIndex(day => {
                                    if (day.Date == d.StartTime.Date) return true;
                                    else return false;
                                }) == -1) {
                                dates.Add(d.StartTime.Date);
                            }
                        }
                        else {
                            dates.Add(d.StartTime.Date);
                        }
                    });
                }
            }
            //予定の表示
            Console.WriteLine("今後3ヶ月の予定\n\r");
            dates.Sort();
            dates.ForEach(d => {
                List dayEvents = events.FindAll(e => {
                    if (d.Date == e.Times.First().StartTime.Date || d.Date == e.Times.First().EndTime.Date) 
                        return true;
                    else 
                        return false;
                });
                Console.WriteLine(d.Date.ToString());
                Console.WriteLine("");
                dayEvents.ForEach(e => {
                    Console.WriteLine("日時:{0} - {1}", e.Times.First().StartTime, e.Times.First().EndTime);
                    Console.WriteLine("件名:{0}", e.Title.Text);
                    Console.WriteLine("場所:{0}", e.Locations.First().ValueString);
                    Console.WriteLine(e.Content.Content);
                    Console.WriteLine("--------------------------------------------------------------");
                });
                Console.WriteLine("==============================================================");
            });

            Console.Read();
        }
    }

}

CC BY-SA 4.0 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

コメントを残す

This site uses Akismet to reduce spam. Learn how your comment data is processed.

No Code, No Life.

%d人のブロガーが「いいね」をつけました。