Я пытаюсь получить количество электронных писем (чтение и непрочитанное, показанное отдельно) для данного поиска. Я читал, что функция 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>";
}
?>
Я боюсь, что labels.get()
не будет помогать в этом случае использования. Он работает только для ярлыков, поэтому вы можете легко читать/читать, например, INBOX
или CHAT
, но не будете помогать, если хотите получить все прочитанные/непрочитанные, например, все сообщения, отправленные с [email protected]
.
Альтернативное решение довольно дешево:
AND is:unread
, а второй с тем же запросом + AND -is:unread
.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
использования.