I have followed the quickstart here: https://developers.google.com/drive/api/v3/quickstart/python
When I try to allow the permissions of the Quickstart.py:
This is the terminal:
>p quickstart.py
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=1052536686966-onbi01ek6bt6bvri65t90u5efc5mpeau.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A0%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=9cVw6tzHTNp0H0n6p2KnN0FR2RL68I&access_type=offline
This is the quickstart.py downloaded from the tutorial:
from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/drive']
def main():
"""Shows basic usage of the Drive v3 API.
Prints the names and ids of the first 10 files the user has access to.
"""
creds = None
# The file token.pickle stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('drive', 'v3', credentials=creds)
# Call the Drive v3 API
results = service.files().list(
pageSize=10, fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])
if not items:
print('No files found.')
else:
print('Files:')
for item in items:
print(u'{0} ({1})'.format(item['name'], item['id']))
if __name__ == '__main__':
main()
What is this ERR_ADDRESS_INVALID error and why is it happening?
creds = flow.run_local_server(port=0)
is modified tocreds = flow.run_local_server()
, what result will you get? If an error of redirect mismatch occurs, please change the redirect uri at GCP. If this was not the direct solution, from your error message, it is found that the authorization code is retrieved. From this, how about using the manual flow without using the HTTP server? For this, you can test using this sample script. stackoverflow.com/a/60667443 If this was not the direction you expect, I apologize. – Tanaikeport=0
is removed, it uses the port8080
as the default. I thought that the port0
might be the reason of your issue. But because this was my guess, I proposed this as a comment. I'm glad your issue was resolved. When your issue was resolved, can you post it as an answer and accept it? I think that your issue and solution will be also useful for other users. – Tanaike