maintainer = 'logmanoriginal'; $this->name = 'Shanaproject Bridge'; $this->uri = 'http://www.shanaproject.com'; $this->description = 'Returns a list of anime from the current Season Anime List'; } // 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 = $this->getSimpleHTMLDOM($this->getURI() . '/seasons'); if(!$html) $this->returnServerError('Could not load \'seasons\' page!'); $season = $html->find('div.follows_menu/a', 1); if(!$season) $this->returnServerError('Could not find \'Season Anime List\'!'); $html = $this->getSimpleHTMLDOM($this->getURI() . $season->href); if(!$html) $this->returnServerError('Could not load \'Season Anime List\' from \'' . $season->innertext . '\'!'); return $html; } // Extracts the anime title private function ExtractAnimeTitle($anime){ $title = $anime->find('a', 0); if(!$title) $this->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) $this->returnServerError('Could not find anime URI!'); return $this->getURI() . $uri->href; } // Extracts the anime release date (timestamp) private function ExtractAnimeTimestamp($anime){ $timestamp = $anime->find('span.header_info_block', 1); if(!$timestamp) $this->returnServerError('Could not find anime timestamp!'); 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 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) $this->returnServerError('Could not find anime episode information!'); return preg_replace('/\r|\n/', ' ', $episode->plaintext); } // Extracts the background image private function ExtractAnimeBackgroundImage($anime){ // 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)) return $matches[1]; $this->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() . '/search/?title=' . urlencode($this->ExtractAnimeTitle($anime)) . '&subber='; } // Builds the content string for a given anime private function BuildAnimeContent($anime){ // We'll use a template string to place our contents return ' ' . htmlspecialchars($this->ExtractAnimeTitle($anime)) . '

' . $this->ExtractAnimeEpisodeInformation($anime) . '


Search episodes

'; } public function collectData (array $param){ $html = $this->LoadSeasonAnimeList(); $animes = $html->find('div.header_display_box_info'); if(!$animes) $this->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; } } }