Google Drive api 与 python

问题描述 投票:0回答:4

我正在尝试制作一个应用程序,在其中显示我的谷歌驱动器文件夹中的文件和文件夹,因此我转到 google apis 并使用了我在下面的页面上找到的代码

因为我没想到它只是让我登录到我的驱动器,然后它返回给我一个错误,我正在为其提供照片 这是返回的错误 它这么说

消息='client_secret' 来源=D:\Study\Computer Science\G10\Paython 第二学期\python consol app\python consol app\python_consol_app.py 堆栈跟踪: 文件“D:\Study\Computer Science\G10\Paython 第二学期\python consol app\python consol app\python_consol_app.py”,第 48 行,位于 主要()

我设法跳过此错误并重命名 json 文件,解决此错误后却发现另一个错误:

Message=授权用户信息的格式不正确,缺少字段 client_secret、client_id、refresh_token。 来源=D:\Study\Computer Science\G10\Paython 第二学期\python consol app\python consol app\python_consol_app.py 堆栈跟踪: 文件“D:\Study\Computer Science\G10\Paython 第二学期\python consol app\python consol app\python_consol_app.py”,第 48 行,位于 主要()

所以我想知道我应该如何解决这样的问题 另外,如果我的应用程序可以运行到每个文件夹和子文件夹

SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']

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
    
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
   
    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)
      
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    service = build('drive', 'v3', credentials=creds)

    
    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()

python google-api google-drive-api google-oauth google-api-python-client
4个回答
4
投票

回答

首先要事。您的凭据似乎有问题。我会再次从快速入门下载credentials 文件。然后,删除工作目录中生成的

token
文件。

如果您想更深入,您可以创建一个GCP项目,然后启用Google API以及生成凭证,但如果您不想要,则不需要这种方法。

快速启动运行后,您就可以专注于您的任务。要显示云端硬盘中的文件,可以使用 Files: list 方法,该方法可返回当前用户的“我的云端硬盘”中的所有文件和文件夹。要执行特定搜索,您可以使用不同的参数,但最重要的是

query
。您可以阅读本指南以获取一些使用示例和进一步说明。

参考资料:


3
投票

确保将下载的凭据文件重命名为

credentials.json
并且启用相应的 google api(驱动器,..)


1
投票

第一: 启用API 在使用 Google API 之前,您需要在 Google Cloud 项目中启用它们。您可以在单个 Google Cloud 项目中启用一个或多个 API。 在 Google Cloud 控制台中,启用 Gmail API。 从这里开始

第二个: 授权桌面应用程序的凭据 要作为最终用户进行身份验证并访问应用程序中的用户数据,您需要创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于向 Google 的 OAuth 服务器标识单个应用程序。如果您的应用程序在多个平台上运行,则必须为每个平台创建单独的客户端 ID。 在 Google Cloud 控制台中,转到菜单菜单 > API 和服务 > 凭据。 前往凭证

单击创建凭据 > OAuth 客户端 ID。 单击应用程序类型 > 桌面应用程序。 在名称字段中,输入凭据的名称。此名称仅显示在 Google Cloud 控制台中。 单击“创建”。将出现 OAuth 客户端创建屏幕,其中显示您的新客户端 ID 和客户端密码。 单击“确定”。新创建的凭据显示在 OAuth 2.0 客户端 ID 下。

最后 下载 JSON 文件并将文件重命名为credentials.json,然后将文件移动到您的工作目录。

我的问题解决了


0
投票

我的解决方案是退出 Google,然后再次执行身份验证流程。

注销之前,我看到

The authentication flow has completed. You may close this window.
注销后,系统再次提示我授权“范围”中的 API,这解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.