4

Java を使用して Google スプレッドシートを読みたいのですが、これを行うにはGoogle スプレッドシート APIを使用することをお勧めします。

問題は、手順を安全にしたいときに始まります。そのため、OAuth 2.0 の使用が推奨されます。公式ページでは、.NET のみを使用してこれを行う方法を示し、「Javaクライアント ライブラリは現在 OAuth 2.0 をサポートしていませんと述べいます。OAuth 1.0Client Login

これは確かですか?Javaクライアントライブラリを直接使用するのではなく、特定のパラメータを持つリクエストを介して、Javaを介してOAuth 2.0認証を行う方法はありませんか?

提案をいただければ幸いです。

4

3 に答える 3

11

また、開発者向けドキュメントが OAuth2 以外のすべてについて Java の例を提供しているのも、非常にばかげていると思いました。これを機能させるために使用したサンプルコードを次に示します。完全を期すために、後のセクションにスプレッドシートの取得の例が含まれています。以下に示すように、必要なスコープを Java DrEdit の例に追加する必要があることにも注意してください。

public class GSpreadsheets {

    private static final String CLIENT_ID = "YOUR_CLIENT_ID";
    private static final String CLIENT_SECRET = "YOUR_SECRET_ID";
    private static final String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";

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

        if (CLIENT_ID.equals("YOUR_CLIENT_ID") || CLIENT_SECRET.equals("YOUR_SECRET_ID")) {
            throw new RuntimeException(
                    "TODO: Get client ID and SECRET from https://cloud.google.com/console");
        }

            // get credentials similar to Java DrEdit example
            // https://developers.google.com/drive/examples/java
        HttpTransport httpTransport = new NetHttpTransport();
        JsonFactory jsonFactory = new JacksonFactory();

        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET,
                Arrays.asList(DriveScopes.DRIVE, 
                              "https://spreadsheets.google.com/feeds", 
                              "https://docs.google.com/feeds"))
                .setAccessType("online")
                .setApprovalPrompt("auto").build();

        String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();
        System.out.println("Please open the following URL in your "
                + "browser then type the authorization code:");
        System.out.println("  " + url);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String code = br.readLine();

        GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
        GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);

            // create the service and pass it the credentials you created earlier
        SpreadsheetService service = new SpreadsheetService("MyAppNameHere");
        service.setOAuth2Credentials(credential);

        // Define the URL to request.  This should never change.
        URL SPREADSHEET_FEED_URL = new URL(
            "https://spreadsheets.google.com/feeds/spreadsheets/private/full");

        // Make a request to the API and get all spreadsheets.
        SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class);
        List<SpreadsheetEntry> spreadsheets = feed.getEntries();

        // Iterate through all of the spreadsheets returned
        for (SpreadsheetEntry spreadsheet : spreadsheets) {
          // Print the title of this spreadsheet to the screen
          System.out.println(spreadsheet.getTitle().getPlainText());
        }
    }
}
于 2014-01-14T21:19:38.590 に答える
1

[編集]

Java OAuth2 コード

[google-spreadsheet-api] と OAuth2 に関するブログ投稿、コード
http://soatutorials.blogspot.co.at/2013/08/google-spreadsheet-api-connecting-with.html

関連する質問: Google gdata クライアント API を使用した Java/Scala からの OAuth2 認証

[編集終了]

私が使用した: Google ドライブDrEditチュートリアル、完全な例は、ドライブで OAuth 2.0 を使用する方法を示しています。このコードは、Google スプレッドシートの GData スタイル API で動作します。(注: リフレッシュ トークンは含まれていませんが、リフレッシュ トークンは期待どおりに機能するため、追加するのは難しくありません。) -

補足: より適切に文書化された API は Google-Apps-Script です。

于 2013-04-15T03:59:08.667 に答える