Есть ли способ в 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());
}
Вышеупомянутый не точный код, но должен предоставить вам представление о том, как подойти к этой проблеме.