Есть ли способ в API Gmail включать дополнительные поля (например, тему, тело) в методе списка сообщений?

Документация части "Попробовать" позволяет мне играть в API, а полевой селектор позволяет мне выбирать множество полей, например. заголовок, raw и т.д. Но ни один из них не появился при попытке API. Единственное, что я видел, это еще только идентификатор сообщения и идентификатор потока.

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"
  },
  ...
}

Но я бы ожидал, что запрошенные дополнительные поля также будут возвращены.

Есть ли способ заставить это работать? Я знаю, что есть отдельный метод для получения отдельного сообщения, но, если возможно, он получает пакет.

Ответы

Ответ 1

messages.list не возвращает гораздо больше, чем только идентификаторы. не знаю, что такое полевой селектор, но я не верю, что он использовался.

однако вы можете использовать пакетный message.get для последующего извлечения множества сообщений одновременно во втором вызове:

Пакетный запрос состоит из нескольких вызовов API, объединенных в один HTTP-запрос. В этом разделе подробно описывается синтаксис пакета; позже, есть пример.

Примечание. Набор из n запросов, собранных вместе, учитывает ваш предел использования как n запросов, а не как один запрос. Запрос пакета отделяется от набора запросов перед обработкой.

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

С API-интерфейсом Gmail и пакетом здесь приведен пример кода:

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
    ... 
}];

Ответ 2

После просмотра документации Google, используя раздел messages.get, я смог вернуть все значения полей через json, используя метод getMessage(...).

В исходном запросе вам даны id и 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());
}

Вышеупомянутый не точный код, но должен предоставить вам представление о том, как подойти к этой проблеме.