2

迁移到 /v1 Fusion Table API 的游戏迟到了,但不再拖延。

我在 AppEngine 上使用 Python 并尝试使用 Google 服务帐户连接到 Google Fusion Tables(OAuth2 的更复杂的表亲,用于使用 JSON Web 令牌的服务器端应用程序)

我发现了另一个问题,该问题向我指出了一些将服务帐户与 Google Prediction API 结合使用的文档。 Fusion Table 和 Google 服务帐号

到目前为止我有

import httplib2
from oauth2client.appengine import AppAssertionCredentials
from apiclient.discovery import build

credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/fusiontables')
http = credentials.authorize(httplib2.Http(memcache)) #Http(memcache)
service = build("fusiontables", "v1", http=http)

# list the tables
tables = service.table().list().execute() # <-- ERROR 401 invalid credentials here

有没有人有使用他们可以共享的服务帐户连接到 AppEngine 上的 Fusion Tables 的示例?或者网上有什么好看的?

谢谢

4

5 回答 5

3

这确实有效。重要的部分是您必须授予应用引擎服务帐户访问您的融合表的权限。如果您正在写入,则该帐户需要写入权限。如需帮助,请参阅:https ://developers.google.com/api-client-library/python/start/installation (查找入门:快速入门)

您的应用引擎服务帐户类似于 your-app-id@appspot.gserviceaccount.com

您还必须使应用引擎服务帐户成为 api 控制台中的团队成员,并赋予其“可以编辑”权限。

SCOPE='https://www.googleapis.com/auth/fusiontables'
PROJECT_NUMBER = 'XXXXXXXX' # REPLACE WITH YOUR Project ID

# Create a new API service for interacting with Fusion Tables
credentials = AppAssertionCredentials(scope=SCOPE)
http = credentials.authorize(httplib2.Http())
logging.info('QQQ: accountname: %s' % app_identity.get_service_account_name())
service = build('fusiontables', 'v1', http=http, developerKey='YOUR KEY HERE FROM API CONSOLE')

def log(value1,value2=None):
    tableid='YOUR TABLE ID FROM FUSION TABLES'
    now = strftime("%Y-%m-%d %H:%M:%S", gmtime())
    service.query().sql(sql="INSERT INTO %s (Temperature,Date) values(%s,'%s')" % (tableid,value1,now)).execute()
于 2013-02-13T17:32:00.090 回答
1

澄清 Ralph Yozzo 的回答:您需要将创建 service_account 凭据时下载的 json 文件中的“client_email”的值(ServiceAccountCredentials.from_json_keyfile_name('service_acct.json')与新的 oauth2client 库一起使用时加载的相同文件)添加到表的共享对话框屏幕(点击 1 然后在 2 中输入电子邮件地址)

单击共享,然后输入电子邮件地址

于 2016-03-11T23:49:23.877 回答
0

我找到的帮助将 Python AppEngine 连接到使用 Oauth2 的 Fusion Tables API 的最佳在线资源是 Google APIs Client Library for Python

幻灯片演示有助于理解在线示例,为什么使用装饰器。

对于了解是否使用应用程序的服务帐户或用户帐户进行身份验证也很有用: 使用 OAuth 2.0 访问 Google API

考虑安装适用于 Python 的 Google API 客户端库

除了范围之外,Oauth2 或多或少对所有 Google API 都通用,而不仅仅是融合表。

一旦 oauth2 工作,请参阅Google Fusion Tables API

于 2015-02-14T23:46:55.380 回答
0

由于 Fusion Tables 的表属于个人 Gmail 帐户,而不是与 API 控制台项目关联的服务帐户,因此 AppAssertionCredentials 可能不起作用。不过,它会提出一个有趣的功能请求:

http://code.google.com/p/fusion-tables/issues/list

于 2013-01-31T21:22:38.180 回答
0

如果您希望它在 Google App Engine 或 Google Compute Engine 之外的其他主机上工作(例如,从 localhost 进行测试),那么您应该使用从您可以从您的服务帐户页面生成和下载的 json 密钥文件创建的 ServiceAccountCredentials 。

scopes = ['https://www.googleapis.com/auth/fusiontables']
keyfile = 'PATH TO YOUR SERVICE ACCOUNT KEY FILE'
FTID = 'FUSION TABLE ID'

credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile, scopes)
http_auth = credentials.authorize(Http(memcache))
service = build('fusiontables', 'v2', http=http_auth)

def insert(title, description):
    sqlInsert = "INSERT INTO {0} (Title,Description) values('{1}','{2}')".format(FTID, title, description)
    service.query().sql(sql=sqlInsert).execute()

有关说明,请参阅Google 的服务帐户页面

于 2016-08-06T21:45:39.433 回答