PHP Gmail API: пытается собрать только последние 100 потоков - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь получить только последние 100 тем из Gmail.Я использую эту функцию для сбора потоков, но я не знаю, почему она всегда выбирает все потоки, а не только последние 100. Кроме того, я хочу получать их только из входящих сообщений.Может быть, есть небольшая ошибка, но я не вижу, что не так.Надеюсь, кто-то видит, что не так.

function listThreads($service, $userId) {
  $threads = array();
  $pageToken = NULL;
  do {
    try {
      $opt_param = array(
    'maxResults' => 100,
    'labelIds' => 'INBOX'
  );

      if ($pageToken) {
        $opt_param['pageToken'] = $pageToken;
      }
      $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);
  foreach ($threads as $thread) {
    print 'Thread with ID: ' . $thread->getId() . '<br/>';
  }

  return $threads;
}

1 Ответ

0 голосов
/ 29 сентября 2018

Я нашел решение.Если вы установите maxResults => 100, он соберет 100 потоков с одного токена, а затем продолжит собирать другой токен, чтобы получить следующие 100. Поэтому единственное, что мне нужно было сделать, это разорвать, как только потоки были выбраны.Надеюсь, это кому-нибудь поможет. Рабочий код:

function listThreads($service, $userId) {
  $threads = array();
  $pageToken = NULL;
  $opt_param = array(
    'maxResults' => 100,
    'labelIds' => 'INBOX'
  );

  do {
    try {


      if ($pageToken) {
        $opt_param['pageToken'] = $pageToken;
      }
      $threadsResponse = $service->users_threads->listUsersThreads($userId, $opt_param);
      if ($threadsResponse->getThreads()) {
        $threads = array_merge($threads, $threadsResponse->getThreads());

        //$pageToken = $threadsResponse->getNextPageToken();
        break;
      }
    } catch (Exception $e) {
      print 'An error occurred: ' . $e->getMessage();
      $pageToken = NULL;
      $x++;
    }
  } while ($pageToken);
  foreach ($threads as $thread) {
    print 'Thread with ID: ' . $thread->getId() . '<br/>';
  }

  return $threads;
}
...