Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的Google PeopleApi-CreateContact方法参数无效_Ruby_Google People_Invalid Argument_Google People Api - Fatal编程技术网

Ruby中的Google PeopleApi-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. 这是一个仅使用姓名字段创建联系人的示例代码(我还希望在

我正在使用“GoogleAPI客户端”gem从我的Ruby应用程序连接到GooglePeopleAPI

我已经设法让其他方法发挥作用(列出联系人、获取联系人、删除联系人和更新联系人),但我无法从google people API中获得createContact(创建联系人)方法

发送邮件后,我收到以下错误:

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