14

“试用”部分文档允许我播放 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}

回报:

{
 "messages": [
  {
   "id": "146da54fe3dc089e",
   "threadId": "146da54fe3dc089e"
  },
  {
   "id": "146da41d9486982f",
   "threadId": "146da41d9486982f"
  },
  ...
}

但我希望也会返回请求的额外字段。

有没有办法让这个工作?我知道有一种单独的方法可以获取单个消息,但如果可能的话,我希望将它们批量化。

4

2 回答 2

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
    ... 
}];
于 2014-06-27T00:10:47.930 回答
0

在浏览 Google 文档后,使用messages.get部分,我能够使用 json 方法返回所有字段值getMessage(...)

在原始请求中,您将获得idand threadId。使用 id 我们可以通过执行以下操作返回所有消息:

ListMessagesResponse mResponse =
            service.users().messages().list(user).execute();

// This will return the json listed with the field methods id and threadId.
List<Message> messages = mResponse.getMessages();

// Parse the response
if(message.size() == 0){...}
else {
  for(Message msg: messages)
    *.getMessage(service,user,msg.getId());
}

以上不是确切的代码,但应该为您提供如何解决此问题的想法。

于 2016-09-15T15:15:35.940 回答