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
157 lines
5 KiB
PHP
157 lines
5 KiB
PHP
<?php
|
|
class GBAtempBridge extends BridgeAbstract {
|
|
|
|
const MAINTAINER = 'ORelio';
|
|
const NAME = 'GBAtemp';
|
|
const URI = 'http://gbatemp.net/';
|
|
const DESCRIPTION = 'GBAtemp is a user friendly underground video game community.';
|
|
|
|
const PARAMETERS = array( array(
|
|
'type' => array(
|
|
'name' => 'Type',
|
|
'type' => 'list',
|
|
'required' => true,
|
|
'values' => array(
|
|
'News' => 'N',
|
|
'Reviews' => 'R',
|
|
'Tutorials' => 'T',
|
|
'Forum' => 'F'
|
|
)
|
|
)
|
|
));
|
|
|
|
private function extractFromDelimiters($string, $start, $end){
|
|
if(strpos($string, $start) !== false){
|
|
$section_retrieved = substr($string, strpos($string, $start) + strlen($start));
|
|
$section_retrieved = substr($section_retrieved, 0, strpos($section_retrieved, $end));
|
|
return $section_retrieved;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private function stripWithDelimiters($string, $start, $end){
|
|
while(strpos($string, $start) !== false){
|
|
$section_to_remove = substr($string, strpos($string, $start));
|
|
$section_to_remove = substr($section_to_remove, 0, strpos($section_to_remove, $end) + strlen($end));
|
|
$string = str_replace($section_to_remove, '', $string);
|
|
}
|
|
|
|
return $string;
|
|
}
|
|
|
|
private function buildItem($uri, $title, $author, $timestamp, $content){
|
|
$item = array();
|
|
$item['uri'] = $uri;
|
|
$item['title'] = $title;
|
|
$item['author'] = $author;
|
|
$item['timestamp'] = $timestamp;
|
|
$item['content'] = $content;
|
|
return $item;
|
|
}
|
|
|
|
private function cleanupPostContent($content, $site_url){
|
|
$content = str_replace(':arrow:', '➤', $content);
|
|
$content = str_replace('href="attachments/', 'href="'.$site_url.'attachments/', $content);
|
|
$content = $this->stripWithDelimiters($content, '<script', '</script>');
|
|
return $content;
|
|
}
|
|
|
|
private function fetchPostContent($uri, $site_url){
|
|
$html = getSimpleHTMLDOM($uri);
|
|
if(!$html){
|
|
return 'Could not request GBAtemp ' . $uri;
|
|
}
|
|
|
|
$content = $html->find('div.messageContent', 0)->innertext;
|
|
return $this->cleanupPostContent($content, $site_url);
|
|
}
|
|
|
|
public function collectData(){
|
|
|
|
$html = getSimpleHTMLDOM(self::URI)
|
|
or returnServerError('Could not request GBAtemp.');
|
|
|
|
switch($this->getInput('type')){
|
|
case 'N':
|
|
foreach($html->find('li[class=news_item full]') as $newsItem){
|
|
$url = self::URI . $newsItem->find('a', 0)->href;
|
|
$time = intval(
|
|
$this->extractFromDelimiters(
|
|
$newsItem->find('abbr.DateTime', 0)->outertext,
|
|
'data-time="',
|
|
'"'
|
|
)
|
|
);
|
|
$author = $newsItem->find('a.username', 0)->plaintext;
|
|
$title = $newsItem->find('a', 1)->plaintext;
|
|
$content = $this->fetchPostContent($url, self::URI);
|
|
$this->items[] = $this->buildItem($url, $title, $author, $time, $content);
|
|
}
|
|
case 'R':
|
|
foreach($html->find('li.portal_review') as $reviewItem){
|
|
$url = self::URI . $reviewItem->find('a', 0)->href;
|
|
$title = $reviewItem->find('span.review_title', 0)->plaintext;
|
|
$content = getSimpleHTMLDOM($url)
|
|
or returnServerError('Could not request GBAtemp: ' . $uri);
|
|
$author = $content->find('a.username', 0)->plaintext;
|
|
$time = intval(
|
|
$this->extractFromDelimiters(
|
|
$content->find('abbr.DateTime', 0)->outertext,
|
|
'data-time="',
|
|
'"'
|
|
)
|
|
);
|
|
$intro = '<p><b>' . ($content->find('div#review_intro', 0)->plaintext) . '</b></p>';
|
|
$review = $content->find('div#review_main', 0)->innertext;
|
|
$subheader = '<p><b>' . $content->find('div.review_subheader', 0)->plaintext . '</b></p>';
|
|
$procons = $content->find('table.review_procons', 0)->outertext;
|
|
$scores = $content->find('table.reviewscores', 0)->outertext;
|
|
$content = $this->cleanupPostContent($intro . $review . $subheader . $procons . $scores, self::URI);
|
|
$this->items[] = $this->buildItem($url, $title, $author, $time, $content);
|
|
}
|
|
case 'T':
|
|
foreach($html->find('li.portal-tutorial') as $tutorialItem){
|
|
$url = self::URI . $tutorialItem->find('a', 0)->href;
|
|
$title = $tutorialItem->find('a', 0)->plaintext;
|
|
$time = intval(
|
|
$this->extractFromDelimiters(
|
|
$tutorialItem->find('abbr.DateTime', 0)->outertext,
|
|
'data-time="',
|
|
'"'
|
|
)
|
|
);
|
|
$author = $tutorialItem->find('a.username', 0)->plaintext;
|
|
$content = $this->fetchPostContent($url, self::URI);
|
|
$this->items[] = $this->buildItem($url, $title, $author, $time, $content);
|
|
}
|
|
case 'F':
|
|
foreach($html->find('li.rc_item') as $postItem){
|
|
$url = self::URI . $postItem->find('a', 1)->href;
|
|
$title = $postItem->find('a', 1)->plaintext;
|
|
$time = intval(
|
|
$this->extractFromDelimiters(
|
|
$postItem->find('abbr.DateTime', 0)->outertext,
|
|
'data-time="',
|
|
'"'
|
|
)
|
|
);
|
|
$author = $postItem->find('a.username', 0)->plaintext;
|
|
$content = $this->fetchPostContent($url, self::URI);
|
|
$this->items[] = $this->buildItem($url, $title, $author, $time, $content);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getName() {
|
|
if(!is_null($this->getInput('type'))){
|
|
$type = array_search(
|
|
$this->getInput('type'),
|
|
self::PARAMETERS[$this->queriedContext]['type']['values']
|
|
);
|
|
return 'GBAtemp ' . $type . ' Bridge';
|
|
}
|
|
|
|
return parent::getName();
|
|
}
|
|
}
|