From 465cd8c768070660355a3c0df25b8e86ba96c3b0 Mon Sep 17 00:00:00 2001 From: logmanoriginal Date: Tue, 2 Jul 2019 20:45:31 +0200 Subject: [PATCH] [ShanaprojectBridge] Add support for https and cleanup --- bridges/ShanaprojectBridge.php | 94 ++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/bridges/ShanaprojectBridge.php b/bridges/ShanaprojectBridge.php index 7084bfb7..759216d4 100644 --- a/bridges/ShanaprojectBridge.php +++ b/bridges/ShanaprojectBridge.php @@ -2,69 +2,90 @@ class ShanaprojectBridge extends BridgeAbstract { const MAINTAINER = 'logmanoriginal'; const NAME = 'Shanaproject Bridge'; - const URI = 'http://www.shanaproject.com'; + const URI = 'https://www.shanaproject.com'; const DESCRIPTION = 'Returns a list of anime from the current Season Anime List'; + public function collectData(){ + $html = $this->loadSeasonAnimeList(); + + $animes = $html->find('div.header_display_box_info') + or returnServerError('Could not find anime headers!'); + + foreach($animes as $anime) { + $this->items[] = array( + 'title' => $this->extractAnimeTitle($anime), + 'author' => $this->extractAnimeTitle($anime), + 'uri' => $this->extractAnimeUri($anime), + 'timestamp' => $this->extractAnimeTimestamp($anime), + 'content' => $this->buildAnimeContent($anime), + ); + } + } + // Returns an html object for the Season Anime List (latest season) private function loadSeasonAnimeList(){ - // First we need to find the URI to the latest season from the - // 'seasons' page searching for 'Season Anime List' - $html = getSimpleHTMLDOM($this->getURI() . '/seasons'); - if(!$html) - returnServerError('Could not load \'seasons\' page!'); - $season = $html->find('div.follows_menu a', 1); - if(!$season) - returnServerError('Could not find \'Season Anime List\'!'); + $html = getSimpleHTMLDOM(self::URI . '/seasons') + or returnServerError('Could not load \'seasons\' page!'); - $html = getSimpleHTMLDOM($this->getURI() . $season->href); - if(!$html) - returnServerError( + $html = defaultLinkTo($html, self::URI . '/seasons'); + + $season = $html->find('div.follows_menu > a', 1) + or returnServerError('Could not find \'Season Anime List\'!'); + + $html = getSimpleHTMLDOM($season->href) + or returnServerError( 'Could not load \'Season Anime List\' from \'' . $season->innertext . '\'!' ); + $html = defaultLinkTo($html, $season->href); + return $html; + } // Extracts the anime title private function extractAnimeTitle($anime){ - $title = $anime->find('a', 0); - if(!$title) - returnServerError('Could not find anime title!'); + $title = $anime->find('a', 0) + or returnServerError('Could not find anime title!'); return trim($title->innertext); } // Extracts the anime URI private function extractAnimeUri($anime){ - $uri = $anime->find('a', 0); - if(!$uri) - returnServerError('Could not find anime URI!'); - return $this->getURI() . $uri->href; + $uri = $anime->find('a', 0) + or returnServerError('Could not find anime URI!'); + return $uri->href; } // Extracts the anime release date (timestamp) private function extractAnimeTimestamp($anime){ $timestamp = $anime->find('span.header_info_block', 1); - if(!$timestamp) + + if(!$timestamp) { return null; + } + return strtotime($timestamp->innertext); } // Extracts the anime studio name (author) private function extractAnimeAuthor($anime){ $author = $anime->find('span.header_info_block', 2); - if(!$author) - return; // Sometimes the studio is unknown, so leave empty + + if(!$author) { + return null; // Sometimes the studio is unknown, so leave empty + } + return trim($author->innertext); } // Extracts the episode information (x of y released) private function extractAnimeEpisodeInformation($anime){ - $episode = $anime->find('div.header_info_episode', 0); - if(!$episode) - returnServerError('Could not find anime episode information!'); + $episode = $anime->find('div.header_info_episode', 0) + or returnServerError('Could not find anime episode information!'); return preg_replace('/\r|\n/', ' ', $episode->plaintext); } @@ -73,15 +94,16 @@ class ShanaprojectBridge extends BridgeAbstract { // Getting the picture is a little bit tricky as it is part of the style. // Luckily the style is part of the parent div :) - if(preg_match('/url\(\/\/([^\)]+)\)/i', $anime->parent->style, $matches)) + if(preg_match('/url\(\/\/([^\)]+)\)/i', $anime->parent->style, $matches)) { return $matches[1]; + } returnServerError('Could not extract background image!'); } // Builds an URI to search for a specific anime (subber is left empty) private function buildAnimeSearchUri($anime){ - return $this->getURI() + return self::URI . '/search/?title=' . urlencode($this->extractAnimeTitle($anime)) . '&subber='; @@ -102,22 +124,4 @@ class ShanaprojectBridge extends BridgeAbstract { . $this->buildAnimeSearchUri($anime) . '">Search episodes

'; } - - public function collectData(){ - $html = $this->loadSeasonAnimeList(); - - $animes = $html->find('div.header_display_box_info'); - if(!$animes) - returnServerError('Could not find anime headers!'); - - foreach($animes as $anime) { - $item = array(); - $item['title'] = $this->extractAnimeTitle($anime); - $item['author'] = $this->extractAnimeAuthor($anime); - $item['uri'] = $this->extractAnimeUri($anime); - $item['timestamp'] = $this->extractAnimeTimestamp($anime); - $item['content'] = $this->buildAnimeContent($anime); - $this->items[] = $item; - } - } }