From b50652e6ac2772450fdedbe66f60ae2ea4c5ecec Mon Sep 17 00:00:00 2001 From: niawag Date: Fri, 30 Sep 2016 11:07:43 +0200 Subject: [PATCH 1/2] Add category and uploader feed I made some changes to returne category and uploader feed. I also changed the URI to the magnet link to be able to use the feed in a torrent client. As discussed here (https://github.com/RSS-Bridge/rss-bridge/issues/412), I'd rather use the item but it's not possible with RSS-Bridge ATM. If I find time to work on it I'll try to add combination possibilities: search term in a certain category or for a specific uploader Hope my changes will be appreciated! --- bridges/ThePirateBayBridge.php | 37 +++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/bridges/ThePirateBayBridge.php b/bridges/ThePirateBayBridge.php index 3fe61de9..ba957730 100644 --- a/bridges/ThePirateBayBridge.php +++ b/bridges/ThePirateBayBridge.php @@ -4,14 +4,23 @@ class ThePirateBayBridge extends BridgeAbstract{ const MAINTAINER = "mitsukarenai"; const NAME = "The Pirate Bay"; const URI = "https://thepiratebay.org/"; - const DESCRIPTION = "Returns results for the keywords. You can put several list of keywords by separating them with a semicolon (e.g. \"one show;another show\")"; + const DESCRIPTION = "Returns results for the keywords. You can put several list of keywords by separating them with a semicolon (e.g. \"one show;another show\"). Category based search needs the category number as input. User based search takes the Uploader name"; const PARAMETERS = array( array( 'q'=>array( 'name'=>'keywords, separated by semicolons', 'exampleValue'=>'first list;second list;…', 'required'=>true - ) + ), + 'crit'=>array( + 'type'=>'list', + 'name'=>'Search type', + 'values'=>array( + 'search'=>'search', + 'category'=>'cat', + 'user'=>'usr' + ) + ), )); public function collectData(){ @@ -49,11 +58,24 @@ class ThePirateBayBridge extends BridgeAbstract{ return $timestamp; } - + $critList = $this->getInput('crit'); $keywordsList = explode(";",$this->getInput('q')); foreach($keywordsList as $keywords){ - $html = $this->getSimpleHTMLDOM(self::URI.'search/'.rawurlencode($keywords).'/0/3/0') - or $this->returnServerError('Could not request TPB.'); + switch ($critList) { + case "search": + $html = $this->getSimpleHTMLDOM(self::URI.'search/'.rawurlencode($keywords).'/0/3/0') + or $this->returnServerError('Could not request TPB.'); + break; + case "cat": + $html = $this->getSimpleHTMLDOM(self::URI.'browse/'.rawurlencode($keywords).'/0/3/0') + or $this->returnServerError('Could not request TPB.'); + break; + case "usr": + $html = $this->getSimpleHTMLDOM(self::URI.'user/'.rawurlencode($keywords).'/0/3/0') + or $this->returnServerError('Could not request TPB.'); + break; + } + if ($html->find('table#searchResult', 0) == FALSE) $this->returnServerError('No result for query '.$keywords); @@ -61,9 +83,10 @@ class ThePirateBayBridge extends BridgeAbstract{ foreach($html->find('tr') as $element) { $item = array(); - $item['uri'] = self::URI.$element->find('a.detLink',0)->href; - $item['id'] = $item['uri']; + $item['uri'] = $element->find('a',3)->href; + $item['id'] = self::URI.$element->find('a.detLink',0)->href; $item['timestamp'] = parseDateTimestamp($element); + $item['author'] = $element->find('a.detDesc',0)->plaintext; $item['title'] = $element->find('a.detLink',0)->plaintext; $item['seeders'] = (int)$element->find('td',2)->plaintext; $item['leechers'] = (int)$element->find('td',3)->plaintext; From a4db8dc4959ee5e6ebcf08f052dc15d85bebf6f0 Mon Sep 17 00:00:00 2001 From: niawag Date: Sun, 2 Oct 2016 15:09:51 +0200 Subject: [PATCH 2/2] Add user feed, category feed and search in category feed I tested it and everything is working, I incorporated the changes suggested by mitsukarenai, thank a lot! --- bridges/ThePirateBayBridge.php | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/bridges/ThePirateBayBridge.php b/bridges/ThePirateBayBridge.php index ba957730..33f5af86 100644 --- a/bridges/ThePirateBayBridge.php +++ b/bridges/ThePirateBayBridge.php @@ -4,7 +4,7 @@ class ThePirateBayBridge extends BridgeAbstract{ const MAINTAINER = "mitsukarenai"; const NAME = "The Pirate Bay"; const URI = "https://thepiratebay.org/"; - const DESCRIPTION = "Returns results for the keywords. You can put several list of keywords by separating them with a semicolon (e.g. \"one show;another show\"). Category based search needs the category number as input. User based search takes the Uploader name"; + const DESCRIPTION = "Returns results for the keywords. You can put several list of keywords by separating them with a semicolon (e.g. \"one show;another show\"). Category based search needs the category number as input. User based search takes the Uploader name. Search can be done in a specified category"; const PARAMETERS = array( array( 'q'=>array( @@ -21,6 +21,14 @@ class ThePirateBayBridge extends BridgeAbstract{ 'user'=>'usr' ) ), + 'cat_check'=>array( + 'type'=>'checkbox', + 'name'=>'Specify category for normal search ?', + ), + 'cat'=>array( + 'name'=>'Category number', + 'exampleValue'=>'100, 200… See TPB for category number' + ), )); public function collectData(){ @@ -58,13 +66,26 @@ class ThePirateBayBridge extends BridgeAbstract{ return $timestamp; } + $catBool = $this->getInput('cat_check'); + if ($catBool) + { + $catNum = $this->getInput('cat'); + } $critList = $this->getInput('crit'); $keywordsList = explode(";",$this->getInput('q')); foreach($keywordsList as $keywords){ switch ($critList) { case "search": - $html = $this->getSimpleHTMLDOM(self::URI.'search/'.rawurlencode($keywords).'/0/3/0') - or $this->returnServerError('Could not request TPB.'); + if ($catBool == FALSE) + { + $html = $this->getSimpleHTMLDOM(self::URI.'search/'.rawurlencode($keywords).'/0/3/0') + or $this->returnServerError('Could not request TPB.'); + } + else + { + $html = $this->getSimpleHTMLDOM(self::URI.'search/'.rawurlencode($keywords).'/0/3/'.rawurlencode($catNum)) + or $this->returnServerError('Could not request TPB.'); + } break; case "cat": $html = $this->getSimpleHTMLDOM(self::URI.'browse/'.rawurlencode($keywords).'/0/3/0') @@ -90,7 +111,7 @@ class ThePirateBayBridge extends BridgeAbstract{ $item['title'] = $element->find('a.detLink',0)->plaintext; $item['seeders'] = (int)$element->find('td',2)->plaintext; $item['leechers'] = (int)$element->find('td',3)->plaintext; - $item['content'] = $element->find('font',0)->plaintext.'
seeders: '.$item['seeders'].' | leechers: '.$item['leechers'].'
download'; + $item['content'] = $element->find('font',0)->plaintext.'
seeders: '.$item['seeders'].' | leechers: '.$item['leechers'].'
info page'; if(isset($item['title'])) $this->items[] = $item; }