gdata-objectivec-clientを使ってGoogleカレンダーにアクセスする方法をまとめます。
カレンダーを取得する
// サービス初期化 GDataServiceGoogleCalendar *service = [[GDataServiceGoogleCalendar alloc] init]; // アカウント設定 [service setUserCredentialsWithUsername:@"Username" password:@"Password"]; // 全てのカレンダーを取得するURL NSURL *feedURL = [NSURL URLWithString:kGDataGoogleCalendarDefaultAllCalendarsFeed]; // サービスからフェッチする [service fetchFeedWithURL:feedURL delegate:self didFinishSelector:@selector(ticket:finishedWithFeed:error:)];
カレンダー取得後のイベントハンドリング
- (void)ticket:(GDataServiceTicket *)ticket finishedWithFeed:(GDataFeedCalendar *)feed error:(NSError *)error { if (error == nil) { NSArray *entries = [feed entries]; if ([entries count] > 0) { // 最初のカレンダー GDataEntryCalendar *firstCalendar = [entries objectAtIndex:0]; // カレンダーの名前 GDataTextConstruct *titleTextConstruct = [firstCalendar title]; NSString *title = [titleTextConstruct stringValue]; // カレンダーの色 NSString *color = [[firstCalendar color] stringValue]; // カレンダーのURL NSURL *url = [[firstCalendar alternateLink] URL]; NSLog(@"first calendar's title: %@", title); } else { NSLog(@"the user has no calendars") } } else { NSLog(@"fetch error: %@", error); } }
イベントの取得
// 取得するイベントの最大日時 NSCalendar *nsCalendar = [NSCalendar currentCalendar]; NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; [comps setDay:365]; // 365日後 NSDate *maxDate = [nsCalendar dateByAddingComponents:comps toDate:[NSDate date] options:0]; // タイムゾーン NSTimeZone *tz = [NSTimeZone localTimeZone]; NSURL *calendarURL = url; // カレンダーから取得したalternateLink // 検索クエリ GDataQueryCalendar *query = [GDataQueryCalendar calendarQueryWithFeedURL:calendarURL]; NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a" forKey:@"sortorder"]; [query setCustomParameters:dict]; // 開始日は今日〜365日後までの範囲 [query setMinimumStartTime:[GDataDateTime dateTimeWithDate:[NSDate date] timeZone:tz]]; [query setMaximumStartTime:[GDataDateTime dateTimeWithDate:maxDate timeZone:tz]]; // 8件取得 [query setMaxResults:8]; // 開始日でソート [query setOrderBy:@"starttime"]; // 繰り返し予定をひとつのイベントとして扱う [query setShouldExpandRecurrentEvents:YES]; [service fetchFeedWithQuery:query delegate:self didFinishSelector:@selector(eventListTicket:finishedWithFeed:error:)];
イベント取得後のイベントハンドリング
- (void)eventListTicket:(GDataServiceTicket *)ticket finishedWithFeed:(GDataFeedCalendarEvent *)feed error:(NSError *)error { if (error == nil) { for ( GDataEntryCalendarEvent *event in [feed entries]) { // イベント名 NSString *eventTitle = [[event title] stringValue]; // イベント日時 NSArray *eventTimes = [event times]; GDataWhen *when = [eventTimes objectAtIndex:0]; NSDate *startDateTime = [[when startTime] date]; NSDate *endDateTime = [[when endTime] date]; BOOL *hasTime = [][when startTime] hasTime]; } } }
このエントリーに対するコメント
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
- トラックバック
-
- google calendarとの同期2011/08/13, 2:12 AM
[…] 4.データの取得方法 データ取得はKrayさんの記事が非常に参考になります。 4.データの書き込み 1)カレンダーの追加 – […]
「いいね!」で応援よろしくお願いします!