【问题标题】:Read a Google Sheet with Python using API Key instead of OAuth Client ID [Python]使用 API 密钥而不是 OAuth 客户端 ID [Python] 使用 Python 读取 Google 表格
【发布时间】:2017-07-04 07:19:51
【问题描述】:

虽然有几篇有用的文章介绍了如何使用 OAuth 客户端 ID 生成读取和写入 Google 表格所需的凭据,但我一直无法理解如何在这种情况下使用替代 API 密钥(令牌)上下文。

我盲目地尝试将令牌字符串简单地传递给gspread.authorize(TOKEN),但毫不奇怪,收到了一个错误:AttributeError: 'str' object has no attribute 'access_token'

提前感谢您的任何建议

【问题讨论】:

    标签: python google-sheets-api


    【解决方案1】:

    首先,Google Sheet api可以使用Api key。
    Api key 和 OAuth 2.0 的主要区别在于 Api 密钥只能访问公共数据。

    对于 REST http 请求,您可以将查询参数 key=yourAPIKey 附加到所有请求 URL。

    对于 python,请参阅 google-api-python-client 库的参考。
    build() 函数有一个名为 developerKey 的参数。
    我写了一个从官方快速入门修改的简单示例。

    #!/usr/bin/env python
    
    from __future__ import print_function
    import httplib2
    import os
    
    from apiclient import discovery
    
    
    def main(key=None):
        discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                        'version=v4')
        service = discovery.build(
            'sheets',
            'v4',
            http=httplib2.Http(),
            discoveryServiceUrl=discoveryUrl,
            developerKey=key)
    
        spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
        rangeName = 'Class Data!A2:E'
        result = service.spreadsheets().values().get(
            spreadsheetId=spreadsheetId, range=rangeName).execute()
        values = result.get('values', [])
    
        if not values:
            print('No data found.')
        else:
            print('Name, Major:')
            for row in values:
                # Print columns A and E, which correspond to indices 0 and 4.
                print('%s, %s' % (row[0], row[4]))
    
    
    if __name__ == '__main__':
        from sys import argv
    
        if len(argv) == 2:
            main(key=argv[1])
        else:
            main()
    

    一些有用的官方链接。
    https://developers.google.com/sheets/api/guides/authorizing
    https://developers.google.com/api-client-library/python/auth/api-keys

    但是,基于官方库的最流行的第三个库并没有公开 developerKey 参数。

    【讨论】:

      【解决方案2】:

      每个method in the Sheets API 都需要使用 OAuth 进行授权。请参考Python Quickstart 开始使用。

      【讨论】:

      • 好的,我可以接受,在使用 OAuth 的情况下,我需要在我的脚本中包含一个 JSON 文件……但是!你会碰巧知道“API Key”授权选项的使用吗?如果不验证对用户的访问权限,它的用途是什么,就像 Slack 和 Dropbox API 使用的令牌一样?我通过this Git example for SlackBasic Usage > Sending A Message 部分下的这个示例开始探索API...试图绘制相似之处...?
      猜你喜欢
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 2021-05-12
      相关资源
      最近更新 更多