使用Google Spreadsheet API在Google驱动器中使用Java创建电子表格 [英] Create Spreadsheet using Google Spreadsheet API in Google drive in Java
问题描述
我创建了一个工具来填充google电子表格。
它工作正常1年,因为今天我错了
I had created some tool which was populating the google spreadsheet. It was working fine for 1 year, since today I've error
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)
这是连接到gmail的代码的一部分:
This is the part of code to connect with gmail:
String USERNAME = "usename@........com"; ->of course I'm using proper username and password
String PASSWORD = "*******";
SpreadsheetService service
= new SpreadsheetService("SandboxCheck");
service.setUserCredentials(USERNAME, PASSWORD);
我不知道如何连接到gmail,我试图通过oAuth来做到这一点,但我不知道如何做到这一点。在 https://developers.google.com/google-apps/spreadsheets/authorize 上的示例中,有只有代码为.net。
I don't know how to connect with gmail, I was trying to do this via oAuth but I don't know how to do this. In examples on https://developers.google.com/google-apps/spreadsheets/authorize there is only code for .net.
推荐答案
我终于在帮助从这里设法创建这样的连接。
一切都像以前一样工作。
您必须做的步骤是:
I finally with help from here managed to create such connection. Everything is working as before. Steps You have to do is:
- 注册 https://console.developers.google.com
- 创建新项目
- 在API下&安培; Auth - > Credential - >为服务帐户创建新的客户ID
- 当客户ID生成时您必须生成P12密钥。将在下面的代码中需要,电子邮件地址是地址您必须共享您的电子表格
- Register at https://console.developers.google.com
- Create new project
- Under APIs & Auth -> Credential -> Create New Client ID for Service Account
- When the Client ID is generated You have to generate P12 key.
- Client id will be needed in code below, Email addres is the addres You have to share Your spreadsheet
以下是工作代码
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);
}
}
}
}
我希望这可以帮助解决我遇到的问题。
这是我用过的jar列表:
I hope this will help with issues I've faced. This is the list of jar I've used:
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 Spreadsheet API在Google驱动器中使用Java创建电子表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!