/** * @param $showId string show id * * @return array */ public function getRequestHeaders($showId) { $headers = $this->config->getRequestHeaders(); if (isset($headers['Host'])) { $headers['Host'] = str_replace('[URL]', $this->config->getAddictedUrl(), $headers['Host']); } if (isset($headers['Referer'])) { $headers['Referer'] = str_replace('[SCHEME]://[URL]', $this->getAddictedUrl(), $headers['Referer']); $headers['Referer'] = str_replace('[SHOW-URI]', $this->config->getAddictedShowUri(), $headers['Referer']); $headers['Referer'] = str_replace('[SHOW]', $showId, $headers['Referer']); } return $headers; }
/** * @param $episodeFilename string show file name * @param $download boolean download the file? * * @return null|string */ public function findSubtitle($episodeFilename, $download) { $language = $this->config->getSubtitleLanguage(); if (!isset($this->languages[$language])) { printf("Missing language [%s].\n", $language); return null; } $episode = new Episode($episodeFilename); if (!isset($this->shows[$episode->sanitizedShowName])) { printf("Missing show [%s].\n", $episode->showName); return null; } $languageId = $this->languages[$language]; $showId = $this->shows[$episode->sanitizedShowName]; $url = $this->builder->getAddictedShowAjaxUrl($showId, $episode->season, $languageId); printf("Trying to get subtitles from [%s].\n", $url); $crawler = $this->client->request('GET', $url); $matchingSubtitles = $crawler->filter('div#season > table > tbody > tr.epeven')->reduce(function (Crawler $node) use($episode) { $children = $node->children(); $ep = $children->getNode(1)->nodeValue; $group = strtolower($children->getNode(4)->nodeValue); $status = strtolower($children->getNode(5)->nodeValue); return (int) $ep === (int) $episode->ep && $episode->inGroups($group) && strpos($status, '%') === false; }); if ($matchingSubtitles->count() == 0) { printf("Missing subtitles for show [%s] season [%s] episode [%s] \n and groups [%s].\n", $episode->showName, $episode->season, $episode->ep, implode(', ', $episode->groups)); return null; } $chosenSubtitle = $matchingSubtitles->first(); $downloadUri = $chosenSubtitle->children()->getNode(9)->firstChild->getAttribute('href'); $url = $this->builder->getSubtitleUrl($downloadUri); if ($download === false) { printf("Chosen subtitle [%s].\n", $url); return null; } printf("Downloading subtitle [%s].\n", $url); $headers = $this->builder->getRequestHeaders($showId); return $this->client->getClient()->get($url, ['headers' => $headers])->getBody()->getContents(); }