Google Calendarで日本の祝日を取得
前にちょこっと書いたものの実装編
struct Holiday { public DateTime Date; public string Title; public override string ToString() { return Title + ":" + Date.ToString("yyyy/MM/dd"); } } class Calender { private const string requestUrl = "http://www.google.com/calendar/feeds/ja.japanese%23holiday%40group.v.calendar.google.com/public/full-noattendees" + "?start-min={0}&start-max={1}&max-results={2}"; static string DateToString( DateTime date ) { return date.ToString( "yyyy-MM-dd" ); } static public List<Holiday> GetHolidays() { return GetHolidays( DateTime.Now, DateTime.Now.AddYears( 1 ), 100 ); } static public List<Holiday> GetHolidays( DateTime start, DateTime maxDate, int maxResult ) { var request = (HttpWebRequest)WebRequest.Create( string.Format( requestUrl, DateToString( start ), DateToString( maxDate ), maxResult ) ); var response = (HttpWebResponse)request.GetResponse(); XmlDocument document = new XmlDocument(); document.Load( response.GetResponseStream() ); var list = document.GetElementsByTagName("entry"); List<Holiday> holidays =new List<Holiday>(); foreach (XmlNode childNode in list) { holidays.Add( GetHoliday( childNode ) ); } return holidays; } private static Holiday GetHoliday( XmlNode node ) { Holiday holiday=new Holiday(); foreach ( XmlNode childNode in node ) { if ( childNode.Name == "title" ) { holiday.Title = childNode.InnerText; } if ( childNode.Name == "gd:when" ) { holiday.Date = DateTime.Parse( childNode.Attributes.GetNamedItem( "startTime" ).Value ); } } return holiday; } }
Main
static void Main( string[] args ) { foreach (var holiday in Calender.GetHolidays() ) { Console.WriteLine( holiday ); } }