GAE(java)からのGoogle Data API を利用したスプレッドシート作成について

650 views
Skip to first unread message

しゃお

unread,
Nov 1, 2010, 10:53:14 PM11/1/10
to Google-App-Engine-Japan
皆様はじめまして、しゃおと申します。
 http://code.google.com/intl/ja/apis/gdata/
にて公開されている、Google Documents List APIを用いてスプレッドシートの新規作成を試みているのですが、
DocsServiceインスタンスからinsertメソッドを実行した際に
com.google.gdata.util.ServiceExceptionが発生してうまくいきません。

渡しているURLに問題があるのではないかと疑っているのですが、新規で作成する場合の指定方法をご存じのかたはいらっしゃらないでしょうか?
以下、記述したソースの該当箇所です。
(画面からの入力内容を記述したスプレッドシートを新規作成し、シートへ記載するプログラムにする予定です)

<ソース>
public class HogeServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {

// 新規ドキュメントの生成
//--------------------------------------------------------------------------------------------------//
// サービス権限の取得
// DocsServiceを取得する
DocsService client = null;
try {
client = SpreadsheetUtil.getDocstService();
} catch (AuthenticationException e3) {
// TODO 自動生成された catch ブロック
e3.printStackTrace();
}

// 新規ドキュメントの生成
//--------------------------------------------------------------------------------------------------//
SpreadsheetEntry newEntry = null;
newEntry = new SpreadsheetEntry();

newEntry.setTitle(new PlainTextConstruct("NewTitleSheet"));

try {
client.insert(new URL("https://docs.google.com/"), newEntry);
} catch (ServiceException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}

// シートへの記載
//--------------------------------------------------------------------------------------------------//
//(省略)//
}
}

public class SpreadsheetUtil {

public static DocsService getDocstService()
throws AuthenticationException {
// このアプリケーションの名称。任意の名前を設定する。
String applicationName = "hoge-sample-1";
// GoogleAppsもしくはGoogleアカウントのメールアドレスとパスワードを設定する。
String username = "hoge";
String password = "hoge";

// Docsサービスへの認証を行う。
DocsService service = new DocsService(applicationName);
service.setUserCredentials(username, password);
return service;
}

}


<エラー>
com.google.gdata.util.ServiceException: Invalid redirected-to URL - /
DocAction?action=unsupported_browser&gsessionid=[セッションIDが返ってきています]
at
com.google.gdata.client.GoogleService.handleRedirectException(GoogleService.java:
711)
at com.google.gdata.client.GoogleService.insert(GoogleService.java:
601)
at
com.google.gdata.client.media.MediaService.insert(MediaService.java:
381)
at easyalarm.EditAlarmInfoServlet.doGet(EditAlarmInfoServlet.java:
122)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
511)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1166)
at
com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
58)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:
43)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
at
com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:
122)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
388)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
182)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
418)
at
com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:
70)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:349)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
542)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:582)


Daisuke Yamashita

unread,
Nov 1, 2010, 11:28:28 PM11/1/10
to google-app-...@googlegroups.com
山下@SOBAプロジェクトです。

GAEうんぬんの前にローカルで実行する小さいアプリケーションとして実装して試すのが良いと
思います。パッと見た感じではgdataライブラリの使用方法が間違っているように見えます。

何年か前に少し触っただけなのですが、確かfeedのurlを渡す必要があったと思います。

以下のurlにinsertしてみてください。
https://docs.google.com/feeds/default/private/full/

gdataのドキュメントはかなり詳しく書いてあったハズなので、まずはドキュメントをキッチリ
読んでみて下さい。

新しいドキュメントの作成方法も書いてあります。
> http://code.google.com/intl/ja/apis/documents/docs/3.0/developers_guide_java.html

また、gdataはサンプルも充実しているので、そちらもあわせてご確認下さい。
> http://code.google.com/p/gdata-java-client/source/browse/#svn/trunk/java/sample

gdata用のEclipseプラグインも良く出来ています。
> http://code.google.com/intl/ja/apis/gdata/articles/eclipse.html


2010/11/2 しゃお <ao.ip...@gmail.com>:

> --
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、google-app-engine...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja からこのグループにアクセスしてください。
>
>

--
Daisuke Yamashita

knj77

unread,
Nov 2, 2010, 5:05:31 AM11/2/10
to Google-App-Engine-Japan
knj77といいます。こんにちは。

#山下さん、すみません。返信先を間違えたので再送します

しゃおさんと同じような事を自分もやっています。
http://code.google.com/p/gobo-tools/
http://d.hatena.ne.jp/knj77/20101007/1286462560

ソースも公開しているので、よろしければ参考にしてみてください。
http://code.google.com/p/gobo-tools/source/browse/trunk/gobo-tools/src/gobo/service/GbSpreadsheetService.java




On 11月2日, 午後12:28, Daisuke Yamashita <dddais...@gmail.com> wrote:
> 山下@SOBAプロジェクトです。
>
> GAEうんぬんの前にローカルで実行する小さいアプリケーションとして実装して試すのが良いと
> 思います。パッと見た感じではgdataライブラリの使用方法が間違っているように見えます。
>
> 何年か前に少し触っただけなのですが、確かfeedのurlを渡す必要があったと思います。
>
> 以下のurlにinsertしてみてください。https://docs.google.com/feeds/default/private/full/
>
> gdataのドキュメントはかなり詳しく書いてあったハズなので、まずはドキュメントをキッチリ
> 読んでみて下さい。
>
> 新しいドキュメントの作成方法も書いてあります。
>
> >http://code.google.com/intl/ja/apis/documents/docs/3.0/developers_gui...
>
> また、gdataはサンプルも充実しているので、そちらもあわせてご確認下さい。
>
> >http://code.google.com/p/gdata-java-client/source/browse/#svn/trunk/j...
>
> gdata用のEclipseプラグインも良く出来ています。
>
> >http://code.google.com/intl/ja/apis/gdata/articles/eclipse.html
>
> 2010/11/2 しゃお <ao.ip.ph...@gmail.com>:

しゃお

unread,
Nov 6, 2010, 5:14:37 PM11/6/10
to Google-App-Engine-Japan
お二方とも情報ありがとうございます。

#山下@SOBAプロジェクト さん
 無事新規作成できました!!
 公式のサンプルは頂いたURLになってました、注意不足でした…

#knj77 さん
 一通りスプレッドシートの操作を確認後、
 ドキュメント一覧の取得について試そうとしていたところでした、
 公開されているソース、是非とも参考にさせていただきます。


※ドキュメント関連充実しているのでクドイかも知れませんが、
せっかくなので一応完成ソース↓(新規で空スプレッドシートを作るだけ)

package sample;

import java.net.URL;
import com.google.gdata.client.docs.DocsService;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.docs.SpreadsheetEntry;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;

public class SpreadsheetCreate {

public static void main(String[] args) throws Exception {

// 新規ドキュメントの生成
//
--------------------------------------------------------------------------------------------------//
// サービス権限の取得
// DocsServiceを取得する
DocsService client = null;
try {
client = SpreadsheetUtil.getDocstService();
} catch (AuthenticationException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}

// 新規ドキュメントの生成
//
--------------------------------------------------------------------------------------------------//
SpreadsheetEntry newEntry = null;
newEntry = new SpreadsheetEntry();
String title = "NewTitleSheet";
newEntry.setTitle(new PlainTextConstruct(title));

try {
client.insert(new URL(
"https://docs.google.com/feeds/default/private/full/ "),
newEntry);
System.out.println("新規のスプレッドシート " + title + " を作成しました");
} catch (ServiceException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}

package sample;

import com.google.gdata.client.docs.DocsService;
import com.google.gdata.util.AuthenticationException;

public class SpreadsheetUtil {
public static DocsService getDocstService() throws
AuthenticationException {
// このアプリケーションの名称。任意の名前を設定する。
String applicationName = "hoge-sample-1";
// GoogleAppsもしくはGoogleアカウントのメールアドレスとパスワードを設定する。
String username = "hoge";
String password = "hoge";

// Docsサービスへの認証を行う。
DocsService service = new DocsService(applicationName);
service.setUserCredentials(username, password);
return service;
}
}



On 11月2日, 午後6:05, knj77 <kenji.ishi...@gmail.com> wrote:
> knj77といいます。こんにちは。
>
> #山下さん、すみません。返信先を間違えたので再送します
>
> しゃおさんと同じような事を自分もやっています。http://code.google.com/p/gobo-tools/http://d.hatena.ne.jp/knj77/20101007/1286462560
>
> ソースも公開しているので、よろしければ参考にしてみてください。http://code.google.com/p/gobo-tools/source/browse/trunk/gobo-tools/sr...
Reply all
Reply to author
Forward
0 new messages