Пример #1
0
 /**
  * @param string $filename
  *
  * @return Game
  */
 private function createGameWithInfo($filename)
 {
     // Temporarily disable xml errors since the file we're parsing is a bit of a mess
     libxml_use_internal_errors(true);
     $doc = new \DOMDocument();
     $doc->loadHTMLFile($filename);
     // These contain all the info we need with a whole lot of extra whitespace to remove
     $v_text = preg_replace("/[^A-Za-z\\d]/", "", $doc->getElementById('Visitor')->textContent);
     $h_text = preg_replace("/[^A-Za-z\\d]/", "", $doc->getElementById('Home')->textContent);
     // Grab the home / away teams and scores
     if (preg_match_all(Game::RX_SCORETEAMS, $v_text, $matches_visitor)) {
         $away = new Team($matches_visitor[2][0]);
         $away_score = $matches_visitor[1][0];
     } else {
         // DEBUG: Remove me later OK?
         var_dump($v_text);
         die;
         return false;
     }
     if (preg_match_all(Game::RX_SCORETEAMS, $h_text, $matches_home)) {
         $home = new Team($matches_home[2][0]);
         $home_score = $matches_home[1][0];
     } else {
         // DEBUG: Remove me later OK?
         var_dump($h_text);
         die;
         return false;
     }
     // Generate the game ID based off of the filename
     $parts = explode(DIRECTORY_SEPARATOR, $filename);
     $season = $parts[count($parts) - 2];
     $game_number = str_replace('.HTM', '', end($parts));
     $game_id = $season . $game_number;
     $game = new Game($game_id);
     $game->setHomeTeam($home);
     $game->setAwayTeam($away);
     $game->setFinalScore($home_score, $away_score);
     $game->setSeason($season);
     // Get the attendence, start/end times and location
     /** @var \DOMNode $childNode */
     foreach ($doc->getElementById('GameInfo')->childNodes as $childNode) {
         $value = trim(preg_replace('!\\s+!', ' ', $childNode->textContent));
         $value = preg_replace('/[^a-zA-Z0-9\\s\\:]/', '', $value);
         if (mb_strlen($value) <= 2) {
             continue;
         }
         if (preg_match(Game::RX_DATE, $value, $matches)) {
             $game->date = $matches[1];
         } else {
             if (preg_match(Game::RX_ATTEND, $value, $matches)) {
                 $game->attendance = (int) $matches[1];
                 $game->venue = $matches[2];
             } else {
                 if (preg_match_all(Game::RX_ENDSTART, $value, $matches)) {
                     $game->startTime = $matches[1][0];
                     $game->startTimeZone = $matches[2][0];
                     $game->endTime = $matches[1][1];
                     $game->endTimeZone = $matches[2][1];
                 } else {
                     if ($value == "Final") {
                         $game->wentOverTime = false;
                     }
                 }
             }
         }
     }
     libxml_use_internal_errors(false);
     return $game;
 }