我正在尝试创建一个能够读取Google表格中数据的Android应用。该应用程序用户在工作表上没有任何权利。
我使用Python服务器及其服务帐户来生成签名的URL,该URL将发送回Android应用。这是生成代码:
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
SHEETS_API_URL = 'https://sheets.googleapis.com/v4/spreadsheets'
#other definitions like PROJECT_ID, SPREADSHEET_ID, CREDS_PATH...
SA_CREDS = ServiceAccountCredentials.from_json_keyfile_name(SA_CREDS_PATH)
SA_CREDS = SA_CREDS.create_scoped(SCOPES)
if not SA_CREDS or SA_CREDS.invalid:
flow = client.flow_from_clientsecrets(CREDS_PATH, SCOPES)
SA_CREDS = tools.run_flow(flow, store)
SA_CLIENT_ID = SA_CREDS.service_account_email
SHEET_SERVICE = build('sheets', 'v4', http=SA_CREDS.authorize(Http()))
def buildSignedURL():
expiration_dt = int(time.time()) + 600
expirationDate = str(expiration_dt)
toSign = '\n'.join([
'GET', #HTTP_Verb
'', #MD5 digest value
'text/plain', #Content-Type
expirationDate, #Expiration Date (Unix Epoch)
#Extension headers
'x-goog-project-id:' + PROJECT_ID,
'', #Path to resource
])
signed = SA_CREDS.sign_blob(toSign)[1]
encoded = base64.b64encode(signed)
signature = encoded.decode('utf-8')
signature = signature.replace('+', '%2B')
signature = signature.replace('/', '%2F')
URL = SHEETS_API_URL + '/' + SPREADSHEET_ID
URL += '?GoogleAccessId=' + SA_CLIENT_ID
URL += '&Expires=' + expirationDate
URL += '&Signature=' + signature
return URL
该URL被发送回Android应用,并使用它来访问工作表。我的问题:我不知道如何。我尝试查找文档,但只能找到如何生成它们以及它们的用途,而找不到如何使用它们。
向该URL发送GET
请求时,它会与403 Forbidden
一起生成The request is missing a valid API key.
如果我了解API密钥正确执行的操作,那么我就不想使用它们,因为最终,python服务器将允许用户访问他们自己的工作表。