GData Objective-C ClientでGoogleカレンダーにアクセスする このエントリをはてなブックマークに登録

2010年04月13日

func09func09 / ,

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];
		}
	}
}

関連記事

クレイについてもっと知りたい方は…

  1. クレイの3つの強みを見てみる。
  2. WEBシステムのことなら何でもご相談ください。

「いいね!」で応援よろしくお願いします!

このエントリーに対するコメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


トラックバック
  1. google calendarとの同期2011/08/13, 2:12 AM

    […] 4.データの取得方法 データ取得はKrayさんの記事が非常に参考になります。 4.データの書き込み 1)カレンダーの追加 – […]

we use!!Ruby on RailsAmazon Web Services

このページの先頭へ