我正在尝试从融合表中获取数据。我写的是,因为它写在example
中import "package:google_fusiontables_v1_api/fusiontables_v1_api_browser.dart";
import "package:google_oauth2_client/google_oauth2_browser.dart";
class CFusionTable
{
static const _tableName = '*mytablename*';
static const _clientID = "*myclientid*";
GoogleOAuth2 _gauth;
CFusionTable()
{
_gauth = new GoogleOAuth2(_clientID, [Fusiontables.FUSIONTABLES_SCOPE]);
var fusiontables = new Fusiontables(_gauth);
fusiontables.query.sql('select ID, Name, Latitude, Longitude, Country, Territory, City, Photo, ROWID from '+_tableName,
hdrs: false)
.then(_loadData);
}
void _loadData(data)
{
print (data.toString());
}
}
但是身份验证不起作用:
无法加载资源:服务器响应状态为403 (禁止)
如“> HTTPS:?//www.googleapis.com/fusiontables/v1/query HDRS =假安培; SQL =选择%20ID%2C%20Name%2C%20Latitude%2C%20Longitude%2C%20Country%2C%20Territory% 2C%20City%2C%20Photo%2C%20ROWID%20from%201bSQ16GyMgRuleMBdn1aF4Xfu0E3HRv_As 未捕获错误:APIRequestException:403每日限制 未经验证的使用超出。继续使用需要注册。 例外:APIRequestException:403未经身份验证的每日限制 使用超出。继续使用需要注册。未定义 (未定义:0:0)
请告诉我,我做错了什么?
答案 0 :(得分:3)
您需要首先进行身份验证,然后才能在Fusion表上执行方法。在下面的示例代码中,调用login
方法以在身份验证成功时调用身份验证和融合表。
import "package:google_fusiontables_v1_api/fusiontables_v1_api_browser.dart";
import "package:google_oauth2_client/google_oauth2_browser.dart";
class CFusionTable
{
static const _tableName = '*mytablename*';
static const _clientID = "*myclientid*";
GoogleOAuth2 _gauth;
CFusionTable() {
_gauth = new GoogleOAuth2(_clientID, [Fusiontables.FUSIONTABLES_SCOPE]);
}
void login() {
_gauth.login().then(_gauth_tokenLoadedHandler);
}
void _gauth_tokenLoadedHandler(Token token) {
var fusiontables = new Fusiontables(_gauth);
fusiontables.query.sql('select ID, Name, Latitude, Longitude, Country, Territory, City, Photo, ROWID from '+_tableName,hdrs: false)
.then(_loadData);
}
void _loadData(data) {
print (data.toString());
}
}
答案 1 :(得分:1)
当您看到403时要检查的另一件事是您的客户ID。许多Google API都有速率限制,对于未注册的应用,速率限制基本上为零。因此,当您看到403时,通常情况是(a)您没有注册应用程序或(b)您注册了应用程序但在您的代码中输入了错误的客户ID值或(c)您做了所有这些但注册了您的应用程序对于错误的范围......你会看到模式。