17

の使用方法と、(現在は と呼ばれる) でのGoogle Data Java Client Libraryそのサポートを示すサンプル コードはどこにありますか?OAuth 2.0Google Spreadsheet APIGoogle Sheets API

4

3 に答える 3

7

回答は元の質問からマッチ サイトの「Q&A」形式に移動しました。

Google Data Java Client LibraryサポートしますOAuth 2.0。残念ながら、ライブラリには完全なサンプルがなく、Google Spreadsheet API.

これは私のために働いた例です。誰かが役に立てば幸いです。

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeRequestUrl;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.gdata.util.ServiceException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

public class NewClass {

  // Retrieve the CLIENT_ID and CLIENT_SECRET from an APIs Console project:
  //     https://code.google.com/apis/console
  static String CLIENT_ID = "your-client-id";
  static String CLIENT_SECRET = "your-client-secret";
  // Change the REDIRECT_URI value to your registered redirect URI for web
  // applications.
  static String REDIRECT_URI = "the-redirect-uri";
  // Add other requested scopes.
  static List<String> SCOPES = Arrays.asList("https://spreadsheets.google.com/feeds");


public static void main (String args[]) throws IOException, ServiceException, com.google.protobuf.ServiceException{
    Credential credencial = getCredentials();
    JavaApplication20.printDocuments(credencial);
}


  /**
   * Retrieve OAuth 2.0 credentials.
   * 
   * @return OAuth 2.0 Credential instance.
   */
  static Credential getCredentials() throws IOException {
    HttpTransport transport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();

    // Step 1: Authorize -->
    String authorizationUrl =
        new GoogleAuthorizationCodeRequestUrl(CLIENT_ID, REDIRECT_URI, SCOPES).build();

    // Point or redirect your user to the authorizationUrl.
    System.out.println("Go to the following link in your browser:");
    System.out.println(authorizationUrl);

    // Read the authorization code from the standard input stream.
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("What is the authorization code?");
    String code = in.readLine();
    // End of Step 1 <--

    // Step 2: Exchange -->
    GoogleTokenResponse response =
        new GoogleAuthorizationCodeTokenRequest(transport, jsonFactory, CLIENT_ID, CLIENT_SECRET,
            code, REDIRECT_URI).execute();
    // End of Step 2 <--

    // Build a new GoogleCredential instance and return it.
    return new GoogleCredential.Builder().setClientSecrets(CLIENT_ID, CLIENT_SECRET)
        .setJsonFactory(jsonFactory).setTransport(transport).build()
     .setAccessToken(response.getAccessToken()).setRefreshToken(response.getRefreshToken());
  }

  // …
}

ここで他のクラス:

import com.google.api.client.auth.oauth2.Credential;
import com.google.gdata.client.docs.DocsService;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.docs.DocumentListEntry;
import com.google.gdata.data.docs.DocumentListFeed;
import com.google.gdata.data.docs.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.CellEntry;
import com.google.gdata.data.spreadsheet.CellFeed;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
import com.google.gdata.data.spreadsheet.WorksheetEntry;
import com.google.gdata.data.spreadsheet.WorksheetFeed;
import com.google.gdata.util.ServiceException;
// ...
import java.io.IOException;
import java.net.URL;
import java.util.List;
// ...

public class JavaApplication20 {
  // …

  static void printDocuments(Credential credential) throws IOException, ServiceException {
    // Instantiate and authorize a new SpreadsheetService object.

     SpreadsheetService service =
            new SpreadsheetService("Aplication-name");
     service.setOAuth2Credentials(credential);
    // Send a request to the Documents List API to retrieve document entries.
    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<com.google.gdata.data.spreadsheet.SpreadsheetEntry> spreadsheets = feed.getEntries();
     if (spreadsheets.isEmpty()) {
      // TODO: There were no spreadsheets, act accordingly.
    }
com.google.gdata.data.spreadsheet.SpreadsheetEntry spreadsheet = spreadsheets.get(0);
    System.out.println(spreadsheet.getTitle().getPlainText());
// Get the first worksheet of the first spreadsheet.
    // TODO: Choose a worksheet more intelligently based on your
    // app's needs.
    WorksheetFeed worksheetFeed = service.getFeed(
        spreadsheet.getWorksheetFeedUrl(), WorksheetFeed.class);
    List<WorksheetEntry> worksheets = worksheetFeed.getEntries();
    WorksheetEntry worksheet = worksheets.get(0);

    // Fetch the cell feed of the worksheet.
    URL cellFeedUrl = worksheet.getCellFeedUrl();
    CellFeed cellFeed = service.getFeed(cellFeedUrl, CellFeed.class);

    // Iterate through each cell, printing its value.
    for (CellEntry cell : cellFeed.getEntries()) {
      // Print the cell's address in A1 notation
      System.out.print(cell.getTitle().getPlainText() + "\t");
      // Print the cell's address in R1C1 notation
      System.out.print(cell.getId().substring(cell.getId().lastIndexOf('/') + 1) + "\t");
      // Print the cell's formula or text value
      System.out.print(cell.getCell().getInputValue() + "\t");
      // Print the cell's calculated value if the cell's value is numeric
      // Prints empty string if cell's value is not numeric
      System.out.print(cell.getCell().getNumericValue() + "\t");
      // Print the cell's displayed value (useful if the cell has a formula)
      System.out.println(cell.getCell().getValue() + "\t");
    }

  }

  // ...
}
于 2014-08-23T00:08:51.563 に答える
1

ここで、例を含む段階的な説明を見つけることができます。その結果、コードは次のようになります。

SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1");
service.setProtocolVersion(SpreadsheetService.Versions.V1); // It's important to specify the version

service.setRequestFactory(makeAuthorization());

SpreadsheetQuery q = new SpreadsheetQuery(new URL(DEFAULT_SPREADSHEET_QUERY));

SpreadsheetFeed feed;
try {
  feed = service.query(q, SpreadsheetFeed.class);
}
catch (AuthenticationException e) {
  refreshAccessToken(service);

  feed = service.query(q, SpreadsheetFeed.class);
}

SpreadsheetEntry spreadsheet = findSpreadSheet(feed);

...

// do your stuff

...

// a couple of utility methods are used above:

private void refreshAccessToken(SpreadsheetService service) throws Exception {
  String accessToken = callGetAccessTokenApi();

  // save access token

  service.getRequestFactory().setAuthToken(new GoogleAuthTokenFactory.OAuth2Token(new GoogleCredential().setAccessToken(accessToken)));
}

//private static final String GOOGLE_API_HOST = "https://www.googleapis.com/";

private String callGetAccessTokenApi() throws Exception {
  HttpClient client = HttpClients.createDefault();

  String url = String.format(
    "%soauth2/v3/token?client_id=%s&client_secret=%s&refresh_token=%s&grant_type=refresh_token",
    GOOGLE_API_HOST,
    googleAuthorization.getClientId(),
    googleAuthorization.getClientSecret(),
    googleAuthorization.getRefreshToken()
  );
  HttpPost post = new HttpPost(url);
  post.addHeader(ACCEPT_HEADER_NAME, "application/x-www-form-urlencoded");

  try {
    HttpResponse response = client.execute(post);

    JSONObject object = readJson(response);

    return object.getString("access_token");
  }
  finally {
    post.releaseConnection();
  }
}

private Service.GDataRequestFactory makeAuthorization() {
  Service.GDataRequestFactory requestFactory = new HttpGDataRequest.Factory();

  // load access token

  requestFactory.setAuthToken(new GoogleAuthTokenFactory.OAuth2Token(new GoogleCredential().setAccessToken(accessToken)));

  return requestFactory;
}
于 2015-10-07T06:59:52.237 に答える
0

(2016 年 12 月)この質問の多くとここでの回答のほとんどは、次のように古くなっています: 1) GData APIは Google API の前の世代です。すべての GData API が廃止されたわけではありませんが、最新のGoogle APIはすべてGoogle Data プロトコルを使用していませ。2) Googleは 2016 年に新しい Google Sheets API v4 (GData ではない) をリリースしました。新しい API を使用するには、Google APIs Client Library for Javaを入手し、最新のSheets APIを使用する必要があります。以前のどの API よりも柔軟です。

API を使い始めるのに役立つJava クイックスタート コード サンプルを次に示します。これには OAuth2 コードも含まれています。また、シート API の JavaDocs リファレンスは、自由に使用できるすべてのクラスの概要を示しています。Python に「アレルギー」がない場合は、OAuth 認証コードを説明するビデオと、Sheets API を使用した「実際の」例を含む別のビデオのペアも作成しました。

最新の API は、以前のリリースでは利用できなかった機能を提供します。つまり、ユーザー インターフェースを使用しているかのように、開発者がシートにプログラムでアクセスできるようにします (固定された行の作成、セルの書式設定の実行、行/列のサイズ変更、ピボット テーブルの追加、グラフの作成など)。 ) また、この API は主に、上記のようにプログラムによるスプレッドシートの操作と機能用であることに注意してください。

アップロードとダウンロード、インポートとエクスポート (アップロードとダウンロードと同じですが、さまざまな形式との間の変換) などのファイルレベルのアクセスを実行するには、代わりにGoogle ドライブ APIを使用します。 (Pythonも):

  • (単純) Google スプレッドシートを CSV としてエクスポートする (ブログ投稿)
  • (中級者向け) 「貧乏人の平文から PDF へ」コンバーター (ブログ投稿) (*)

(*) - TL;DR: プレーン テキスト ファイルをドライブにアップロードし、Google ドキュメント形式にインポート/変換してから、そのドキュメントを PDF としてエクスポートします。上記の投稿では Drive API v2 を使用しています。このフォローアップの投稿では、Drive API v3 への移行について説明しています。また、両方の投稿を組み合わせた開発者のビデオはこちらです。

Google API (主に Python または JavaScript) の使用方法の詳細については、私が制作しているさまざまな Google 開発者向けビデオ (シリーズ 1およびシリーズ 2 ) をご覧ください。

于 2016-12-02T01:57:04.060 に答える