2014-12-13 131 views
1

我已经成功地插入了此程序的一个片刻之前,并试图找出API是否当前损坏或我犯了一个错误。google + api moments.insert 401未经授权使用python请求

我已获得与request_visible_actions一个有效的access_token = http://schema.org/AddAction如从AUTH阶段下方的部分URL看出以及plus.login范围:

https://accounts.google.com/o/oauth2/auth?access_type=offline&request_visible_actions=http%3A%2F%2Fschema.org%2FAddAction& 

请求代码:

import requests 
import json 
moment = {"type":"http://schema.org/AddAction", 
      "object": {"id": "object-id-1", 
        "type":"http://schema.org/AddAction", 
        "name": "The Google+ Platform", 
        "description": "A page that describes just how awesome Google+ is!", 
        "image": "https://developers.google.com/+/plugins/snippet/examples/thing.png"}} 

url ='https://www.googleapis.com/plus/v1/people/me/moments/vault' 
params = {'access_token': 'MY_VALID_ACCESS_TOKEN'} 
r = requests.request("POST",url=url, params=params, json=moment, headers=headers) 
print r.url 
print r.json() 

和结果:

https://www.googleapis.com/plus/v1/people/me/moments/vault?access_token=MY_ACCESS_TOKEN 
{u'error': {u'code': 401, 
      u'message': 
      u'Unauthorized', 
      u'errors': [{u'domain': u'global', u'message': u'Unauthorized', u'reason': u'unauthorized'}]}} 

我试图验证智慧h request_visible_actions存在的tokeninfo端点,但没有在那里列出。

证实授予范围:

'https://www.googleapis.com/auth/userinfo.profile', 
'https://www.googleapis.com/auth/userinfo.email', 
'https://www.googleapis.com/auth/plus.login', 
'https://www.googleapis.com/auth/plus.profile.emails.read', 
'https://www.googleapis.com/auth/plus.moments.write', 
'https://www.googleapis.com/auth/plus.me', 
'https://www.googleapis.com/auth/plus.profile.agerange.read', 
'https://www.googleapis.com/auth/plus.profile.language.read', 
'https://www.googleapis.com/auth/plus.circles.members.read' 

我能够得到的时刻/金库用同样的道理,所以我知道它是有效的。

这里的任何想法?

+0

提示:请求2.4.2和最多支持'json'关键字参数;在这种情况下,您可以*忽略* headers和'json.dumps()'调用; 'r = requests.post(url,json = moment)' – 2014-12-13 08:46:40

+0

不错的提示,我会试试看。 – arctelix 2014-12-13 08:46:48

+0

让我们暂时假定'MY_VALID_ACCESS_TOKEN'不是URL安全的。你可以尝试'params = {'access_token':MY_VALID_ACCESS_TOKEN}'而不是手动将其添加到URL?当然,也可以在URL末尾去掉'?'。 – 2014-12-13 08:48:46

回答

0

只要在用户首次连接到您的应用程序并包含您要发布的应用程序活动类型时包含request_visible_actions=space separated list of app activity types,问题中显示的过程实际上就会起作用。如果您想要在初次验证后更新列表或添加moment.insert权限,用户必须先将应用从其Google + settings断开并重新连接。

看来这是谷歌执行request_visible_actions和增量授权策略时的一个错误。

request_visible_actions似乎只在初始授权期间被接受,并在此之后被忽略。这使得不可能逐步增加这个参数。

此外,request_visible_actions在调用tokeninfo端点时不可用,这使我相信request_visible_actions以某种方式与token auth分离,而仅仅是在实例化时分配给用户应用程序连接的属性。

Posted to exising moments.instert 401 issue

相关问题