Java 使用处理语言进行数据可视化时发生身份验证错误
我正在以下URL上编写数据可视化教程: 我得到这个错误,我完全不确定是什么原因造成的 com.google.gdata.util.AuthenticationException:连接登录URI时出错身份验证中出错 这是我目前的代码: MyRandomNumbers文件Java 使用处理语言进行数据可视化时发生身份验证错误,java,processing,data-visualization,Java,Processing,Data Visualization,我正在以下URL上编写数据可视化教程: 我得到这个错误,我完全不确定是什么原因造成的 com.google.gdata.util.AuthenticationException:连接登录URI时出错身份验证中出错 这是我目前的代码: MyRandomNumbers文件 SimpleSpreadsheetManager sm; String sUrl = "t6mq_WLV5c5uj6mUNSryBIA"; String googleUser = "xxxxxxx"; String google
SimpleSpreadsheetManager sm;
String sUrl = "t6mq_WLV5c5uj6mUNSryBIA";
String googleUser = "xxxxxxx";
String googlePass = "xxxxxxx";
void setup() {
size(800,800);
background(0);
smooth();
//Ask for list of numbers
int[] numbers = getNumbers();
fill(255,40);
noStroke();
for(int i = 0; i < numbers.length; i++){
ellipse(numbers[i] * 8, width/2, 8,8);
}
};
void draw() {
};
SimpleSpreadsheetManager sm;
字符串sUrl=“t6mq_WLV5c5uj6mUNSryBIA”;
字符串googleUser=“xxxxxxx”;
字符串googlePass=“xxxxxxx”;
无效设置(){
尺寸(800800);
背景(0);
光滑的();
//询问号码表
int[]numbers=getNumbers();
填充(255,40);
仰泳();
for(int i=0;i
谷歌代码文件
//Function to get an Array of integers from a Google Spreadsheet
int[] getNumbers() {
println("Asking Google for numbers...");
sm = new SimpleSpreadsheetManager();
sm.init("RandomNumbers", googleUser, googlePass);
sm.fetchSheetByKey(sUrl, 0);
int n = sm.currentListEntries.size();
int[] returnArray = new int[n];
for (int i = 0; i < n; i++) {
returnArray[i] = int(sm.getCellValue("Number", i));
};
println("Got " + n + " numbers.");
return(returnArray);
};
//Function to generate a random list of integers
int[] getRandomNumbers(int c) {
int[] returnArray = new int[c];
for (int i = 0; i < c; i++) {
returnArray[i] = ceil(random(0,99));
};
return(returnArray);
};
//从Google电子表格中获取整数数组的函数
int[]getNumbers(){
println(“向谷歌索要数字…”);
sm=新的SimpleSpreadsheetManager();
sm.init(“随机数”,谷歌用户,谷歌通行证);
sm.fetchSheetByKey(sUrl,0);
int n=sm.currentListEntries.size();
int[]returnArray=新的int[n];
对于(int i=0;i
SimpleSpreadsheetManager
public class SimpleSpreadsheetManager {
SpreadsheetService myService;
SpreadsheetEntry spreadsheetEntry;
SpreadsheetFeed sheetFeed;
WorksheetEntry worksheetEntry;
List spreadsheets;
String user;
String pass;
ListFeed currentListFeed;
CellFeed currentCellFeed;
List currentCells;
List currentListEntries;
int currentTotalRows;
int currentTotalCols;
String currentTitle;
String[] tagArray;
URL listFeedUrl;
SimpleSpreadsheetManager() {
};
/*
INIT FUNCTION
Opens session, uses username & password for authentication
*/
void init(String sessionName, String u, String p) {
user = u;
pass = p;
myService = new SpreadsheetService(sessionName);
try {
myService.setUserCredentials(user, pass);
}
catch (Exception e) {
println(e + " ERROR IN AUTHENTICATION");
};
};
/*
FETCH SHEET BY KEY
Gets a spreadsheet listfeed using the unique key - this is in the URL of the spreadsheet
The retrieved sheet is both returned and set as the currentListFeed
*/
ListFeed fetchSheetByKey(String k, int wi) {
ListFeed f = new ListFeed();
CellFeed cf = new CellFeed();
WorksheetFeed w = new WorksheetFeed();
//GET WORKSHEETS FEED
try {
URL worksheetFeedUrl = new URL("https://spreadsheets.google.com/feeds/worksheets/" + k + "/private/full");
WorksheetFeed wf2 = new WorksheetFeed();
w = myService.getFeed(worksheetFeedUrl, wf2.getClass());
}
catch(Exception e) {
println("ERROR RETRIEVING WORKSHEET FEED");
};
List worksheets = w.getEntries();
WorksheetEntry we = (WorksheetEntry) worksheets.get(wi);
println("RETRIEVED WORKSHEET " + we.getTitle().getPlainText());
//GET LIST FEED URL
try {
listFeedUrl = we.getListFeedUrl();//new URL("http://spreadsheets.google.com/feeds/list/" + k + "/od6/private/full");
ListFeed lf2 = new ListFeed();
f = myService.getFeed(listFeedUrl, lf2.getClass());
}
catch(Exception e) {
println("ERROR RETRIEVING LIST FEED");
};
//GET CELL FEED
try {
URL cellFeedUrl = we.getCellFeedUrl();//new URL("http://spreadsheets.google.com/feeds/cells/" + k + "/od6/private/full");
CellFeed lf2 = new CellFeed();
cf = myService.getFeed(cellFeedUrl, lf2.getClass());
}
catch(Exception e) {
println("ERROR RETRIEVING LIST FEED");
};
currentListFeed = f;
currentCellFeed = cf;
currentCells = cf.getEntries();
currentListEntries = f.getEntries();
currentTitle = we.getTitle().getPlainText();
currentTotalRows = currentListEntries.size();
if (currentListEntries.size() > 0) {
ListEntry le = (ListEntry) currentListEntries.get(0);
currentTotalCols = le.getCustomElements().getTags().size();
Set<String> tags = le.getCustomElements().getTags();
tagArray = new String[tags.size()];
tagArray = tags.toArray(tagArray);
};
return(f);
};
/*
GET CELL VALUE
Returns the value held in an individual sheet cell.
*/
String getCellValue(int c, int r) {
ListEntry le = (ListEntry) currentListEntries.get(r);
Set<String> tags = le.getCustomElements().getTags();
String[] tagArray = new String[tags.size()];
tagArray = tags.toArray(tagArray);
return(le.getCustomElements().getValue(tagArray[c]));
};
String getCellValue(String tag, int r) {
ListEntry le = (ListEntry) currentListEntries.get(r);
return(le.getCustomElements().getValue(tag));
};
void setCellValue(String tag, int r, String val) {
ListEntry le = (ListEntry) currentListEntries.get(r);
le.getCustomElements().setValueLocal(tag, val);
try {
ListEntry updatedRow = le.update();
}
catch (Exception e){
};
};
void setNewCellValue(String tag, int r, String val) {
ListEntry le = new ListEntry();
try {
le.getCustomElements().setValueLocal(tag, val);
ListEntry insertedRow = myService.insert(listFeedUrl, le);
ListEntry updatedRow = insertedRow.update();
}
catch (Exception e){
};
};
};
公共类SimpleSpreadsheetManager{
电子表格服务;
电子表格输入电子表格输入;
电子表格;
工作表工作表;
列出电子表格;
字符串用户;
串通;
ListFeed当前ListFeed;
CellFeed当前CellFeed;
列出当前单元格;
列出当前列表条目;
int currentTotalRows;
int currentTotalCols;
字符串标题;
字符串[]标记数组;
URL listFeedUrl;
SimpleSpreadsheetManager(){
};
/*
初始化函数
打开会话,使用用户名和密码进行身份验证
*/
void init(字符串sessionName、字符串u、字符串p){
用户=u;
通过=p;
myService=新的电子表格服务(sessionName);
试一试{
setUserCredentials(用户,通过);
}
捕获(例外e){
println(e+“身份验证错误”);
};
};
/*
用钥匙取纸
使用唯一键获取电子表格listfeed-该键位于电子表格的URL中
检索到的工作表将被返回并设置为currentListFeed
*/
ListFeed fetchSheetByKey(字符串k,整数wi){
ListFeed f=新ListFeed();
CellFeed cf=新的CellFeed();
工作表进纸w=新工作表进纸();
//获取工作表提要
试一试{
URL工作表FeedUrl=新URL(“https://spreadsheets.google.com/feeds/worksheets/“+k+”/private/full”);
工作表进纸wf2=新工作表进纸();
w=myService.getFeed(工作表feedurl,wf2.getClass());
}
捕获(例外e){
println(“检索工作表提要时出错”);
};
列出工作表=w.getEntries();
WorksheetEntry we=(WorksheetEntry)worksheets.get(wi);
println(“检索到的工作表”+we.getTitle().getPlainText());
//获取列表源URL
试一试{
listFeedUrl=we.getListFeedUrl();//新URL(“http://spreadsheets.google.com/feeds/list/“+k+”/od6/private/full”);
ListFeed lf2=新ListFeed();
f=myService.getFeed(listFeedUrl,lf2.getClass());
}
捕获(例外e){
println(“检索列表提要时出错”);
};
//获取细胞饲料
试一试{
URL cellFeedUrl=we.getCellFeedUrl();//新URL(“http://spreadsheets.google.com/feeds/cells/“+k+”/od6/private/full”);
CellFeed lf2=新的CellFeed();
cf=myService.getFeed(cellFeedUrl,lf2.getClass());
}
捕获(例外e){
println(“检索列表提要时出错”);
};
currentListFeed=f;
currentCellFeed=cf;
currentCells=cf.getEntries();
currentListEntries=f.getEntries();
currentTitle=we.getTitle().getPlainText();
currentTotalRows=currentListEntries.size();
如果(currentListEntries.size()>0){
ListEntry le=(ListEntry)currentListEntries.get(0);
currentTotalCols=le.getCustomElements().getTags().size();
Set tags=le.getCustomElements().getTags();
tagArray=新字符串[tags.size()];
tagArray=tags.toArray(tagArray);
};
返回(f);
};
/*
获取单元格值
返回保存在单个图纸单元格中的值。
*/
字符串getCellValue(int c,int r){
ListEntry le=(ListEntry)currentListEntries.get(r);
Set tags=le.getCustomElements().getTags();
String[]tagArray=新字符串[tags.size()];
tagArray=tags.toArray(tagArray);
返回(le.getCustomElements().getValue(tagArray[c]);
};
字符串getCellValue(字符串标记,int r){
ListEntry le=(ListEntry)currentListEntries.get(r);
返回(le.getCustomElements().getValue(标记));
};
void setCellValue(字符串标记、int r、字符串val){
ListEntry le=(ListEntry)currentListEntries.get(r);
le.getCustomElements().setValueLocal(标记,val);
试一试{
ListEntry updatedRow=le.update();
}
捕获(例外e){
};
};
void setNewCellValue(字符串标记、int r、字符串val){
ListEntry le=新的ListEntry();
试一试{
le.getCustomElements().setValueLocal(标记,val);
ListEntry insertedRow=myService.insert(listFeedUrl,le);
ListEntry updatedRow=insertedRow.update();
}
捕获(例外e){
};
};
};
有什么想法吗?因为错误消息说你的应用程序无法登录谷歌服务。您需要有一个Google帐户,并在googleUser和googlePass中提供凭据 我刚从blprnt下载了这个示例,输入了我的Google凭据