Search code examples
pythoneclipseoauth-2.0gdata

Having trouble trying to use gdata and oauth2 in python


Good evening, i've been trying to migrate my blogger python app to oauth2 since the good old Clientlogin() has been deprecated and erased. So, basically i searched through the entire web and couldn't manage to make my application to work correctly.

This is the basic code im using for testing:

FLOW =         flow_from_clientsecrets('/home/b/client_secret.json',scope='https://www.googleapis.com/auth/blogger',message="Client Secrets Not Found")

storage = Storage('blogger.dat')
credentials = storage.get()
parser = argparse.ArgumentParser(parents=[tools.argparser])
flags = parser.parse_args()
if credentials is None or credentials.invalid:
    credentials = run_flow(FLOW, storage, flags)
if credentials.access_token_expired:
    credentials.refresh(httplib2.Http())

SCOPE = 'https://www.blogger.com/feeds'

token = gdata.gauth.OAuth2TokenFromCredentials(credentials)

client = gdata.blogger.client.BloggerClient()

token.authorize(client)

post = client.add_post(blog_id, title="blah", body="blah",     labels="label", draft=False, title_type="xhtml", body_type="html")

I get a 401 error code, unauthorized everytime i try to do this.

Traceback (most recent call last):
  File "/home/b/.eclipse/org.eclipse.platform_4.4.2_1473617060_linux_gtk_x86_64/plugins/org.python.pydev_4.0.0.201504132356/pysrc/pydevd.py", line 2278, in <module>
    globals = debugger.run(setup['file'], None, None)
  File "/home/b/.eclipse/org.eclipse.platform_4.4.2_1473617060_linux_gtk_x86_64/plugins/org.python.pydev_4.0.0.201504132356/pysrc/pydevd.py", line 1704, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/home/b/workspace/BloggerPy/simpleblogger.py", line 53, in <module>
    post = client.add_post(blog_id, title="hola", body="holaaa", labels="label", draft=False, title_type="xhtml", body_type="html", token=token)
  File "/usr/local/lib/python2.7/dist-packages/gdata/blogger/client.py", line 111, in add_post
    return self.post(new_entry, BLOG_POST_URL % blog_id, auth_token=auth_token, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/gdata/client.py", line 690, in post
    desired_class=desired_class, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/gdata/client.py", line 298, in request
    **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/gdata/client.py", line 307, in request
    response, Unauthorized)
gdata.client.Unauthorized: Unauthorized - Server responded with: 401, User does not have permission to create new post

Can someone help me out with this? I'd really appreciate it :)

Greetings


Solution

  • Finally i've fixed my issue with gdata.gauth: I used auth2token = gdata.gauth.OAuth2Token(client_id,client_secret,scope,user_agent)

    After getting the authorization token i generate an authorized url to get an access code with auth2token.generate_authorize_url(redirect_uri=URL,approval_prompt="force").

    once you get this url, you manually get the code and generate a refresh token, with which you generate an access token: token = auth2token.get_access_token(code). Easy enough. For any other information as to how to save the token to a blob string in a file here's the reference: gdata-python-api + Analytics with simple auth