예제 #1
0
 /**
  * @return bool
  */
 protected function isTwitterApiAvailable()
 {
     $availableTwitterApi = false;
     /** @var \WeavingTheWeb\Bundle\ApiBundle\Entity\Token $token */
     $token = $this->tokenRepository->refreshFreezeCondition($this->accessor->userToken, $this->logger);
     if (!$token->isFrozen()) {
         try {
             if (!$this->accessor->isApiRateLimitReached('/statuses/user_timeline')) {
                 $availableTwitterApi = true;
             }
         } catch (\Exception $exception) {
             if ($exception->getCode() === 52) {
                 $availableTwitterApi = true;
             } else {
                 $this->tokenRepository->freezeToken($this->accessor->userToken);
             }
         }
     } else {
         /** @var \WeavingTheWeb\Bundle\ApiBundle\Entity\Token $unfrozenToken */
         $unfrozenToken = $this->tokenRepository->findFirstUnfrozenToken();
         if (is_null($unfrozenToken)) {
             $now = new \DateTime();
             $this->moderator->waitFor($token->getFrozenUntil()->getTimestamp() - $now->getTimestamp(), ['{{ token }}' => substr($token->getOauthToken(), 0, '8')]);
         } else {
             $this->setupAccessor(['token' => $unfrozenToken->getOauthToken(), 'secret' => $unfrozenToken->getOauthTokenSecret()]);
             $availableTwitterApi = true;
         }
     }
     return $availableTwitterApi;
 }