2010年5月30日日曜日

groovyとgdata-java-clientとiCal4jでGoogle Calendarのイベントを一覧表示する

groovyとgdata-java-clientとiCal4jでGoogle Calendarのイベントを一覧表示するには、以下のコードを実行します。

import com.google.api.client.googleapis.*
import com.google.api.client.googleapis.auth.clientlogin.*
import com.google.api.data.calendar.v2.*
import com.google.api.data.calendar.v2.atom.*
import com.google.api.client.xml.atom.*
import com.google.api.client.util.*
import net.fortuna.ical4j.data.*
import net.fortuna.ical4j.model.property.*

// 日時
public class When
{
@Key("@startTime")
DateTime startTime
@Key("@endTime")
DateTime endTime
}

// エントリ
public class Entry
{
@Key
String title
@Key("gd:when")
When when
@Key("gd:recurrence")
String recurrence

def getRecurrenceInfo()
{
String result = ""
if( recurrence != null ){
def sr = new StringReader(
"BEGIN:VCALENDAR\n" + recurrence + "END:VCALENDAR")
def cb = new CalendarBuilder()
def calendar = cb.build(sr)
for( property in calendar.getProperties() ){
if( property.name.equals("DTSTART") ){
result += "開始日:" + property.value + "\n"
}
if( property instanceof RRule ){
result += "周期:" + property.recur.getFrequency() + "\n"
}
}
}
return result
}
}

// フィード
public class Feed
{
@Key
String title
@Key
List<Entry> entry
}

// Parser設定
GoogleTransport transport = new GoogleTransport()
transport.applicationName = "yourcorp-yourapp-1.0"
transport.setVersionHeader(GoogleCalendar.VERSION)
ap = new AtomParser()
ap.namespaceDictionary = GoogleCalendarAtom.NAMESPACE_DICTIONARY
transport.addParser(ap)

username = "youraccount@gmail.com"
password = 'yourpassword'

// 認証
cl = new ClientLogin()
cl.authTokenType = GoogleCalendar.AUTH_TOKEN_TYPE
cl.username = username
cl.password = password
cl.authenticate().setAuthorizationHeader(transport)

// リクエスト
request = transport.buildGetRequest()
// カレンダのURLは以下の形式。google calendarの設定の限定公開のXMLから
// userIDとmagicCookieが取れる
// http://www.google.com/calendar/feeds/userID/private-magicCookie/full
request.url = "http://www.google.com/calendar/feeds/xxxxgroup.calendar.google.com/private-xxxx/full"


feed = request.execute().parseAs( Feed.class)
println "feed title:" + feed.title
for(item in feed.entry){
println "title:" + item.title
if( item.when != null ){
println "開始日時:" + item.when?.startTime
println "終了日時:" + item.when?.endTime
}
if( item.recurrence != null ){
// 繰り返しイベント
println item.getRecurrenceInfo()
}
}


動作環境
groovy 1.7.2, JDK6 Update20, gdata-java-2.2.1-alpha, iCal4j-1.0-rc3

関連情報
gdata-java-client
http://code.google.com/p/gdata-java-client/

iCal4jのホームページ
http://wiki.modularity.net.au/ical4j/index.php?title=Main_Page

0 件のコメント:

コメントを投稿