private function parseNewEpisodes($page) { $animediaShowRepository = $this->dm->getRepository('AppBundle:AnimediaShow'); libxml_use_internal_errors(true); $dom = new \DOMDocument(); $dom->loadHTML($page); $finder = new \DOMXPath($dom); $classname = 'widget__new-series__item__title'; $nodes = $finder->query("//a[contains(@class, '{$classname}')]"); foreach ($nodes as $node) { $showTitle = $node->getAttribute('title'); $show = $animediaShowRepository->findOneBy(['title' => $showTitle]); if ($show) { $url = 'http://online.animedia.tv' . $node->getAttribute('href'); $matches = []; if (preg_match('#Серия\\s(\\d+)\\sиз#u', $node->parentNode->nodeValue, $matches)) { $episode = $show->getEpisodeByNumbers(null, (int) $matches[1]); if (!$episode) { $episode = new Episode(); $episode->setEpisodeNumber((int) $matches[1]); $link = new Link(); $link->setUrl($url); $link->setResolution('online'); $episode->addLink($link); $show->addEpisode($episode); $this->logger->info('Новая серия сериала на animedia:' . $showTitle); } } } else { $this->logger->error('Сериал на animedia не найден:' . $showTitle); } } $this->dm->flush(); }
private function addEpisodeIfNotExists(LostfilmShow $show, $title, $link) { $titleBeginAt = mb_strpos($title, ').', 0, 'UTF-8') + 2; $episodeTitle = trim(mb_substr($title, $titleBeginAt, 1024, 'UTF-8')); $episodeTitle = preg_replace('/\\[.+?\\]/', '', $episodeTitle); $episodeTitle = preg_replace('/\\(S\\d+E\\d+\\)/', '', $episodeTitle); $episodeTitle = trim($episodeTitle, ' .'); $matches = []; if (preg_match('/\\(S(\\d+)E(\\d+)\\)/', $title, $matches)) { $seasonNumber = (int) $matches[1]; $episodeNumber = (int) $matches[2]; $episode = $show->getEpisodeByNumbers($seasonNumber, $episodeNumber); if ($episode !== null) { $this->addLinkToEpisode($episode, $link); return; } $episode = new Episode(); $episode->setCreatedAt(new \DateTime()); $episode->setTitle($episodeTitle); $episode->setSeasonNumber($seasonNumber); $episode->setEpisodeNumber($episodeNumber); $this->addLinkToEpisode($episode, $link); $show->addEpisode($episode); $this->logger->info(sprintf('Добавлен эпизод: %s (S%dE%d)', $show->getTitle(), $seasonNumber, $episodeNumber)); } }