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)カレンダーの追加 – […]
「いいね!」で応援よろしくお願いします!