예제 #1
0
 /**
  * Returns Showtimes found by a search for a movie title.
  *
  * @param        $movieTitle Title of the searched Movie
  * @param string $nearLocation Search Movies or Theaters near this location. Format CH-3000 Bern.
  * @param string $lang Language for the search Results. (i.e. en, de, fr).
  * @param null   $dateOffset Offset of Days from Today (null|0 = Today) Showtimes searched.
  *
  * @throws \Exception
  *
  * @return mixed|null
  */
 public function queryShowtimesByMovieNear($movieTitle, $nearLocation, $lang = 'en', $dateOffset = null)
 {
     // http://google.com/movies?near=Thun&hl=de&q=jurassic+world
     $dataResponse = $this->getData($nearLocation, $movieTitle, null, null, $lang);
     $days = [];
     /** @var Movie $movie */
     $movie = null;
     if ($dataResponse) {
         $dayDate = Carbon::now();
         $dayDate->setTime(0, 0, 0);
         $crawler = $dataResponse->getCrawler();
         $parser = new ShowtimeParser($crawler);
         $movies = $parser->parseMovies(false);
         if ($movies == null) {
             return null;
         }
         //TODO: handle multiple movies found on one page
         $movie = $movies[0];
         if ($movie->getMid() == null) {
             //Dirty but didn't found better way...
             $link = $parser->getFirstLeftNavLink();
             $movie->setMid(ParseHelper::getParamFromLink($link->attr('href'), 'mid'));
         }
         $days[] = $parser->getShowtimeDayByMovie($dayDate->copy());
         for ($i = $dateOffset + 1; $i < 20; $i++) {
             $dataResponse = $this->getData($nearLocation, null, $movie->getMid(), null, $lang, $i);
             $parser = new ShowtimeParser($dataResponse->getCrawler());
             $result = $parser->getShowtimeDayByMovie($dayDate->addDay(1)->copy());
             if ($result == null) {
                 break;
             } else {
                 $days[] = $result;
             }
         }
     }
     $movie->setTheaterShowtimeDays($days);
     return $movie;
 }
예제 #2
0
 /**
  * Returns Showtimes found by a search for a movie title.
  *
  * @param string $near
  * @param string $name
  * @param string $lang
  * @param null   $dateOffset
  *
  * @throws \Exception
  *
  * @return mixed|null
  */
 public function queryShowtimesByMovieNear($movieTitle, $nearLocation, $lang = 'en', $dateOffset = null)
 {
     // http://google.com/movies?near=Thun&hl=de&q=jurassic+world
     $dataResponse = $this->getData($nearLocation, $movieTitle, null, null, $lang);
     $days = [];
     $movie = null;
     if ($dataResponse) {
         $dayDate = Carbon::now();
         $dayDate->setTime(0, 0, 0);
         $crawler = $dataResponse->getCrawler();
         $parser = new ShowtimeParser($crawler);
         $movies = $parser->parseMovies(false);
         //TODO: Replace by handeles multiple movies in results!
         $movie = $movies[0];
         if (count($movies) > 1) {
             throw new \Exception('more than one movie in search results are not supported yet!');
         } else {
             //Dirty but didn't found better way...
             $midHref = $crawler->filter('#left_nav a')->first()->attr('href');
             $movie->setMid(ParseHelper::getParamFromLink($midHref, 'mid'));
         }
         $days[] = $parser->getShowtimeDayByMovie($dayDate->copy());
         for ($i = $dateOffset + 1; $i < 20; $i++) {
             $dataResponse = $this->getData($near, $name, null, null, $lang, $i);
             $parser = new ShowtimeParser($dataResponse->getCrawler());
             $result = $parser->getShowtimeDayByMovie($dayDate->addDay(1)->copy());
             if ($result == null) {
                 break;
             } else {
                 $days[] = $result;
             }
         }
     }
     $movie->setTheaterShowtimeDays($days);
     return $movie;
 }