Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
估计搜索结果| Gmail API PHP_Php_Api_Gmail_Google Api Php Client_Gmail Api - Fatal编程技术网

估计搜索结果| Gmail API PHP

估计搜索结果| Gmail API PHP,php,api,gmail,google-api-php-client,gmail-api,Php,Api,Gmail,Google Api Php Client,Gmail Api,我正在尝试获取给定搜索的电子邮件数量(已读和未读分开显示)。我已经读到labels.get()函数实现了这个技巧,但我不知道如何使用它。下面是我必须检测的代码,对于给定的发送者,我的结果是否少于或多于100个 require_once '../../vendor/autoload.php'; session_start(); $client = new Google_Client(); $client->setAuthConfigFile('

我正在尝试获取给定搜索的电子邮件数量(已读和未读分开显示)。我已经读到labels.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[] = 'sender1@email.com';
      $sender[] = 'sender2@email.com';
      $sender[] = 'sender3@email.com';

      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/>';
            }
require_once'../../vendor/autoload.php';
会话_start();
$client=新的Google_客户端();
$client->setAuthConfigFile('../../client_secrets.json');
$client->addScope(谷歌服务驱动器::驱动器元数据只读);
$client->addScope(Google\u服务\u Gmail::Gmail\u只读);
$client->setAccessType(“脱机”);
$client->setApprovalPrompt('force');
$client->setAccessToken($_会话['token']);
$service=新的Google\u服务\u Gmail($client);
$sender=array();
$sender[]='sender1@email.com';
$sender[]='sender2@email.com';
$sender[]='sender3@email.com';
函数countfrom($service、$userId、$expeditor){
尝试
{
未结算($optParamsamz);
$optParamsamz=[];
$optParamsamz['maxResults']=100;//只返回5条消息
$optParamsamz['q']=“发件人:”“$expeditor.””;
$messagesamz=$service->users\u messages->listUsersMessages('me',$optParamsamz);
$listamz=$messagesamz->getMessages();
echo sizeof($listamz);
}
捕获(例外$e)
{
打印“出现错误:”。$e->getMessage();
}
}
foreach($key=>$value的发送方)
{
echo$value.':';
countfrom($service,$\会话['email'],$value);
回声“
”; }
-------------------编辑----------------------

我已经尝试了一个新的解决方案,似乎更接近我所寻找的。现在的问题来自谷歌,谷歌为ResultTestiMatize返回了一些奇数:

<?
  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[] = 'sender1@sender.com';
  $sender_array[] = 'sender2@sender.com';
  $sender_array[] = 'sender3@sender.com';
  $sender_array[] = 'sender4@sender.com';

  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()
恐怕在这个用例中没有帮助。它只适用于标签,因此您可以轻松地从
收件箱
聊天
中读取/未读取,但如果您想从
发送的所有邮件中获取所有已读取/未读取信息,则它将毫无帮助example@gmail.com

不过,另一种解决方案相当便宜:

  • 列出带有查询+
    且is:unread
    的消息,以及具有相同查询的第二条消息+
    和-is:unread
  • 如果响应包含一个
    nextPageToken
    ,则您有100多个已读/未读。如果它不包含
    nextPageToken
    ,则存在
    response.messages.length
    已读/未读消息量
  • 示例

    {
     "messages": [
      {
       "id": "1523144d6e3feb2e",
       "threadId": "1523144d6e3feb2e"
      },
      {
       "id": "15227d879ccb601f",
       "threadId": "15227d879ccb601f"
      }, ...
    }
    // No nextPageToken => response.messages.length unread = 22 unread
    
    {
     "messages": [
      {
       "id": "1522d4af39d7eec6",
       "threadId": "1522d4af39d7eec6"
      },
      {
       "id": "1521d6f3dbeaf886",
       "threadId": "1521d6f3dbeaf886"
      }, ...
      "nextPageToken": "32436546446"
    }
    // nextPageToken in response => 100+ read
    
    请求未读

    q = from:info@berniesanders.com 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}
    
    q = from:info@berniesanders.com 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
    
    {
     "messages": [
      {
       "id": "1522d4af39d7eec6",
       "threadId": "1522d4af39d7eec6"
      },
      {
       "id": "1521d6f3dbeaf886",
       "threadId": "1521d6f3dbeaf886"
      }, ...
      "nextPageToken": "32436546446"
    }
    // nextPageToken in response => 100+ read
    
    请求未读

    q = from:info@berniesanders.com 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}
    
    q = from:info@berniesanders.com 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
    
    {
     "messages": [
      {
       "id": "1522d4af39d7eec6",
       "threadId": "1522d4af39d7eec6"
      },
      {
       "id": "1521d6f3dbeaf886",
       "threadId": "1521d6f3dbeaf886"
      }, ...
      "nextPageToken": "32436546446"
    }
    // nextPageToken in response => 100+ read
    

    您可以更进一步,继续使用
    nextPageToken
    列表,直到响应中没有
    nextPageToken
    ,然后将所有结果加在一起,但这对于您的用例来说可能会很慢或效率低下。

    只是为了澄清:)您想从特定的电子邮件中获取每封邮件吗,或者你只是想知道读/未读邮件的数量?我希望能够有x读/y未读邮件进行搜索,如“发件人:sender1@gmail.com谢谢,那就行了。仅供参考,我会选择一个解决方案,以第一批100封电子邮件为样本,对其进行未读/已读计算。实际上,Gmail给出了一个估计搜索结果,但这个数字对我来说似乎很奇怪(总是103左右)。我使用的函数是:getResultSizeEstimate,用于检索值resultSizeEstimate@justberare你说得对。我不知道!但它估计我的整个收件箱有7500条信息到308条,所以我真的不相信它。也许我误解了它的工作原理。谢谢你的评论,和一个bug在一起感觉真好。无法找出解决同一问题的方法。始终将103条消息作为估计值。