0
votes

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:

enter image description here

The next screen is this: enter image description here

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?

1
For example, when creds = flow.run_local_server(port=0) is modified to creds = 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.Tanaike
@Tanaike thanks so much! Removing the port resolved the issue (I don't know why)etayluz
Thank you for replying. When port=0 is removed, it uses the port 8080 as the default. I thought that the port 0 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

1 Answers

0
votes

Not sure why - but port 0 is the issue.

Changing:

creds = flow.run_local_server(port=0)

To: reds = flow.run_local_server()

resolved the issue