[ShanaprojectBridge] Add support for https and cleanup
This commit is contained in:
parent
73f4bc078e
commit
465cd8c768
1 changed files with 49 additions and 45 deletions
|
@ -2,69 +2,90 @@
|
||||||
class ShanaprojectBridge extends BridgeAbstract {
|
class ShanaprojectBridge extends BridgeAbstract {
|
||||||
const MAINTAINER = 'logmanoriginal';
|
const MAINTAINER = 'logmanoriginal';
|
||||||
const NAME = 'Shanaproject Bridge';
|
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';
|
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)
|
// Returns an html object for the Season Anime List (latest season)
|
||||||
private function loadSeasonAnimeList(){
|
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);
|
$html = getSimpleHTMLDOM(self::URI . '/seasons')
|
||||||
if(!$season)
|
or returnServerError('Could not load \'seasons\' page!');
|
||||||
returnServerError('Could not find \'Season Anime List\'!');
|
|
||||||
|
|
||||||
$html = getSimpleHTMLDOM($this->getURI() . $season->href);
|
$html = defaultLinkTo($html, self::URI . '/seasons');
|
||||||
if(!$html)
|
|
||||||
returnServerError(
|
$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 \''
|
'Could not load \'Season Anime List\' from \''
|
||||||
. $season->innertext
|
. $season->innertext
|
||||||
. '\'!'
|
. '\'!'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$html = defaultLinkTo($html, $season->href);
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extracts the anime title
|
// Extracts the anime title
|
||||||
private function extractAnimeTitle($anime){
|
private function extractAnimeTitle($anime){
|
||||||
$title = $anime->find('a', 0);
|
$title = $anime->find('a', 0)
|
||||||
if(!$title)
|
or returnServerError('Could not find anime title!');
|
||||||
returnServerError('Could not find anime title!');
|
|
||||||
return trim($title->innertext);
|
return trim($title->innertext);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extracts the anime URI
|
// Extracts the anime URI
|
||||||
private function extractAnimeUri($anime){
|
private function extractAnimeUri($anime){
|
||||||
$uri = $anime->find('a', 0);
|
$uri = $anime->find('a', 0)
|
||||||
if(!$uri)
|
or returnServerError('Could not find anime URI!');
|
||||||
returnServerError('Could not find anime URI!');
|
return $uri->href;
|
||||||
return $this->getURI() . $uri->href;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extracts the anime release date (timestamp)
|
// Extracts the anime release date (timestamp)
|
||||||
private function extractAnimeTimestamp($anime){
|
private function extractAnimeTimestamp($anime){
|
||||||
$timestamp = $anime->find('span.header_info_block', 1);
|
$timestamp = $anime->find('span.header_info_block', 1);
|
||||||
if(!$timestamp)
|
|
||||||
|
if(!$timestamp) {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return strtotime($timestamp->innertext);
|
return strtotime($timestamp->innertext);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extracts the anime studio name (author)
|
// Extracts the anime studio name (author)
|
||||||
private function extractAnimeAuthor($anime){
|
private function extractAnimeAuthor($anime){
|
||||||
$author = $anime->find('span.header_info_block', 2);
|
$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);
|
return trim($author->innertext);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extracts the episode information (x of y released)
|
// Extracts the episode information (x of y released)
|
||||||
private function extractAnimeEpisodeInformation($anime){
|
private function extractAnimeEpisodeInformation($anime){
|
||||||
$episode = $anime->find('div.header_info_episode', 0);
|
$episode = $anime->find('div.header_info_episode', 0)
|
||||||
if(!$episode)
|
or returnServerError('Could not find anime episode information!');
|
||||||
returnServerError('Could not find anime episode information!');
|
|
||||||
return preg_replace('/\r|\n/', ' ', $episode->plaintext);
|
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.
|
// Getting the picture is a little bit tricky as it is part of the style.
|
||||||
// Luckily the style is part of the parent div :)
|
// 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];
|
return $matches[1];
|
||||||
|
}
|
||||||
|
|
||||||
returnServerError('Could not extract background image!');
|
returnServerError('Could not extract background image!');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Builds an URI to search for a specific anime (subber is left empty)
|
// Builds an URI to search for a specific anime (subber is left empty)
|
||||||
private function buildAnimeSearchUri($anime){
|
private function buildAnimeSearchUri($anime){
|
||||||
return $this->getURI()
|
return self::URI
|
||||||
. '/search/?title='
|
. '/search/?title='
|
||||||
. urlencode($this->extractAnimeTitle($anime))
|
. urlencode($this->extractAnimeTitle($anime))
|
||||||
. '&subber=';
|
. '&subber=';
|
||||||
|
@ -102,22 +124,4 @@ class ShanaprojectBridge extends BridgeAbstract {
|
||||||
. $this->buildAnimeSearchUri($anime)
|
. $this->buildAnimeSearchUri($anime)
|
||||||
. '">Search episodes</a></p>';
|
. '">Search episodes</a></p>';
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue