mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-04-23 06:56:53 +00:00
Create KATBridge.php
Hi, I've created a bridge for KickassTorrents. It's mainly based on ThePirateBay bridge so a huge thanks to @mitsukarenai This bridge have the same abilities: search terms (global or in category), categories, users, restrict results to trusted users. I've tried to test it thoroughly and everything is working for me. I'm sure there is space for improvements and I'd gladly welcome any idea! I have a concern about file size which are frequently reported on torrent site rss. I've added it to the description but it could be useful to add <size> or <length> tag. Thanks again for RSSBridge, I'm loving it!
This commit is contained in:
parent
1a4c3f4418
commit
ea81b5039f
124
bridges/KATBridge.php
Normal file
124
bridges/KATBridge.php
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<?php
|
||||||
|
class KATBridge extends BridgeAbstract {
|
||||||
|
const MAINTAINER = 'niawag';
|
||||||
|
const NAME = 'KickassTorrents';
|
||||||
|
const URI = 'https://katcr.co/new/';
|
||||||
|
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 ID: see KAT URL for user feed. Search can be done in a specified category';
|
||||||
|
|
||||||
|
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'
|
||||||
|
)
|
||||||
|
),
|
||||||
|
'cat_check' => array(
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'name' => 'Specify category for normal search ?',
|
||||||
|
),
|
||||||
|
'cat' => array(
|
||||||
|
'name' => 'Category number',
|
||||||
|
'exampleValue' => '100, 200… See KAT for category number'
|
||||||
|
),
|
||||||
|
'trusted' => array(
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'name' => 'Only get results from Elite or Verified uploaders ?',
|
||||||
|
),
|
||||||
|
));
|
||||||
|
public function collectData(){
|
||||||
|
function parseDateTimestamp($element){
|
||||||
|
$guessedDate = strptime($element, '%d-%m-%Y %H:%M:%S');
|
||||||
|
$timestamp = mktime(
|
||||||
|
$guessedDate['tm_hour'],
|
||||||
|
$guessedDate['tm_min'],
|
||||||
|
$guessedDate['tm_sec'],
|
||||||
|
$guessedDate['tm_mon'] + 1,
|
||||||
|
$guessedDate['tm_mday'],
|
||||||
|
$guessedDate['tm_year'] + 1900);
|
||||||
|
return $timestamp;
|
||||||
|
}
|
||||||
|
$catBool = $this->getInput('cat_check');
|
||||||
|
if($catBool){
|
||||||
|
$catNum = $this->getInput('cat');
|
||||||
|
}
|
||||||
|
$critList = $this->getInput('crit');
|
||||||
|
$trustedBool = $this->getInput('trusted');
|
||||||
|
$keywordsList = explode(';', $this->getInput('q'));
|
||||||
|
foreach($keywordsList as $keywords){
|
||||||
|
switch($critList){
|
||||||
|
case 'search':
|
||||||
|
if($catBool == false){
|
||||||
|
$html = getSimpleHTMLDOM(
|
||||||
|
self::URI .
|
||||||
|
'torrents-search.php?search=' .
|
||||||
|
rawurlencode($keywords)
|
||||||
|
) or returnServerError('Could not request KAT.');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$html = getSimpleHTMLDOM(
|
||||||
|
self::URI .
|
||||||
|
'torrents-search.php?search=' .
|
||||||
|
rawurlencode($keywords) .
|
||||||
|
'&cat=' .
|
||||||
|
rawurlencode($catNum)
|
||||||
|
) or returnServerError('Could not request KAT.');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'cat':
|
||||||
|
$html = getSimpleHTMLDOM(
|
||||||
|
self::URI .
|
||||||
|
'torrents.php?cat=' .
|
||||||
|
rawurlencode($keywords)
|
||||||
|
) or returnServerError('Could not request KAT.');
|
||||||
|
break;
|
||||||
|
case 'usr':
|
||||||
|
$html = getSimpleHTMLDOM(
|
||||||
|
self::URI .
|
||||||
|
'account-details.php?id=' .
|
||||||
|
rawurlencode($keywords)
|
||||||
|
) or returnServerError('Could not request KAT.');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ($html->find('table.ttable_headinner', 0) == false)
|
||||||
|
returnServerError('No result for query ' . $keywords);
|
||||||
|
foreach($html->find('tr.t-row') as $element){
|
||||||
|
if(!$trustedBool
|
||||||
|
|| !is_null($element->find('i[title="Elite Uploader"]', 0))
|
||||||
|
|| !is_null($element->find('i[title="Verified Uploader"]', 0))){
|
||||||
|
$item = array();
|
||||||
|
$item['uri'] = self::URI . $element->find('a', 2)->href;
|
||||||
|
$item['id'] = self::URI . $element->find('a.cellMainLink', 0)->href;
|
||||||
|
$item['timestamp'] = parseDateTimestamp($element->find('td', 2)->plaintext);
|
||||||
|
$item['author'] = $element->find('a.plain', 0)->plaintext;
|
||||||
|
$item['title'] = $element->find('a.cellMainLink', 0)->plaintext;
|
||||||
|
$item['seeders'] = (int)$element->find('td', 3)->plaintext;
|
||||||
|
$item['leechers'] = (int)$element->find('td', 4)->plaintext;
|
||||||
|
$item['size'] = $element->find('td', 1)->plaintext;
|
||||||
|
$item['content'] = $item['title']
|
||||||
|
. '<br>size: '
|
||||||
|
. $item['size']
|
||||||
|
. '<br>seeders: '
|
||||||
|
. $item['seeders']
|
||||||
|
. ' | leechers: '
|
||||||
|
. $item['leechers']
|
||||||
|
. '<br><a href="'
|
||||||
|
. $item['id']
|
||||||
|
. '">info page</a>';
|
||||||
|
if(isset($item['title']))
|
||||||
|
$this->items[] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user