在Ruby中构建Gmail API请求时出错

时间:2014-08-26 18:07:25

标签: google-api gmail-api google-api-ruby-client

我很难通过他们的API在Gmail中发送草稿,而且文档也没有多大帮助,特别是因为我使用的是Ruby。

我可以创建一个没有任何问题的草稿,但是当我尝试发送新创建的草稿时,我收到一条错误消息:

ArgumentError (wrong number of arguments (0 for 1))

涉及的代码如下:

@gmail = client.discovered_api('gmail', 'v1')
@send_result = client.execute(
  :api_method => @gmail.users.drafts.send,
  :parameters => { 'userId' => 'me' }, 
  :body_object => { 'id' => '<message_id>' } 
)

看一下调试器,似乎出现了错误:

@gmail.users.drafts.send

我在这里缺少什么?我还没有看到任何应该将参数传递给api_method的地方?另外,我在哪里可以找到记录的位置以及参数应该是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

这个问题已经很久了,但我遇到了同样的问题,并认为最好回答迟到而不是。

@gmail.users.drafts.send正在与Ruby的Object#send发生冲突。您可以通过将Google::APIClient::Resource项转换为哈希,然后按键读取值来解决冲突:

:api_method => @gmail.users.drafts.to_h["gmail.users.drafts.send"]

您的示例,包括解决方法:

@gmail = client.discovered_api('gmail', 'v1')
@send_result = client.execute(
  :api_method => @gmail.users.drafts.to_h["gmail.users.drafts.send"],
  :parameters => { 'userId' => 'me' }, 
  :body_object => { 'id' => '<message_id>' } 
)

我希望有所帮助!

答案 1 :(得分:0)

我刚刚离开: https://developers.google.com/gmail/api/v1/reference/users/drafts/send

但我认为你做得对。 userId应该是一个参数(例如在URL中),草稿ID应该在(POST)主体中。你能否确认你实际上提供的是草案 ID而不是message.id?

您是否能够获得实际请求的HTTP跟踪,这将极大地帮助您(您可能能够在客户端或客户端使用的基础http库上设置此项等)。