2017-10-14 12 views
2

J'utilise l'API Gmail pour récupérer les courriels des utilisateurs et afficher le nombre de courriels dans un mois sur un graphique. mais boucler chaque email pour compter les emails n'est pas efficace. Y at-il un autre moyen que je peux chercher ce compte? Par exemple, combien de courriels sont envoyés ou reçus en septembre?comment récupérer le nombre de courriels dans un mois spécifique dans l'API Gmail

Bien sûr, nous pouvons utiliser after: ou before: filters, mais si je dois aller chercher des comptes de l'année entière, il faudrait 12 appels API. s'il y a un autre moyen que je peux chercher compter dans 1 appel? ou toute autre méthode efficace? Merci.

Répondre

1

Je pense que votre seule option est de lister les messages avec une requête after:<start_date> before:<end_date> jusqu'à ce qu'il n'y a pas nextPageToken dans la réponse, puis prendre le nombre total:

function getMessageCount($service, $userId, $query) { 
    $pageToken = NULL; 
    $messages = array(); 
    $opt_param = array(
    'q' => $query 
); 
    do { 
    try { 
     if ($pageToken) { 
     $opt_param['pageToken'] = $pageToken; 
     } 
     $messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param); 
     if ($messagesResponse->getMessages()) { 
     $messages = array_merge($messages, $messagesResponse->getMessages()); 
     $pageToken = $messagesResponse->getNextPageToken(); 
     } 
    } catch (Exception $e) { 
     print 'An error occurred: ' . $e->getMessage(); 
    } 
    } while ($pageToken); 

    return count($messages); 
} 

Si vous souhaitez obtenir la quantité de messages entre par exemple Friday, September 1, 2017 12:00:00 AM et Sunday, October 1, 2017 12:00:00 AM, vous l'appelleriez alors comme ceci:

$count = getMessageCount($service, 'me', 'after:1504224000 before:1506816000');