无需授权即可收集Google表格信息

时间:2016-07-13 05:52:19

标签: java authentication google-api google-sheets

如何从公开的Google表单文档中正确地从Google表格中收集信息,而无需用户对任何内容进行身份验证?

到目前为止,我发现以下代码看起来应该已经完成​​了这个技巧但是我遇到了

" com.google.gdata.util.AuthenticationException:错误身份验证(检查服务名称)"

以下代码生成它,用户登录名和密码正确

package streamupdater.util;

import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.spreadsheet.ListEntry;
import com.google.gdata.data.spreadsheet.ListFeed;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.util.ServiceException;

import java.io.IOException;
import java.net.URL;


public class readData {

public static final String GOOGLE_ACCOUNT_USERNAME = "abc"; 
public static final String GOOGLE_ACCOUNT_PASSWORD = "xxx"; 

public static final String SPREADSHEET_URL = "https://docs.google.com/spreadsheets/d/1fS0d19BOExTPdWqIYTvD9IskGIYEskqPY0WL9i7FByk/edit#gid=0";



public String getData(){
    String status="";

try{
/** Our view of Google Spreadsheets as an authenticated Google user. */
    SpreadsheetService service = new SpreadsheetService("Print Google Spreadsheet Demo");

    // Login and prompt the user to pick a sheet to use.
    service.setUserCredentials(GOOGLE_ACCOUNT_USERNAME,
            GOOGLE_ACCOUNT_PASSWORD);

    // Load sheet
    URL metafeedUrl = new URL(SPREADSHEET_URL);
    SpreadsheetEntry spreadsheet = service.getEntry(metafeedUrl,SpreadsheetEntry.class);
    URL listFeedUrl = spreadsheet.getWorksheets().get(0).getListFeedUrl();

    // Print entries
    ListFeed feed = service.getFeed(listFeedUrl, ListFeed.class);

    for (ListEntry entry : feed.getEntries()) {
        System.out.println("new row");
        for (String tag : entry.getCustomElements().getTags()) {
            System.out.println("     " + tag + ": "
                    + entry.getCustomElements().getValue(tag));
            status=entry.getCustomElements().getValue(tag);

        }
    }

}catch(Exception e){
    System.out.println(e);
}
System.out.println(status);
return(status);
}

public static void main(String[] args) {

    readData rd = new readData();
    rd.getData();

}

}

1 个答案:

答案 0 :(得分:1)

使用登录名和密码访问私人Google数据称为客户端登录。 Google于2015年5月关闭客户端登录服务器。您的代码无法使用。您需要使用开放式身份验证。

建议:

  1. Switch to Google Sheets v4
  2. 尝试使用API​​密钥进行身份验证。它应该允许您访问公开的Google表格。另一个风险较小的事情是使用服务帐户访问私人Google表格。