【问题标题】:List of Spreadsheets Gdata OAuth2电子表格 Gdata OAuth2 列表
【发布时间】:2013-12-13 10:53:58
【问题描述】:

使用 Gdata 中的电子表格 api 获取电子表格列表,

Oauth1 方式

spreadSheetService = gdata.spreadsheet.service.SpreadsheetsService()
spreadSheetService.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.HMAC_SHA1,self.CONSUMER_KEY,self.CONSUMER_SECRET,two_legged_oauth=True, requestor_id=self.requestor_id)
spreadSheetService.GetSpreadsheetsFeed(query = q)

但是由于这个won't fix issue #594,spreadSheetService 不适用于 OAuth2

如何使用gdata.spreadsheets.client.SpreadsheetClient 查询电子表格列表?

【问题讨论】:

    标签: gdata google-oauth google-spreadsheet-api google-apps-marketplace


    【解决方案1】:

    (假设是 Python)

    我能够使用 gd_client.auth_token = gdata.gauth.OAuth2TokenFromCredentials(credentials) 获取由 OAuth2 流创建的凭据对象(使用 oauth2client)并将其与 gdata 库一起使用。

    此处的完整示例(用于命令行应用程序):

    # Do OAuth2 stuff to create credentials object
    from oauth2client.file import Storage
    from oauth2client.client import flow_from_clientsecrets
    from oauth2client.tools import run
    
    storage = Storage("creds.dat")
    credentials = storage.get()
    if credentials is None or credentials.invalid:
      credentials = run(flow_from_clientsecrets("client_secrets.json", scope=["https://spreadsheets.google.com/feeds"]), storage)
    
    # Use it within gdata
    import gdata.spreadsheets.client
    import gdata.gauth
    
    gd_client = gdata.spreadsheets.client.SpreadsheetsClient()
    gd_client.auth_token = gdata.gauth.OAuth2TokenFromCredentials(credentials)
    print gd_client.get_spreadsheets()
    

    如果您专门寻找 2-legged,则同样的技术也适用,但您需要创建不同类型的凭证对象。请参阅以下有关如何创建此内容的最新答案:Using Spreadsheet API OAuth2 with Certificate Authentication

    【讨论】:

    • 谢谢,我还发现您可以通过将实例 SpreadSheetQuery 作为命名参数 query 传递来查询特定的电子表格
    【解决方案2】:

    这是一个将 OAuth 2.0 Bearer 身份验证标头直接写入请求并允许您继续使用旧的gdata.spreadsheet.service.SpreadsheetsService 样式客户端代码的变体:

    import httplib2
    # Do OAuth2 stuff to create credentials object
    from oauth2client.file import Storage
    from oauth2client.client import flow_from_clientsecrets
    from oauth2client.tools import tools
    
    storage = Storage("creds.dat")
    credentials = storage.get()
    if credentials is None or credentials.invalid:
        flags = tools.argparser.parse_args(args=[])
        flow = flow_from_clientsecrets("client_secrets.json", scope=["https://spreadsheets.google.com/feeds"])
        credentials = tools.run_flow(flow, storage, flags)
    if credentials.access_token_expired:
        credentials.refresh(httplib2.Http())
    
    # Use it within old gdata
    import gdata.spreadsheet.service
    import gdata.service
    
    client = gdata.spreadsheet.service.SpreadsheetsService(
        additional_headers={'Authorization' : 'Bearer %s' % credentials.access_token})
    
    #public example
    entry = client.GetSpreadsheetsFeed('0AoFkkLP2MB8kdFd4bEJ5VzR2RVdBQkVuSW91WE1zZkE') 
    print entry.title
    

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 2012-05-23
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      相关资源
      最近更新 更多