How do I authorize a gdata client without using the gdata oauth2 workflow?

后端 未结 3 763
抹茶落季
抹茶落季 2021-01-03 09:26

I already have an access_token and refresh_token, but I can\'t figure out a way to create an authorized gdata client without going through the entire token generation workfl

相关标签:
3条回答
  • 2021-01-03 09:48

    So I got this working finally. Here's how I did it:

        client = gdata.contacts.client.ContactsClient()
        credentials = gdata.gauth.OAuth2Token(client_id = 'client_id',
                                              client_secret = 'client_secret',
                                              scope = 'https://www.google.com/m8/feeds/',
                                              user_agent = auth.user_agent, # This is from the headers sent to google when getting your access token (they don't return it)
                                              access_token = auth.access_token,
                                              refresh_token = auth.refresh_token)
    
        credentials.authorize(client)
        contacts = client.get_contacts()
    
    0 讨论(0)
  • 2021-01-03 09:54

    Gdata allows you to authenticate using user info, ex. username/password... here is a code snipet from the gdata python api /gdata-2.0.18/samples/docs/docs_example.py file that comes with the api

    class DocsSample(object): """A DocsSample object demonstrates the Document List feed."""

    def init(self, email, password): """Constructor for the DocsSample object.

    Takes an email and password corresponding to a gmail account to
    demonstrate the functionality of the Document List feed.
    
    Args:
      email: [string] The e-mail address of the account to use for the sample.
      password: [string] The password corresponding to the account specified by
          the email parameter.
    
    Returns:
      A DocsSample object used to run the sample demonstrating the
      functionality of the Document List feed.
    """
    source = 'Document List Python Sample'
    self.gd_client = gdata.docs.service.DocsService()
    self.gd_client.ClientLogin(email, password, source=source)
    
    # Setup a spreadsheets service for downloading spreadsheets
    self.gs_client = gdata.spreadsheet.service.SpreadsheetsService()
    self.gs_client.ClientLogin(email, password, source=source)
    

    if you invoke this as {python ./docs_example.py --user username --pw password} it will skip asking you for it, but it will ask you for it if you don't. However this is being depreciated but still works in most situations outside networks that directly work with Google as this often times will now require oauth2. This being said, it does have security drawbacks, specifically scope, and poor password protection, which is why it is being deprecated...but that should answer your question a little better...

    0 讨论(0)
  • 2021-01-03 10:02

    Try this:

    import httplib2
    from oauth2client.client import OAuth2Credentials
    
    credentials = OAuth2Credentials('access_token', client_id, client_secret, 'refresh_token', 'token_expiry','token_uri','user_agent')
    # the client_id and client_secret are the ones that you receive which registering the App 
    # and the token_uri is the Redirect url you register with Google for handling the oauth redirection
    # the token_expiry and the user_agent is the one that you receive when exchange the code for access_token
    http = httplib2.Http()
    http = credentials.authorize(http)
    service = build('analytics', 'v3', http=http) # this will give you the service object which you can use for firing API calls
    
    0 讨论(0)
提交回复
热议问题