在Python中使用Apps脚本执行API时出现404错误
问题描述:
尝试使用Apps脚本执行API时,我始终收到404错误.我确保正确链接了项目ID,并且已打开正确的API.
I keep getting a 404 error when trying to use the Apps Script Execution API. I've made sure that the project ID is correctly linked, and that the correct API is turned on.
这是我得到的回溯:
Traceback (most recent call last):
File "", line 70, in main
response = service.scripts().run(body=request, scriptId=SCRIPT_ID).execute()
File "/oauth2client/util.py", line 137, in positional_wrapper
return wrapped(*args, **kwargs)
File "apiclient/http.py", line 723, in execute
raise HttpError(resp, content, uri=self.uri)
apiclient.errors.HttpError: <HttpError 404 when requesting https://script.googleapis.com/v1/scripts/ASFDQETWRQWEFAS12341234:run?alt=json returned "Requested entity was not found.">
这是我正在使用的代码:
This is the code I'm using:
SCOPES = ['https://mail.google.com/',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/spreadsheets']
SCRIPT_ID = 'ASFDQETWRQWEFAS12341234'
CLIENT_SECRET = '/file/path'
def get_credentials():
with open(CLIENT_SECRET, 'r') as f:
content = json.load(f)
credentials = client.SignedJwtAssertionCredentials(
content['client_email'], content['private_key'].encode(), SCOPES)
if hasattr(credentials, 'access_token'):
if (hasattr(credentials, 'access_token_expired') and
credentials.access_token_expired):
http = httplib2.Http()
credentials.refresh(http)
return credentials
def main(unused_argv):
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = build('script', 'v1', http=http)
request = {
'function': 'test',
'devMode': True
}
response = service.scripts().run(body=request, scriptId=SCRIPT_ID).execute()
if 'error' in response:
raise AppsScriptError(response['error'])
try:
assert str(response['response']['result']) == 'Success!'
except:
raise AppsScriptError('Apps Script didn\'t complete successfully.')
答
您似乎必须去脚本项目 Publish>部署
作为API可执行文件,然后选择谁有权访问脚本
- 任何人
.
It looks like you have to go to the script project, Publish > Deploy
as API executable and choose Who has access to the script
- Anyone
.