GMail API - получение определенных заголовков или полей сообщений - PullRequest
0 голосов
/ 31 мая 2019

Я успешно подключил GMail API через учетную запись G Suite и учетную запись службы.Я могу получить список сообщений, и я могу получать сообщения по идентификаторам.Я работаю с PHP.

С чем у меня проблемы, это получить, например, заголовки FROM или TO, SUBJECT или поле сниппета.

$optParam = array('format' => 'metadata', 'metadataHeaders'=>['subject','from'], 'fields'=>['snippet','labelIds']);
$fullMessage = $service->users_messages->get($user, $id, $optParam);

При этом будет возвращен фрагмент, но не тема, от или от labelIds.

Если я использую GMail «Попробуйте этот API» и используйте идентификатор сообщения и используйте«snippet» в записи «fields», я просто получаю фрагмент обратно как:

{
 "snippet": "Short snippet of the message"
}

Если я использую:

$optParam = array('format' => 'metadata', 'metadataHeaders'=>['subject','from','to']);

Я получаю 3 заголовка, но я такжеполучить гораздо больше информации, включая метки и фрагмент - около 3 КБ для каждого сообщения.

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

Меня не волнует объем данных, но в среднем требуется около 3,5 секунд, чтобы получить данные всего за 14 сообщений!

Есть ли способ ограничить это, чтобы я не получал все «лишние» данные или как-то ускорял поиск?

Большое спасибо за любые предложения:)

1 Ответ

0 голосов
/ 06 июня 2019

Для отправки запроса потребуется указать ключи метаданных, а также имена параметров полей, которые вы хотите получить. Вы можете использовать HTTP-запрос GET с URI, чтобы получить «to», «from», «subject» и «snippet» с https://www.googleapis.com/gmail/v1/users/me/messages/<MESSAGE_ID>?format=metadata&metadataHeaders=to&metadataHeaders=from&metadataHeaders=subject&fields=snippet%2C+payload%2Fheaders, что также ограничит количество получаемых вами заголовков.

В PHP вы можете использовать это:

$optParam = array('format' => 'metadata', 'metadataHeaders'=>['subject', 'from', 'to'], 'fields'=>'payload/headers,snippet');

Обратите внимание, что параметр fields необходимо отправлять как строку, а не как массив .

Также следует помнить, что существует известная проблема с GMail API , когда использование области действия https://www.googleapis.com/auth/gmail.metadata не возвращает фрагмент. Вам нужно будет использовать https://www.googleapis.com/auth/gmail.readonly.

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

...