调用Gmail API时如何使用fields参数

Emp*_*yee 2 api google-api gmail-api

我在Google Apps脚本中使用Gmail API(基本上是Javascript),我需要尽可能少地调用API,以提高效率和速度.

我正在使用Users.messages:list列出用户邮箱中的消息,响应中包含一个名为的数组messages,对于每条消息,它包含一个id和一个threadId,如下所示:

 "messages": [
  {
   "id": "152b93b1111c33e2",
   "threadId": "152b922266c33e2"
  },
  {
   "id": "152b93338c98cb3",
   "threadId": "152b922266c33e2"
  } ...
Run Code Online (Sandbox Code Playgroud)

但我需要响应以包含有关每条消息的更多信息,这样我就不必单独创建Users.messages:获取每条消息的调用.

Users.messages:list页面上的API Explorer 表示您可以使用fields参数" 指定要包含在部分响应中的字段 ".

当我单击" 使用字段编辑器 "选择我需要的三个项目时,它会将以下内容填入该字段:

messages(id,internalDate,payload)
Run Code Online (Sandbox Code Playgroud)

然后当我执行命令时,它显示GET命令应该如下所示:

https://www.googleapis.com/gmail/v1/users/test@test.com/messages?fields=messages(id%2CinternalDate%2Cpayload)&key={YOUR_API_KEY}
Run Code Online (Sandbox Code Playgroud)

但是,messages结果中的数组不包括internalDatepayload字段.它只包含消息id,如下所示:

 "messages": [
  {
   "id": "152b93b1111c33e2"
  },
  {
   "id": "152b93338c98cb3"
  } ...
Run Code Online (Sandbox Code Playgroud)

它也不包括threadId了,但它继续包含threadId如果我选择它作为其中一个字段,如下所示:

messages(id,threadId)
Run Code Online (Sandbox Code Playgroud)

并且URL看起来像这样......

https://www.googleapis.com/gmail/v1/users/test@test.com/messages?fields=messages(id%2CthreadId)&key={YOUR_API_KEY}
Run Code Online (Sandbox Code Playgroud)

结果看起来与上面的第一个结果完全一样,我们没有使用fields参数.

所以我知道的fields参数真的在做事情.

考虑到这可能只是API Explorer的限制,我尝试在Google Apps脚本中进行API调用,但它仍然不包括我需要的字段.

Tho*_*lle 5

你快到了.

当上市的消息时,idthreadId每个消息的是你所得到的.然后,您必须单独获取每条消息.

如果您只是想要internalDate消息,那么应该在fields参数中指定它.

请求

GET https://www.googleapis.com/gmail/v1/users/me/messages/152b792a91c9c391?fields=internalDate&key={YOUR_API_KEY}
Run Code Online (Sandbox Code Playgroud)

响应

{
 "internalDate": "1454778787000"
}
Run Code Online (Sandbox Code Playgroud)