【问题标题】:Google Sheets API Post 404 errorGoogle Sheets API 发布 404 错误
【发布时间】:2016-12-17 23:29:57
【问题描述】:

我正在尝试将数据发布到谷歌电子表格,但出现 404 错误,验证了我的工作表 ID,一切看起来都很好,但仍然出现 404 错误,下面是我的代码

NSString *baseUrl = @"https://sheets.googleapis.com/v4/spreadsheets/";
NSString *spreadsheetId = @"MYKEY/edit";
NSString *range = @"Sheet1!A2:E";

baseUrl= [baseUrl stringByAppendingString:spreadsheetId];
baseUrl = [baseUrl stringByAppendingString:@"/values/"];
baseUrl = [baseUrl stringByAppendingString:range];


NSMutableDictionary * params=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"RAW",@"valueInputOption", nil];

NSURL *postURL=[GTLUtilities URLWithString:baseUrl queryParameters:params];

NSLog(@"base url is %@", postURL);


GTLObject * body=[[GTLObject alloc]init];


NSMutableArray * contentArray=[[NSMutableArray alloc]init];
NSMutableArray * titleArray=[[NSMutableArray alloc]initWithObjects:@"Student Name",@"Gender",@"Class Level",@"Home State",@"Major",@"Extracurricular Activity",nil];
NSMutableArray * wheelArray=[[NSMutableArray alloc]initWithObjects:@"TEST",@"TEST",@"50.00",@"100.00",@"2",@"2", nil];

[contentArray addObjectsFromArray:titleArray];
[contentArray addObjectsFromArray:wheelArray];

NSLog(@"content array is %@", contentArray);


NSMutableDictionary * bodyDict=[[NSMutableDictionary alloc]initWithObjectsAndKeys:range,@"range",@"ROWS",@"majorDimension",@"HELLO",@"values", nil];
NSLog(@"body dict %@",bodyDict);


body.JSON=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"range",range,@"majorDimension",@"ROWS",@"values",@"HELLO", nil];


[self.service fetchObjectByUpdatingObject:body forURL:[NSURL URLWithString:baseUrl] completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error) {

    if (error==nil) {

        NSLog(@"posted content successfully");
    }
}];

【问题讨论】:

  • 您的令牌似乎已被吊销。尝试重新授权您的帐户:)
  • 我刚刚重置了我的模拟器并再次完成了授权,同样的问题存在。
  • 你能发布错误的细节吗?
  • 404. 这是一个错误。

    请求的 URL /v4/spreadsheets/1tJd4toWFxmHAEOeONauRPcuH_rWJOESLQT7TvCIK0x0/edit/values在此服务器上找不到 /Sheet1!A2:E这就是我们所知道的。

  • 删除 edit 并重试:)

标签: ios google-api google-api-client google-sheets-api


【解决方案1】:

删除/edit你的spreadsheetId

在您的范围

中的E列之后添加一个数字

【讨论】:

  • 我刚刚这样做了,但仍然面临同样的问题

    404。 这是一个错误。

    请求的 URL 在此服务器上未找到 /v4/spreadsheets/1tJd4toWFxmHAEOeONauRPcuH_rWJOESLQT7TvCIK0x0/values/Sheet1!A2:E这就是我们所知道的。 }

  • 现在收到 403 错误 Error Domain=com.google.GTLJSONRPCErrorDomain Code=403 "(Request has enough authentication scopes.)" UserInfo={error=Request has enough authentication scopes., NSLocalizedFailureReason=(Request身份验证范围不足。),GTLStructuredError=GTLErrorObject 0x7fdf43e417d0:{code:403 消息:“请求的身份验证范围不足。”错误?:[1] 状态?:“PERMISSION_DENIED”}}
  • 在您的范围中的E列之后添加一个数字
  • 确保您的范围https://www.googleapis.com/auth/spreadsheets(去掉空格)
【解决方案2】:

根据您的后续 cmets,在解决其他人指出的问题后,您现在因范围不足而失败。为了告诉服务器用户授予了您的应用权限,您需要代表用户请求 OAuth 授权。 iOS QuickStart 解释了如何通过创建身份验证控制器来做到这一点:

// Creates the auth controller for authorizing access to Google Sheets API. - (GTMOAuth2ViewControllerTouch *)createAuthController { GTMOAuth2ViewControllerTouch *authController; // If modifying these scopes, delete your previously saved credentials by // resetting the iOS simulator or uninstall the app. NSArray *scopes = [NSArray arrayWithObjects:@"https://www.googleapis.com/auth/spreadsheets", nil]; authController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:[scopes componentsJoinedByString:@" "] clientID:kClientID clientSecret:nil keychainItemName:kKeychainItemName delegate:self finishedSelector:@selector(viewController:finishedWithAuth:error:)]; return authController; }

(快速入门使用spreadsheets.readonly范围,但我在上面将其更改为spreadsheets,因为它看起来像您要修改数据。)

您需要确保 createAuthController 方法被正确调用(并且仅在必要时),并且在它完成授权时事情也正常进行。快速入门指南对此进行了详细说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多