我在Google Apps Script(基本上是Javascript(中使用Gmail API,我需要尽可能少地调用API,以提高效率和速度。
我正在使用 Users.messages: list 列出用户邮箱中的邮件,响应包括一个名为 messages
的数组,并且每封邮件都包含一个id
和一个threadId
,如下所示:
"messages": [
{
"id": "152b93b1111c33e2",
"threadId": "152b922266c33e2"
},
{
"id": "152b93338c98cb3",
"threadId": "152b922266c33e2"
} ...
但是我需要响应包含有关每条消息的更多信息,这样我就不必为每条消息进行单独的 Users.messages:get 调用。
Users.messages: 列表页面上的 API 资源管理器显示,您可以使用 fields 参数来">指定要包含在部分响应中的字段"。
当我单击">使用字段编辑器"以选择我需要的三个项目时,它会在字段中填写以下内容:
messages(id,internalDate,payload)
然后当我执行命令时,它显示 GET 命令应如下所示:
https://www.googleapis.com/gmail/v1/users/test@test.com/messages?fields=messages(id%2CinternalDate%2Cpayload)&key={YOUR_API_KEY}
但是,结果中的messages
数组不包括internalDate
或payload
字段。它仅包含消息id
,如下所示:
"messages": [
{
"id": "152b93b1111c33e2"
},
{
"id": "152b93338c98cb3"
} ...
它也不再包含threadId
,但是如果我选择它作为字段之一,它确实会继续包含threadId
,如下所示:
messages(id,threadId)
网址看起来像这样...
https://www.googleapis.com/gmail/v1/users/test@test.com/messages?fields=messages(id%2CthreadId)&key={YOUR_API_KEY}
结果看起来与上面的第一个结果完全相同,我们没有使用 fields 参数。
所以我知道fields
参数实际上是在做某事。
考虑到这可能只是API资源管理器的限制,我尝试在Google Apps脚本中进行API调用,但它仍然不包括我需要的字段。
你快到了。
列出消息时,每条消息的id
和threadId
就是您获得的全部内容。然后,您必须单独获取每条消息。
例如,如果您只想要消息的internalDate
,则应在此请求中在 fields
参数中指定。
请求
GET https://www.googleapis.com/gmail/v1/users/me/messages/152b792a91c9c391?fields=internalDate&key={YOUR_API_KEY}
响应
{
"internalDate": "1454778787000"
}