web-dev-qa-db-fra.com

Créer une feuille de calcul à l'aide de l'API Google Feuille de calcul dans Google Drive en Java

J'avais créé un outil qui remplissait la feuille de calcul Google. Il fonctionnait bien depuis un an, car aujourd'hui j'ai une erreur. 

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)

C'est la partie du code pour se connecter avec gmail:

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

Je ne sais pas comment me connecter avec gmail, j'essayais de le faire via oAuth mais je ne sais pas comment faire cela. Dans les exemples sur https://developers.google.com/google-apps/spreadsheets/authorize il n’existe que du code pour .net.

17
Skwarosz

J'ai enfin réussi à aider à partir d'ici j'ai réussi à créer une telle connexion . Tout fonctionne comme avant .

  1. Inscrivez-vous à https://console.developers.google.com
  2. Créer un nouveau projet
  3. Sous API et authentifications -> Informations d'identification -> Créer un nouvel ID client pour un compte de service
  4. Lorsque l'ID client est généré, vous devez générer la clé P12.
  5. L'identifiant du client sera requis dans le code ci-dessous, Adresse email est l'adresse. Vous devez partager votre feuille de calcul.

Ci-dessous le code de travail 

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);
            }
        }

    }

}

J'espère que cela aidera avec les problèmes que j'ai rencontrés . Voici la liste des pots que j'ai utilisés:

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 vient de cesser de supporter OAuth1.0. OAuth2 doit être utilisé. Pour basculer, accédez à la console Google Developer, créez un projet et définissez les informations d'identification. Puis mettez à jour votre code similaire au code Java suivant:

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);

}

Vous aurez besoin de deux bibliothèques: google-api-client et google-http-client-jackson. Si vous utilisez Maven, incluez les dépendances suivantes dans 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

J'ai essayé la solution de Gao mais j'ai un problème avec les bibliothèques. J'utilise netbeans, le projet est construit sans erreur, mais lorsque j'essaye de l'exécuter, j'ai cette erreur:

 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) 

J'ai découvert qu'il y a un problème avec classpath mais je ne sais pas comment le résoudre sur netbeans, j'ai pensé qu'il le ferait automatiquement en ajoutant une bibliothèque 

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

Je ne sais pas si j'ajoute trop de bibliothèques mais si je supprime par exemple. google-api-client-1.4.1-beta.jar, il ne verra pas la classe JacksonFactory.

1
Skwarosz