Получение тем сообщений, модифицированных после [дата] - PullRequest
0 голосов
/ 03 апреля 2019

Почему?
Я играю с API GMAIL, для небольшого проекта на работе

Требуемый результат
ЧтоЯ пытаюсь получить от API Gmail, все ли потоки сообщений изменены после определенной отметки времени / даты.

Что у меня есть до сих пор
Пока мне удается получитьвсе темы, созданные после определенной даты - с помощью стандартных поисковых запросов Gmail см. - https://support.google.com/mail/answer/7190.

Проблема
Это здорово, что я могу получить все темы сообщений послеопределенная дата, но проблема в том, что мне задают запрос:

after:[todays date - 7 days)  

Это покажет мне все цепочки сообщений, до 7 дней назад - но что, если у меня есть ветка сообщений, созданная 8дней назад и все еще обновляется ?.Какой мой лучший вариант, чтобы получить все цепочки сообщений, изменено с настоящего момента до 7 дней назад?
Проверка всех цепочек сообщений, все время не вариант :)

Код

 $client = getClient();
 $oService = new Google_Service_Gmail($client);
 $sUser = 'me';
 $tsMailsAfter   = '1554280000';
 $sIn            = 'INBOX';

//before;, after:, in:(inbox, sent)
$aThreads = getlistThread($oService, $sUser, 'after:'.$tsMailsAfter.' in:'.$sIn);

function getlistThread($service, $userId, $aQuery = '') 
{
$threads = array();
$pageToken = NULL;
do
{
    try 
    {
        $opt_param = array();
        if ($pageToken) 
        {
            $opt_param['pageToken'] = $pageToken;
        }
        $opt_param['q']         = $aQuery;
        $threadsResponse = $service->users_threads->listUsersThreads($userId, $opt_param);
        if($threadsResponse->getThreads()) 
        {
            $threads = array_merge($threads, $threadsResponse->getThreads());
            $pageToken = $threadsResponse->getNextPageToken();
        }
    } 
    catch (Exception $e) 
    {
        print 'An error occurred: ' . $e->getMessage();
        $pageToken = NULL;
    }
}
while ($pageToken);
return $threads;
}

1 Ответ

0 голосов
/ 04 апреля 2019

Я решил свою проблему, просто используя поисковый запрос (с: after) on -> listUsersMessages (), а затем собирая идентификаторы в array ().Это не самое оптимальное решение, поэтому лучше всего использовать поисковый запрос: updated_after - это решение демонстративно работает для моей цели :)

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

    $aThreadsToUpdate = array();
    if(isset($aMessages) && !empty($aMessages))
    {
        foreach ($aMessages as $oMessage) 
        {
            $aThreadsToUpdate[] = $oMessage->getThreadId();
        }
    }
    return array_unique($aThreadsToUpdate);
}
...