Оценить результат поиска | Gmail API PHP

1

Я пытаюсь получить количество электронных писем (чтение и непрочитанное, показанное отдельно) для данного поиска. Я читал, что функция label.get() выполняет трюк, но я не знаю, как его использовать. Здесь код, который я должен определить, если у меня меньше или больше 100 результатов для данного отправителя.

      require_once '../../vendor/autoload.php';
      session_start();
      $client = new Google_Client();
      $client->setAuthConfigFile('../../client_secrets.json');
      $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
      $client->addScope(Google_Service_Gmail::GMAIL_READONLY);
      $client->setAccessType("offline");
      $client->setApprovalPrompt('force');
      $client->setAccessToken($_SESSION['token']);
      $service = new Google_Service_Gmail($client);

      $sender = array();
      $sender[] = '[email protected]';
      $sender[] = '[email protected]';
      $sender[] = '[email protected]';

      function countfrom($service, $userId, $expeditor) {
            try
            {
              unset($optParamsamz);
              $optParamsamz = [];
              $optParamsamz['maxResults'] = 100; // Return Only 5 Messages
              $optParamsamz['q'] = "From: '".$expeditor."'  "; 
              $messagesamz = $service->users_messages->listUsersMessages('me',$optParamsamz);
              $listamz = $messagesamz->getMessages();
              echo sizeof($listamz);

          }
         catch (Exception $e)
            {
              print 'An error occurred: ' . $e->getMessage();
            }

          }

foreach ($sender as $key => $value)
            {
             echo $value .': ';
             countfrom($service,$_SESSION['emaile'],$value)  ;
             echo '<br/>';
            }

------------------- РЕДАКТИРОВАТЬ ----------------------

Я пробовал новое решение, которое кажется ближе к тому, что я ищу. Теперь проблема исходит от Google, который возвращает нечетное число для resultestimatsize:

<?
  require_once '../../vendor/autoload.php';
  session_start();
  $client = new Google_Client();
  $client->setAuthConfigFile('../../client_secrets.json');
  $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
  $client->addScope(Google_Service_Gmail::GMAIL_READONLY);
  $client->setAccessType("offline");
  $client->setApprovalPrompt('force');
  $client->setAccessToken($_SESSION['token']);
  $service = new Google_Service_Gmail($client);

  $sender_array[] = '[email protected]';
  $sender_array[] = '[email protected]';
  $sender_array[] = '[email protected]';
  $sender_array[] = '[email protected]';

  foreach ($sender_array as $key => $expeditor)
  {

    $optParamsamz1['q'] = "From: '".$expeditor."' is:read  "; 
    $optParamsamz2['q'] = "From: '".$expeditor."'   "; 

    echo $expeditor.": ".$service->users_messages->listUsersMessages('me',$optParamsamz1)->getResultSizeEstimate() . "
                       ".$service->users_messages->listUsersMessages('me',$optParamsamz2)->getResultSizeEstimate(); 
    echo "<br>";
  }

?>

  • 1
    Просто чтобы уточнить :) Вы хотите получать каждое письмо от определенного письма, или вы просто хотите количество прочитанных / непрочитанных писем?
  • 0
    Я хотел бы иметь возможность читать x / y непрочитанные электронные письма для поиска типа «От: [email protected]»
Теги:
gmail
google-api-php-client
gmail-api

1 ответ

1

Я боюсь, что labels.get() не будет помогать в этом случае использования. Он работает только для ярлыков, поэтому вы можете легко читать/читать, например, INBOX или CHAT, но не будете помогать, если хотите получить все прочитанные/непрочитанные, например, все сообщения, отправленные с [email protected].

Альтернативное решение довольно дешево:

  1. Список сообщений с запросом + AND is:unread, а второй с тем же запросом + AND -is:unread.
  2. Если ответ содержит nextPageToken, у вас 100+ чтение/непрочитанное. Если он не содержит nextPageToken, есть response.messages.length количество прочитанных/непрочитанных сообщений.

пример

Запросить непрочитанные

q = from:[email protected] AND is:unread

GET https://www.googleapis.com/gmail/v1/users/me/messages?q=from%3Ainfo%40berniesanders.com+AND+is%3Aunread&access_token={YOUR_API_KEY}

отклик

{
 "messages": [
  {
   "id": "1523144d6e3feb2e",
   "threadId": "1523144d6e3feb2e"
  },
  {
   "id": "15227d879ccb601f",
   "threadId": "15227d879ccb601f"
  }, ...
}
// No nextPageToken => response.messages.length unread = 22 unread

Запросить НЕ непрочитанные

q = from:[email protected] AND -is:unread

GET https://www.googleapis.com/gmail/v1/users/me/messages?q=from%3Ainfo%40berniesanders.com+AND+-is%3Aunread&access_token={YOUR_API_KEY}

отклик

{
 "messages": [
  {
   "id": "1522d4af39d7eec6",
   "threadId": "1522d4af39d7eec6"
  },
  {
   "id": "1521d6f3dbeaf886",
   "threadId": "1521d6f3dbeaf886"
  }, ...
  "nextPageToken": "32436546446"
}
// nextPageToken in response => 100+ read

Вы можете сделать это еще на один шаг и продолжать перечислять с помощью nextPageToken пока в ответе не будет следующегоPageToken, и просто добавьте все результаты вместе, но это может быть медленным или неэффективным для вашего nextPageToken использования.

  • 1
    Спасибо, это поможет. Кстати, я пойду на решение, которое берет 100 первых электронных писем в качестве образца и выполнит расчет непрочитанных / прочитанных на нем.
  • 1
    На самом деле есть результат EstimateSearch, предоставленный Gmail, но это число кажется мне странным (всегда что-то вроде 103!). Я использую функцию: getResultSizeEstimate, которая получает значение resultSizeEstimate
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню