Gmail API中是否有一种方法可以在消息列表方法中包含额外的字段(例如主题,正文)?

yuk*_*lai 14 gmail-api

"试一试"部分文档允许我播放API,字段选择器允许我选择很多字段,例如标题,原始等.但是当尝试使用API​​时,它们都没有显示出来.我看到的唯一的东西仍然只是消息ID和线程ID.

https://developers.google.com/gmail/api/v1/reference/users/messages/list

例如以下内容:

GET https://www.googleapis.com/gmail/v1/users/{user_id}/messages?**fields=messages(historyId%2Cid%2Cpayload%2Craw%2CsizeEstimate%2Csnippet%2CthreadId)**&key={YOUR_API_KEY}
Run Code Online (Sandbox Code Playgroud)

返回:

{
 "messages": [
  {
   "id": "146da54fe3dc089e",
   "threadId": "146da54fe3dc089e"
  },
  {
   "id": "146da41d9486982f",
   "threadId": "146da41d9486982f"
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

但我希望还会返回所请求的额外字段.

有没有办法让这个工作?我知道有一个单独的方法来获取单个消息,但是如果可能的话就像让它们批处理一样.

Eri*_*c D 9

messages.list不仅仅返回标识符.不确定字段选择器是什么,但我不相信它被使用.

但是,您可以使用批处理的message.get在第二次调用中一次检索多条消息:

批处理请求由多个API调用组合成一个HTTP请求组成.本节详细介绍了批处理语法; 后来,有一个例子.

注意:一组n个请求一起计入n个请求,而不是一个请求.批处理请求在处理之前被分成一组请求.

来自:https: //developers.google.com/storage/docs/json_api/v1/how-tos/batch

使用Gmail API和批处理,这里有一些示例代码:

GTLBatchQuery *batchQuery = [GTLBatchQuery batchQuery];

[gmailMessageIds enumerateObjectsUsingBlock:^(NSNumber *messageId, NSUInteger idx, BOOL *stop) {
    GTLQueryGmail *query = [GTLQueryGmail queryForUsersMessagesGet];
    query.userId = self.account.email;
    query.identifier = [NSString stringWithFormat:@"%llx", [messageId unsignedLongLongValue]];
    query.format = kGTLGmailFormatRaw;

    [batchQuery addQuery:query];
}];


[self.gmailService executeQuery:batchQuery completionHandler:^(GTLServiceTicket *ticket, GTLBatchResult *result, NSError *error) {
    NSArray *gmailMessages = result.successes.allValues; // This is an array of GTLGmailMessage objects
    ... 
}];
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,现在messages.get()和threads.get()都支持format = METADATA和metadataHeaders = ['from','to','subject',...] params.因此,当您执行第二次批处理的get()调用时,您可以只请求所需的内容,以使其更快/更高效(我们将很快更新配额以反映这一点). (2认同)