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.
J'ai enfin réussi à aider à partir d'ici j'ai réussi à créer une telle connexion . Tout fonctionne comme avant .
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
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>
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.