[NovelUpdatesBridge] use 'name' parameter instead of full URI
This breaks compatibility with previous versions of NoveUpdatesBridge. Bridges should never use full URIs as inputs since their validation will always be more complicated, hence prone to security issues, than rebuilding a clean URI from simple validated inputs. Signed-off-by: Pierre Mazière <pierre.maziere@gmx.com>
This commit is contained in:
parent
d60220769e
commit
0c139941d9
1 changed files with 16 additions and 13 deletions
|
@ -7,23 +7,22 @@ class NovelUpdatesBridge extends BridgeAbstract{
|
||||||
const DESCRIPTION = "Returns releases from Novel Updates";
|
const DESCRIPTION = "Returns releases from Novel Updates";
|
||||||
const PARAMETERS = array( array(
|
const PARAMETERS = array( array(
|
||||||
'n'=>array(
|
'n'=>array(
|
||||||
'name'=>'Novel URL',
|
'name'=>'Novel name as found in the url',
|
||||||
'patterns'=>'http:\/\/www.novelupdates.com\/.*',
|
'exampleValue'=>'spirit-realm',
|
||||||
'required'=>true
|
'required'=>true
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
private $seriesTitle='';
|
private $seriesTitle='';
|
||||||
|
|
||||||
|
public function getURI(){
|
||||||
|
return static::URI.'/series/'.$this->getInput('n').'/';
|
||||||
|
}
|
||||||
|
|
||||||
public function collectData(){
|
public function collectData(){
|
||||||
$thread = parse_url($this->getInput('n'))
|
$fullhtml = $this->getSimpleHTMLDOM($this->getURI())
|
||||||
or $this->returnClientError('This URL seems malformed, please check it.');
|
or $this->returnServerError('Could not request NovelUpdates, novel "'.$this->getInput('n').'" not found');
|
||||||
if($thread['host'] !== 'www.novelupdates.com')
|
|
||||||
$this->returnClientError('NovelUpdates URL only.');
|
|
||||||
if(strpos($thread['path'], 'series/') === FALSE)
|
|
||||||
$this->returnClientError('You must specify the novel URL.');
|
|
||||||
$url = self::URI.$thread['path'].'';
|
|
||||||
$fullhtml = $this->getSimpleHTMLDOM($url) or $this->returnServerError("Could not request NovelUpdates, novel not found");
|
|
||||||
$this->seriesTitle = $fullhtml->find('h4.seriestitle', 0)->plaintext;
|
$this->seriesTitle = $fullhtml->find('h4.seriestitle', 0)->plaintext;
|
||||||
// dirty fix for nasty simpledom bug: https://github.com/sebsauvage/rss-bridge/issues/259
|
// dirty fix for nasty simpledom bug: https://github.com/sebsauvage/rss-bridge/issues/259
|
||||||
// forcefully removes tbody
|
// forcefully removes tbody
|
||||||
|
@ -37,13 +36,17 @@ class NovelUpdatesBridge extends BridgeAbstract{
|
||||||
$item['title'] = $element->find('td', 2)->find('a', 0)->plaintext;
|
$item['title'] = $element->find('td', 2)->find('a', 0)->plaintext;
|
||||||
$item['team'] = $element->find('td', 1)->innertext;
|
$item['team'] = $element->find('td', 1)->innertext;
|
||||||
$item['timestamp'] = strtotime($element->find('td', 0)->plaintext);
|
$item['timestamp'] = strtotime($element->find('td', 0)->plaintext);
|
||||||
$item['content'] = '<a href="'.$item['uri'].'">'.$this->seriesTitle.' - '.$item['title'].'</a> by '.$item['team'].'<br><a href="'.$item['uri'].'">'.$fullhtml->find('div.seriesimg', 0)->innertext.'</a>';
|
$item['content'] =
|
||||||
|
'<a href="'.$item['uri'].'">'
|
||||||
|
.$this->seriesTitle.' - '.$item['title']
|
||||||
|
.'</a> by '.$item['team'].'<br>'
|
||||||
|
.'<a href="'.$item['uri'].'">'.$fullhtml->find('div.seriesimg', 0)->innertext.'</a>';
|
||||||
$this->items[] = $item;
|
$this->items[] = $item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName(){
|
public function getName(){
|
||||||
return (!empty($this->seriesTitle) ? $this->seriesTitle.' - ' : '') .'Novel Updates';
|
return $this->seriesTitle. ' - ' . static::NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCacheDuration(){
|
public function getCacheDuration(){
|
||||||
|
|
Loading…
Reference in a new issue