Having trouble trying to use gdata and oauth2 in python

做~自己de王妃 提交于 2019-12-20 05:23:20

问题


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


回答1:


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



来源:https://stackoverflow.com/questions/30519537/having-trouble-trying-to-use-gdata-and-oauth2-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!