获取消息线程,在 [日期] 之后修改
Getting Message Threads, modfied after [date]
为什么?
我正在使用 GMAIL api,用于工作中的一个小项目
想要的结果
我试图从 Gmail API 获得的是所有消息线程在某个 timestamp/date.
之后修改
到目前为止我有什么
到目前为止,我设法获得了在特定日期之后创建的所有线程 - 通过使用标准的 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;
}
我通过在 ->listUsersMessages() 上使用搜索查询(使用 :after)解决了我的问题,然后将 ID 收集到 array() 中。它不是最佳解决方案,进行搜索查询 :modified_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);
}
为什么?
我正在使用 GMAIL api,用于工作中的一个小项目
想要的结果
我试图从 Gmail API 获得的是所有消息线程在某个 timestamp/date.
到目前为止我有什么
到目前为止,我设法获得了在特定日期之后创建的所有线程 - 通过使用标准的 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;
}
我通过在 ->listUsersMessages() 上使用搜索查询(使用 :after)解决了我的问题,然后将 ID 收集到 array() 中。它不是最佳解决方案,进行搜索查询 :modified_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);
}