Esempio n. 1
0
 public function testParse()
 {
     $reviewContents = file_get_contents(__DIR__ . '/../InputSamples/anime-1887-reviews.html');
     $reviews = ReviewParser::parse($reviewContents, 'anime');
     $this->assertInternalType('array', $reviews);
     $review = $reviews[0];
     $this->assertInstanceOf('Atarashii\\APIBundle\\Model\\Review', $review);
     $this->assertInstanceOf('\\DateTime', new \DateTime($review->getDate()));
     $this->assertInternalType('int', $review->getRating());
     $this->assertGreaterThanOrEqual('1', $review->getRating());
     $this->assertLessThanOrEqual('10', $review->getRating());
     $this->assertInternalType('string', $review->getUsername());
     $this->assertInternalType('int', $review->getHelpful());
     $this->assertInternalType('int', $review->getEpisodes());
     $this->assertNull($review->getChapters());
     $reviewContents = file_get_contents(__DIR__ . '/../InputSamples/manga-11977-reviews.html');
     $reviews = ReviewParser::parse($reviewContents, 'M');
     $this->assertInternalType('array', $reviews);
     $review = $reviews[0];
     $this->assertInstanceOf('Atarashii\\APIBundle\\Model\\Review', $review);
     $this->assertInstanceOf('\\DateTime', new \DateTime($review->getDate()));
     $this->assertInternalType('int', $review->getRating());
     $this->assertGreaterThanOrEqual('1', $review->getRating());
     $this->assertLessThanOrEqual('10', $review->getRating());
     $this->assertInternalType('string', $review->getUsername());
     $this->assertInternalType('int', $review->getHelpful());
     $this->assertInternalType('int', $review->getChapters());
     $this->assertNull($review->getEpisodes());
 }
 /**
  * Get the reviews of an anime or manga.
  *
  * If there isn't any page passed it will use the most helpfull voted reviews.
  * These are determined by the ratio (helpfull:all).
  *
  * @param int     $id          The ID of the anime or manga as assigned by MyAnimeList
  * @param Request $request     HTTP Request object
  * @param string  $requestType The anime or manga request string
  *
  * @return View
  */
 public function getReviewsAction($id, $requestType, Request $request)
 {
     // http://myanimelist.net/anime/#{id}/ /reviews&p=#{page}
     // http://myanimelist.net/manga/#{id}/ /reviews&p=#{page}
     $downloader = $this->get('atarashii_api.communicator');
     $page = (int) $request->query->get('page');
     if ($page < 0) {
         $page = 0;
     }
     try {
         $details = $downloader->fetch('/' . $requestType . '/' . $id . '/_/reviews&p=' . $page);
     } catch (Exception\CurlException $e) {
         return $this->view(array('error' => 'network-error'), 500);
     }
     $response = new Response();
     $response->setPublic();
     $response->setMaxAge(10800);
     //Three hour
     $response->headers->addCacheControlDirective('must-revalidate', true);
     $response->setEtag($requestType . '/reviews/' . $id . '?page=' . $page);
     //Also, set "expires" header for caches that don't understand Cache-Control
     $date = new \DateTime();
     $date->modify('+10800 seconds');
     //Three hour
     $response->setExpires($date);
     if (strpos($details, 'No series found, check the series id and try again.') !== false) {
         $view = $this->view(array('error' => 'not-found'));
         $view->setResponse($response);
         $view->setStatusCode(404);
         return $view;
     } else {
         $reviews = ReviewParser::parse($details, $requestType);
         $view = $this->view($reviews);
         $view->setResponse($response);
         $view->setStatusCode(200);
         return $view;
     }
 }