2010年7月18日日曜日

groovyとgdata-java-clientでGoogle Documents内の指定した名前のスプレッドシートの更新履歴を表示する

groovyとgdata-java-clientでGoogle Documents内の指定した名前のスプレッドシートの更新履歴を表示するには、以下のコードを実行します。

import com.google.api.client.googleapis.*
import com.google.api.client.googleapis.auth.clientlogin.*
import com.google.api.data.docs.v3.*
import com.google.api.data.docs.v3.atom.*
import com.google.api.client.xml.atom.*
import com.google.api.client.util.*
import com.google.api.client.http.*

// エントリ
public class Entry
{
@Key
String title
@Key
String id
@Key("gd:feedLink")
List<Link> links
}

// リンク
public class Link
{
@Key("@rel")
String rel
@Key("@type")
String type
@Key("@href")
String href
}

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

public class Author
{
@Key
String name
@Key
String email
}

// リビジョン用エントリ
public class EntryForRevisions
{
// タイトル
@Key
String title
// 更新日時
@Key
DateTime updated
// 著者
@Key
Author author
}

// リビジョン用フィード
public class FeedForRevisions
{
@Key
String title
@Key
List<Link> link
@Key
List<EntryForRevisions> entry
}


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

// 認証
cl = new ClientLogin()
cl.authTokenType = GoogleDocumentsList.AUTH_TOKEN_TYPE
cl.username = "youraccount@gmail.com"
cl.password = 'yourpassword'
cl.authenticate().setAuthorizationHeader(transport)

// 指定した名前のスプレッドシートの更新履歴を表示する
docname = "さんぷる1"
requrl = "https://docs.google.com/feeds/default/private/full/-/spreadsheet" +
"?title=${URLEncoder.encode(docname, 'UTF-8')}&title-exact=true"
while(requrl != null){
request = transport.buildGetRequest()
request.url = requrl
feed = request.execute().parseAs(Feed.class)
println "feed title:" + feed.title
for(item in feed.entry){
// 指定した名前のスプレッドシートが見つかったので更新履歴を表示
println item.title

for(fl in item.links){
if( fl.rel == "http://schemas.google.com/docs/2007/revisions" ){
request = transport.buildGetRequest()
request.url = fl.href
revFeed = request.execute().parseAs(FeedForRevisions.class)
for( entry in revFeed.entry ){
println "----"
println entry.title
println new Date(entry.updated.value)
println entry.author.name + ":" + entry.author.email
}
}
}
}
// 100個以上の文書の場合
requrl = null
for(link in feed.link){
if( link.rel == "next" ){
requrl = link.href
}
}
}


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

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

0 件のコメント:

コメントを投稿