it-swarm.com.de

Erstellen Sie Tabellenkalkulation mithilfe der Google Tabellenkalkulations-API in Google Drive in Java

Ich hatte ein Tool erstellt, mit dem die Google-Tabelle gefüllt wurde ..__ Es funktionierte gut für 1 Jahr, seit heute habe ich Fehler 

Exception in thread "main" com.google.gdata.util.AuthenticationException: Error authenticating (check service name)
at com.google.gdata.client.GoogleAuthTokenFactory.getAuthException(GoogleAuthTokenFactory.Java:688)
at com.google.gdata.client.GoogleAuthTokenFactory.getAuthToken(GoogleAuthTokenFactory.Java:560)
at com.google.gdata.client.GoogleAuthTokenFactory.setUserCredentials(GoogleAuthTokenFactory.Java:397)
at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.Java:364)
at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.Java:319)
at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.Java:303)

Dies ist der Teil des Codes für die Verbindung mit Google Mail:

String USERNAME = "[email protected]"; ->of course I'm using proper username and password
    String PASSWORD = "*******";
    SpreadsheetService service
            = new SpreadsheetService("SandboxCheck");
    service.setUserCredentials(USERNAME, PASSWORD);

Ich weiß nicht, wie ich mich mit Google Mail verbinden kann. Ich habe versucht, dies über oAuth zu tun, aber ich weiß nicht, wie ich das tun soll. In den Beispielen unter https://developers.google.com/google-apps/spreadsheets/authorize gibt es nur Code für .net.

17
Skwarosz

Ich habe endlich mit Hilfe von hier geschafft, eine solche Verbindung herzustellen. Alles funktioniert wie zuvor.

  1. Registrieren Sie sich unter https://console.developers.google.com
  2. Neues Projekt erstellen
  3. Unter APIs & Auth -> Credential -> Neue Client-ID für Dienstkonto erstellen
  4. Wenn die Client-ID generiert wird, müssen Sie den P12-Schlüssel generieren.
  5. Die Client-ID wird im nachstehenden Code benötigt. Die E-Mail-Adresse ist die Adresse

Unten ist der Arbeitscode 

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
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.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
import com.google.gdata.util.ServiceException;
import Java.io.File;
import Java.io.IOException;
import Java.net.MalformedURLException;
import Java.net.URL;
import Java.security.GeneralSecurityException;
import Java.util.Arrays;
import Java.util.List;
public class OAuthIntegration{
    public static void main(String[] args) throws MalformedURLException, GeneralSecurityException, IOException, ServiceException {
        URL SPREADSHEET_FEED_URL;
        SPREADSHEET_FEED_URL = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");

        File p12 = new File("./key.p12");

        HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory jsonFactory = new JacksonFactory();
        String[] SCOPESArray = {"https://spreadsheets.google.com/feeds", "https://spreadsheets.google.com/feeds/spreadsheets/private/full", "https://docs.google.com/feeds"};
        final List SCOPES = Arrays.asList(SCOPESArray);
        GoogleCredential credential = new GoogleCredential.Builder()
                .setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId("cliend_ID")
                .setServiceAccountScopes(SCOPES)
                .setServiceAccountPrivateKeyFromP12File(p12)
                .build();

        SpreadsheetService service = new SpreadsheetService("Test");

        service.setOAuth2Credentials(credential);
        SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class);
        List<SpreadsheetEntry> spreadsheets = feed.getEntries();

        if (spreadsheets.size() == 0) {
            System.out.println("No spreadsheets found.");
        }

         SpreadsheetEntry spreadsheet = null;
        for (int i = 0; i < spreadsheets.size(); i++) {
            if (spreadsheets.get(i).getTitle().getPlainText().startsWith("ListOfSandboxes")) {
                spreadsheet = spreadsheets.get(i);
                System.out.println("Name of editing spreadsheet: " + spreadsheets.get(i).getTitle().getPlainText());
                System.out.println("ID of SpreadSheet: " + i);
            }
        }

    }

}

Ich hoffe, das hilft bei Problemen, mit denen ich konfrontiert war ... Dies ist die Liste der verwendeten Gläser:

guava-11.0.2.jar
gdata-spreadsheet-3.0.jar
gdata-maps-2.0.jar
gdata-core-1.0.jar
jackson-core-asl-1.9.11.jar
jackson-core-2.1.3.jar
google-oauth-client-1.20.0.jar
google-http-client-jackson2-1.20.0.jar
google-http-client-jackson-1.20.0.jar
google-http-client-1.20.0.jar
google-api-client-1.20.0.jar
18
Skwarosz

Google hat gerade die Unterstützung für OAuth1.0 eingestellt. OAuth2 muss verwendet werden. Wechseln Sie zum Wechseln zunächst zur Google Developer Console, erstellen Sie ein Projekt und legen Sie einen Berechtigungsnachweis fest. Aktualisieren Sie dann Ihren Code ähnlich dem folgenden Java-Code:

private void createSpreadSheetService() throws GeneralSecurityException, IOException, ServiceException {
   HttpTransport httpTransport = new NetHttpTransport();
   JacksonFactory jsonFactory = new JacksonFactory();
   String [] SCOPESArray= {"https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds"};
   final List SCOPES = Arrays.asList(SCOPESArray);
   GoogleCredential credential = new GoogleCredential.Builder()
     .setTransport(httpTransport)
     .setJsonFactory(jsonFactory)
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
     .setServiceAccountScopes(SCOPES)
     .setServiceAccountPrivateKeyFromP12File(SERVICE_ACCOUNT_PKCS12_FILE)
     .build();

   SPREADSHEETSERVICE = new SpreadsheetService("data");
   SPREADSHEETSERVICE.setOAuth2Credentials(credential);

}

Sie benötigen zwei Bibliotheken: Google-API-Client und Google-HTTP-Client-Jackson. Wenn Sie Maven verwenden, einschließlich der folgenden Abhängigkeiten in pom.xml.

 <dependency>
  <groupId>com.google.api-client</groupId>
  <artifactId>google-api-client</artifactId>
  <version>1.19.0</version>
  <type>jar</type>
 </dependency>
 <dependency>
  <groupId>com.google.http-client</groupId>
  <artifactId>google-http-client-jackson</artifactId>
  <version>1.19.0</version>
  <type>jar</type>
 </dependency>
4
Gao

Ich habe die Lösung von Gao ausprobiert, aber ich habe ein Problem mit Bibliotheken. Ich verwende Netbeans, das Projekt wird ohne Fehler erstellt, aber wenn ich versuche, es auszuführen, habe ich diesen Fehler:

 Exception in thread "main" Java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory
at com.google.api.client.json.jackson.JacksonFactory.<init>(JacksonFactory.Java:38)
at SandboxCheck.main(SandboxCheck.Java:48) 

Ich habe herausgefunden, dass es ein Problem mit Classpath gibt, aber ich habe keine Ahnung, wie ich es auf Netbeans beheben kann 

google-oauth-client-1.16.0-rc.jar google-oauth-client-1.16.0-rc-sources.jar google-api-client-1.8.0-beta-sources.jar google-api-client-1.4.1-beta.jar google-api-client-1.19.1.jar

Ich bin mir nicht sicher, ob ich zu viele Bibliotheken hinzufüge, aber wenn ich z. B. entferne. google-api-client-1.4.1-beta.jar Es wird keine JacksonFactory-Klasse angezeigt.

1
Skwarosz