Ruby中的Google PeopleApi-CreateContact方法参数无效
我正在使用“GoogleAPI客户端”gem从我的Ruby应用程序连接到GooglePeopleAPI 我已经设法让其他方法发挥作用(列出联系人、获取联系人、删除联系人和更新联系人),但我无法从google people API中获得createContact(创建联系人)方法 发送邮件后,我收到以下错误:Ruby中的Google PeopleApi-CreateContact方法参数无效,ruby,google-people,invalid-argument,google-people-api,Ruby,Google People,Invalid Argument,Google People Api,我正在使用“GoogleAPI客户端”gem从我的Ruby应用程序连接到GooglePeopleAPI 我已经设法让其他方法发挥作用(列出联系人、获取联系人、删除联系人和更新联系人),但我无法从google people API中获得createContact(创建联系人)方法 发送邮件后,我收到以下错误: 400 Caught error badRequest: Request contains an invalid argument. 这是一个仅使用姓名字段创建联系人的示例代码(我还希望在
400 Caught error badRequest: Request contains an invalid argument.
这是一个仅使用姓名字段创建联系人的示例代码(我还希望在正文中发送电子邮件和电话号码参数,但它也返回相同的错误,因此我在这里给您举一个最简单的示例):
问题就在于最后两行。呼叫时,他们会将此信息与身体一起发送:
Sending HTTP post https://people.googleapis.com/v1/people:createContact?personFields=names
不管我做了什么改变,它都会返回上面的错误。
在文档中,您实际上可以尝试和测试完全相同的代码,并且可以正常工作
您可以像我一样填写请求主体表单,然后点击EXECUTE,它将给出200 OK响应
我看不出无效的论点是什么。这也正是我在update_person_contact方法上所做的,而且这个方法很有效
我在互联网上搜索过,找不到任何有类似问题的人,文档也没有说太多:
有人有办法帮我吗?
谢谢。在几乎放弃之后,我决定尝试卷曲选项。所以我从上面链接的“Trythisapi”页面复制了它,并将其翻译成Ruby代码
curl --request POST \
'https://people.googleapis.com/v1/people:createContact?personFields=names' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"names":[{"givenName":"TEST"}]}' \
--compressed
你知道吗?成功了
因此,我认为这个gem不适用于这种特殊情况(如果你想知道的话,它是googleapi客户端v:0.42.2和0.43.0),但是如果你来这里是为了找到解决同样问题的方法,这对我来说是有效的,我希望它能帮助你:
(这将替换代码中的最后两行):
虽然不太理想,但它今天完成了任务
编辑:写了这篇文章后,我才意识到即使是“personFields”参数也没用,因为body得到了正确的字段
你可以在我的回答中看到,我只调用了URI上的“名称”字段,但在保存新联系人(姓名、电子邮件和电话号码)后,所有这3个字段都正确地存在于新联系人中。所以这也可能是无用的/可选的。在几乎放弃之后,我决定尝试CURL选项。所以我从上面链接的“Trythisapi”页面复制了它,并将其翻译成Ruby代码
curl --request POST \
'https://people.googleapis.com/v1/people:createContact?personFields=names' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"names":[{"givenName":"TEST"}]}' \
--compressed
你知道吗?成功了
因此,我认为这个gem不适用于这种特殊情况(如果你想知道的话,它是googleapi客户端v:0.42.2和0.43.0),但是如果你来这里是为了找到解决同样问题的方法,这对我来说是有效的,我希望它能帮助你:
(这将替换代码中的最后两行):
虽然不太理想,但它今天完成了任务
编辑:写了这篇文章后,我才意识到即使是“personFields”参数也没用,因为body得到了正确的字段
你可以在我的回答中看到,我只调用了URI上的“名称”字段,但在保存新联系人(姓名、电子邮件和电话号码)后,所有这3个字段都正确地存在于新联系人中。所以这也可能是无用的/可选的
require 'net/http'
require 'uri'
require 'json'
uri = URI.parse("https://people.googleapis.com/v1/people:createContact?personFields=names")
request = Net::HTTP::Post.new(uri)
request.content_type = "application/json"
request["Authorization"] = "Bearer #{people.authorization.access_token}"
request["Accept"] = "application/json"
request.body = JSON.dump({
"names" => [
{
"givenName" => "TEST"
}
],
"emailAddresses" => [
{
"value" => "testemail@test.com"
}
],
"phoneNumbers" => [
{
"value" => "12345678"
}
]
}
)
req_options = {
use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
response.code
response.body