forked from blallo/rss-bridge
6f24858124
This commit is a squash of all commits that fix coding styles for the new coding style policy. [ABCTabsBridge] Fix coding style [AcrimedBridge] Fix coding style [AllocineFRBridge] Fix coding style [AnimeUltimeBridge] Fix coding style [Arte7Bridge] Fix coding style [AskfmBridge] Fix coding style [BandcampBridge] Fix coding style [BastaBridge] Fix coding style [BlaguesDeMerdeBridge] Fix coding style [BooruprojectBridge] Fix coding style [CADBridge] Fix coding style [CNETBridge] Fix coding style [CastorusBridge] Fix coding style [CollegeDeFranceBridge] Fix coding style [CommonDreamsBridge] Fix coding style [CopieDoubleBridge] Fix coding style [CourrierInternationalBridge] Fix coding style [CpasbienBridge] Fix coding style [CryptomeBridge] Fix coding style [DailymotionBridge] Fix coding style [DanbooruBridge] Fix coding style [DansTonChatBridge] Fix coding style [DauphineLibereBridge] Fix coding style [DeveloppezDotComBridge] Fix coding style [DemoBridge] Fix coding style [DilbertBridge] Fix coding style [DuckDuckGoBridge] Fix coding style [DollbooruBridge] Fix coding style [EliteDangerousGalnetBridge] Fix coding style [ElsevierBridge] Fix coding style [EstCeQuonMetEnProdBridge] Fix coding style [EZTVBridge] Fix coding style [FacebookBridge] Fix coding style [FeedExpanderExampleBridge] Fix coding style [FB2Bridge] Fix coding style [FierPandaBridge] Fix coding style [FlickrBridge] Fix coding style [FootitoBridge] Fix coding style [FourchanBridge] Fix coding style [FuturaSciencesBridge] Fix coding style [GBAtempBridge] Fix coding style [GelbooruBridge] Fix coding style [GiphyBridge] Fix coding style [GithubIssueBridge] Fix coding style [GizmodoBridge] Fix coding style [GoComicsBridge] Fix coding style [GooglePlusPostBridge] Fix coding style [GoogleSearchBridge] Fix coding style [HDWallpapersBridge] Fix coding style [HentaiHavenBridge] Fix coding style [IdenticaBridge] Fix coding style [InstagramBridge] Fix coding style [IsoHuntBridge] Fix coding style [JapanExpoBridge] Fix coding style [KonachanBridge] Fix coding style [KoreusBridge] Fix coding style [KununuBridge] Fix coding style [LeBonCoinBridge] Fix coding style [LegifranceJOBBridge] Fix coding style [LeMondeInformatiqueBridge] Fix coding style [LesJoiesDuCodeBridge] Fix coding style [LichessBridge] Fix coding style [LinkedInCompanyBridge] Fix coding style [LolibooruBridge] Fix coding style [LWNprevBridge] Fix coding style [MangareaderBridge] Fix coding style [MilbooruBridge] Fix coding style [MixCloudBridge] Fix coding style [MoebooruBridge] Fix coding style [MondeDiploBridge] Fix coding style [MsnMondeBridge] Fix coding style [MspabooruBridge] Fix coding style [NasaApodBridge] Fix coding style [NeuviemeArtBridge] Fix coding style [NextgovBridge] Fix coding style [NextInpactBridge] Fix coding style [NiceMatinBridge] Fix coding style [NovelUpdatesBridge] Fix coding style [OpenClassroomsBridge] Fix coding style [ParuVenduImmoBridge] Fix coding style [PickyWallpapersBridge] Fix coding style [PinterestBridge] Fix coding style [PlanetLibreBridge] Fix coding style [ReadComicsBridge] Fix coding style [Releases3DSBridge] Fix coding style [ReporterreBridge] Fix coding style [RTBFBridge] Fix coding style [Rue89Bridge] Fix coding style [Rule34Bridge] Fix coding style [Rule34pahealBridge] Fix coding style [SafebooruBridge] Fix coding style [SakugabooruBridge] Fix coding style [ScmbBridge] Fix coding style [ScoopItBridge] Fix coding style [SensCritiqueBridge] Fix coding style [SexactuBridge] Fix coding style [ShanaprojectBridge] Fix coding style [Shimmie2Bridge] Fix coding style [SoundcloudBridge] Fix coding style [StripeAPIChangeLogBridge] Fix coding style [SuperbWallpapersBridge] Fix coding style [T411Bridge] Fix coding style [TagBoardBridge] Fix coding style [TbibBridge] Fix coding style [TheCodingLoveBridge] Fix coding style [TheHackerNewsBridge] Fix coding style [ThePirateBayBridge] Fix coding style [TheTVDBBridge] Fix coding style [Torrent9Bridge] Fix coding style [TwitterBridge] Fix coding style [UnsplashBridge] Fix coding style [ViadeoCompanyBridge] Fix coding style [VineBridge] Fix coding style [VkBridge] Fix coding style [WallpaperStopBridge] Fix coding style [WebfailBridge] Fix coding style [WeLiveSecurityBridge] Fix coding style [WhydBridge] Fix coding style [WikipediaBridge] Fix coding style [WordPressBridge] Fix coding style [WorldOfTanksBridge] Fix coding style [XbooruBridge] Fix coding style [YandereBridge] Fix coding style [YoutubeBridge] Fix coding style [ZDNetBridge] Fix coding style
123 lines
3.9 KiB
PHP
123 lines
3.9 KiB
PHP
<?php
|
|
class ShanaprojectBridge extends BridgeAbstract {
|
|
const MAINTAINER = 'logmanoriginal';
|
|
const NAME = 'Shanaproject Bridge';
|
|
const URI = 'http://www.shanaproject.com';
|
|
const 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 = 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($this->getURI() . $season->href);
|
|
if(!$html)
|
|
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)
|
|
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;
|
|
}
|
|
|
|
// Extracts the anime release date (timestamp)
|
|
private function extractAnimeTimestamp($anime){
|
|
$timestamp = $anime->find('span.header_info_block', 1);
|
|
if(!$timestamp)
|
|
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)
|
|
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];
|
|
|
|
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 '<a href="'
|
|
. $this->extractAnimeUri($anime)
|
|
. '"><img src="http://'
|
|
. $this->extractAnimeBackgroundImage($anime)
|
|
. '" alt="'
|
|
. htmlspecialchars($this->extractAnimeTitle($anime))
|
|
. '" style="border: 1px solid black"></a><br><p>'
|
|
. $this->extractAnimeEpisodeInformation($anime)
|
|
. '</p><br><p><a href="'
|
|
. $this->buildAnimeSearchUri($anime)
|
|
. '">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;
|
|
}
|
|
}
|
|
}
|