forked from blallo/rss-bridge
Merge pull request #219 from ORelio/master
Improve Dilbert, Add GBAtemp
This commit is contained in:
commit
11336bc109
2 changed files with 194 additions and 24 deletions
|
@ -1,45 +1,58 @@
|
||||||
<?php
|
<?php
|
||||||
class DilbertBridge extends BridgeAbstract{
|
class DilbertBridge extends BridgeAbstract {
|
||||||
|
|
||||||
public function loadMetadatas() {
|
public function loadMetadatas() {
|
||||||
|
|
||||||
$this->maintainer = "kranack";
|
$this->maintainer = "kranack";
|
||||||
$this->name = "Dilbert Daily Strip";
|
$this->name = "Dilbert Daily Strip";
|
||||||
$this->uri = "http://dilbert.com/strips/";
|
$this->uri = "http://dilbert.com/";
|
||||||
$this->description = "The Unofficial Dilbert Daily Comic Strip";
|
$this->description = "The Unofficial Dilbert Daily Comic Strip";
|
||||||
$this->update = "30/01/2015";
|
$this->update = "14/02/2016";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function collectData(array $param){
|
public function collectData(array $param) {
|
||||||
$html = file_get_html('http://dilbert.com/strips/') or $this->returnError('Could not request Dilbert.', 404);
|
|
||||||
|
|
||||||
foreach($html->find('section.comic-item') as $element) {
|
$html = file_get_html('http://dilbert.com/') or $this->returnError('Could not request Dilbert.', 500);
|
||||||
$comic = $element->find('img', 0);
|
|
||||||
|
|
||||||
$item = new Item();
|
foreach ($html->find('section.comic-item') as $element) {
|
||||||
$item->uri = $element->find('a',0)->href;
|
|
||||||
$item->content = '<img src="'. $comic->src . '" alt="' . $comic->alt . '" />';
|
$img = $element->find('img', 0);
|
||||||
$item->title = $comic->alt;
|
$comic = $img->src;
|
||||||
$item->timestamp = strtotime($element->find('h3', 0)->plaintext);
|
$title = $img->alt;
|
||||||
|
$url = $element->find('a', 0)->href;
|
||||||
|
$author = trim(substr($title, strpos($title, ' - Dilbert by ') + 14));
|
||||||
|
$title = trim(substr($title, 0, strpos($title, ' - ')));
|
||||||
|
$date = substr($url, 25);
|
||||||
|
if (empty($title))
|
||||||
|
$title = "Dilbert Comic Strip on ".$date;
|
||||||
|
$date = strtotime($date);
|
||||||
|
|
||||||
|
$item = new \Item();
|
||||||
|
$item->uri = $url;
|
||||||
|
$item->thumbnailUri = $comic;
|
||||||
|
$item->title = $title;
|
||||||
|
$item->author = $author;
|
||||||
|
$item->timestamp = $date;
|
||||||
|
$item->content = '<img src="'.$comic.'" alt="'.$title.'" />';
|
||||||
$this->items[] = $item;
|
$this->items[] = $item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName(){
|
public function getName() {
|
||||||
return 'Dilbert';
|
return 'Dilbert Bridge';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getURI(){
|
public function getURI() {
|
||||||
return 'http://dilbert.com';
|
return 'http://dilbert.com';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDescription(){
|
public function getDescription() {
|
||||||
return 'Dilbert via rss-bridge';
|
return 'Dilbert Daily Strip Bridge';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCacheDuration(){
|
public function getCacheDuration() {
|
||||||
return 14400; // 4 hours
|
return 21600; // 6 hours
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
157
bridges/GBAtempBridge.php
Normal file
157
bridges/GBAtempBridge.php
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
<?php
|
||||||
|
class GBAtempBridge extends BridgeAbstract {
|
||||||
|
|
||||||
|
private $filter = '';
|
||||||
|
|
||||||
|
public function loadMetadatas() {
|
||||||
|
|
||||||
|
$this->maintainer = 'ORelio';
|
||||||
|
$this->name = 'GBAtemp';
|
||||||
|
$this->uri = $this->getURI();
|
||||||
|
$this->description = 'GBAtemp is a user friendly underground video game community.';
|
||||||
|
$this->update = '2016-02-14';
|
||||||
|
|
||||||
|
$this->parameters[] =
|
||||||
|
'[
|
||||||
|
{
|
||||||
|
"name" : "Type",
|
||||||
|
"type" : "list",
|
||||||
|
"identifier" : "type",
|
||||||
|
"values" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name" : "News",
|
||||||
|
"value" : "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name" : "Reviews",
|
||||||
|
"value" : "R"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name" : "Tutorials",
|
||||||
|
"value" : "T"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name" : "Forum",
|
||||||
|
"value" : "F"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function collectData(array $param) {
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_item($uri, $title, $author, $timestamp, $thumnail, $content) {
|
||||||
|
$item = new \Item();
|
||||||
|
$item->uri = $uri;
|
||||||
|
$item->title = $title;
|
||||||
|
$item->author = $author;
|
||||||
|
$item->timestamp = $timestamp;
|
||||||
|
$item->thumbnailUri = $thumnail;
|
||||||
|
$item->content = $content;
|
||||||
|
return $item;
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup_post_content($content, $site_url) {
|
||||||
|
$content = str_replace(':arrow:', '➤', $content);
|
||||||
|
$content = str_replace('href="attachments/', 'href="'.$site_url.'attachments/', $content);
|
||||||
|
$content = StripWithDelimiters($content, '<script', '</script>');
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_post_content($uri, $site_url) {
|
||||||
|
$html = file_get_html($uri) or $this->returnError('Could not request GBAtemp: '.$uri, 500);
|
||||||
|
$content = $html->find('div.messageContent', 0)->innertext;
|
||||||
|
return cleanup_post_content($content, $site_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
$typeFilter = '';
|
||||||
|
if (!empty($param['type'])) {
|
||||||
|
if ($param['type'] == 'N' || $param['type'] == 'R' || $param['type'] == 'T' || $param['type'] == 'F') {
|
||||||
|
$typeFilter = $param['type'];
|
||||||
|
if ($typeFilter == 'N') { $this->filter = 'News'; }
|
||||||
|
if ($typeFilter == 'R') { $this->filter = 'Review'; }
|
||||||
|
if ($typeFilter == 'T') { $this->filter = 'Tutorial'; }
|
||||||
|
if ($typeFilter == 'F') { $this->filter = 'Forum'; }
|
||||||
|
} else $this->returnError('The provided type filter is invalid. Expecting N, R, T, or F.', 400);
|
||||||
|
} else $this->returnError('Please provide a type filter. Expecting N, R, T, or F.', 400);
|
||||||
|
|
||||||
|
$html = file_get_html($this->getURI()) or $this->returnError('Could not request GBAtemp.', 500);
|
||||||
|
|
||||||
|
if ($typeFilter == 'N') {
|
||||||
|
foreach ($html->find('li[class=news_item full]') as $newsItem) {
|
||||||
|
$url = $this->getURI().$newsItem->find('a', 0)->href;
|
||||||
|
$img = $this->getURI().$newsItem->find('img', 0)->src;
|
||||||
|
$time = intval(ExtractFromDelimiters($newsItem->find('abbr.DateTime', 0)->outertext, 'data-time="', '"'));
|
||||||
|
$author = $newsItem->find('a.username', 0)->plaintext;
|
||||||
|
$title = $newsItem->find('a', 1)->plaintext;
|
||||||
|
$content = fetch_post_content($url, $this->getURI());
|
||||||
|
$this->items[] = build_item($url, $title, $author, $time, $img, $content);
|
||||||
|
}
|
||||||
|
} else if ($typeFilter == 'R') {
|
||||||
|
foreach ($html->find('li.portal_review') as $reviewItem) {
|
||||||
|
$url = $this->getURI().$reviewItem->find('a', 0)->href;
|
||||||
|
$img = $this->getURI().ExtractFromDelimiters($reviewItem->find('a', 0)->style, 'image:url(', ')');
|
||||||
|
$title = $reviewItem->find('span.review_title', 0)->plaintext;
|
||||||
|
$content = file_get_html($url) or $this->returnError('Could not request GBAtemp: '.$uri, 500);
|
||||||
|
$author = $content->find('a.username', 0)->plaintext;
|
||||||
|
$time = intval(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 = cleanup_post_content($intro.$review.$subheader.$procons.$scores, $this->getURI());
|
||||||
|
$this->items[] = build_item($url, $title, $author, $time, $img, $content);
|
||||||
|
}
|
||||||
|
} else if ($typeFilter == 'T') {
|
||||||
|
foreach ($html->find('li.portal-tutorial') as $tutorialItem) {
|
||||||
|
$url = $this->getURI().$tutorialItem->find('a', 0)->href;
|
||||||
|
$title = $tutorialItem->find('a', 0)->plaintext;
|
||||||
|
$time = intval(ExtractFromDelimiters($tutorialItem->find('abbr.DateTime', 0)->outertext, 'data-time="', '"'));
|
||||||
|
$author = $tutorialItem->find('a.username', 0)->plaintext;
|
||||||
|
$content = fetch_post_content($url, $this->getURI());
|
||||||
|
$this->items[] = build_item($url, $title, $author, $time, '', $content);
|
||||||
|
}
|
||||||
|
} else if ($typeFilter == 'F') {
|
||||||
|
foreach ($html->find('li.rc_item') as $postItem) {
|
||||||
|
$url = $this->getURI().$postItem->find('a', 1)->href;
|
||||||
|
$title = $postItem->find('a', 1)->plaintext;
|
||||||
|
$time = intval(ExtractFromDelimiters($postItem->find('abbr.DateTime', 0)->outertext, 'data-time="', '"'));
|
||||||
|
$author = $postItem->find('a.username', 0)->plaintext;
|
||||||
|
$content = fetch_post_content($url, $this->getURI());
|
||||||
|
$this->items[] = build_item($url, $title, $author, $time, '', $content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName() {
|
||||||
|
return 'GBAtemp'.(empty($this->filter) ? '' : ' '.$this->filter).' Bridge';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getURI() {
|
||||||
|
return 'http://gbatemp.net/';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheDuration() {
|
||||||
|
return ($this->filter === 'Forum') ? 300 : 3600; // 5 minutes / 1 hour
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue