我的问题与moment.insert from python code非常相似,但Fausto已经设法比我更进一步,所以我现在无法应用这个答案。
我的代码看起来像这样,我的问题是“我如何发布到我的g +个人资料”
user = 'awarner@######.com'
key = open(keyFile, 'r').read()
credentials = SignedJwtAssertionCredentials(
'#########@developer.gserviceaccount.com',
key,
scope='https://www.googleapis.com/auth/plus.login',
sub=user)
http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='plus', version='v1', http=http)
# Not really required here but these calls demonstrate that we are authenticated
searchResults = service.people().search(query='AlistairWarner').execute()
listMoments = service.moments().list(userId='me', collection='vault').execute()
moment = { "type" : "http://schemas.google.com/AddActivity",
"target" : {
"id" : "target-id-1",
"type" : "http://schemas.google.com/AddActivity",
"name" : "The Google+ Platform",
"description" : "A page that describes just how awesome Google+ is!",
"image" : "https://developers.google.com/+/plugins/snippet/examples/thing.png"
}
}
# This call fails with a "401 Unauthorized" error
insertResults = service.moments().insert(userId='me', collection='vault', body=moment).execute()
为了记录,我已经确认我已经正确地将域范围的权限委托给我的服务帐户以获取必要的范围 - 尽管我不认为这实际上是授权问题本身因为列表调用正在运行。我还确认我的“应用程序”出现在我在诊所提到的应用程序下的应用程序中的g +个人资料中,以回应Fausto的问题(如上所述)。
查看API reference page它确实警告您将收到我所看到的401错误。它和StackOverflow上的其他帖子(我给ref但不允许),说你需要添加data-requestvisibleactions(再次,不能给ref)属性但是我很难看到相关性他们描述的登录按钮将它附加到我的代码中 - 它没有UI,我只是从命令行运行它。因此,requestvisibleactions似乎确实是最好的候选者,我只是不知道如何将其转化为我可以在这里使用的东西。
有没有人知道如何让这个工作?
答案 0 :(得分:0)
您需要将其添加为OAuth请求凭据的一部分。所以它可能看起来像
credentials = SignedJwtAssertionCredentials(
'#########@developer.gserviceaccount.com',
key,
scope='https://www.googleapis.com/auth/plus.login',
requestvisibleactions='http://schemas.google.com/AddActivity',
sub=user)