2014-05-26 19:45:10 +02:00
< ? php
class ThePirateBayBridge extends BridgeAbstract {
2016-08-30 11:23:55 +02:00
const MAINTAINER = " mitsukarenai " ;
const NAME = " The Pirate Bay " ;
const URI = " https://thepiratebay.org/ " ;
2016-10-02 15:09:51 +02:00
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 " ;
2015-11-05 16:50:18 +01:00
2016-08-30 11:23:55 +02:00
const PARAMETERS = array ( array (
2016-08-27 21:03:26 +02:00
'q' => array (
2016-08-22 01:25:56 +02:00
'name' => 'keywords, separated by semicolons' ,
2016-08-29 23:28:16 +02:00
'exampleValue' => 'first list;second list;…' ,
'required' => true
2016-09-30 11:07:43 +02:00
),
'crit' => array (
'type' => 'list' ,
'name' => 'Search type' ,
'values' => array (
'search' => 'search' ,
'category' => 'cat' ,
2016-10-02 16:05:58 +02:00
'user' => 'usr'
2016-09-30 11:07:43 +02:00
)
),
2016-10-02 15:09:51 +02:00
'cat_check' => array (
'type' => 'checkbox' ,
'name' => 'Specify category for normal search ?' ,
),
'cat' => array (
'name' => 'Category number' ,
'exampleValue' => '100, 200… See TPB for category number'
),
2016-08-27 21:03:26 +02:00
));
2015-11-05 16:50:18 +01:00
2016-08-25 01:24:53 +02:00
public function collectData (){
2014-05-26 19:45:10 +02:00
2014-12-08 19:39:57 +01:00
function parseDateTimestamp ( $element ){
$guessedDate = $element -> find ( 'font' , 0 ) -> plaintext ;
$guessedDate = explode ( " Uploaded " , $guessedDate )[ 1 ];
$guessedDate = explode ( " , " , $guessedDate )[ 0 ];
if ( count ( explode ( " : " , $guessedDate )) == 1 )
{
$guessedDate = strptime ( $guessedDate , '%m-%d %Y' );
$timestamp = mktime ( 0 , 0 , 0 ,
$guessedDate [ 'tm_mon' ] + 1 , $guessedDate [ 'tm_mday' ], 1900 + $guessedDate [ 'tm_year' ]);
}
else if ( explode ( " " , $guessedDate )[ 0 ] == 'Today' )
{
$guessedDate = strptime ( explode ( " " , $guessedDate )[ 1 ], '%H:%M' );
$timestamp = mktime ( $guessedDate [ 'tm_hour' ], $guessedDate [ 'tm_min' ], 0 ,
date ( 'm' ), date ( 'd' ), date ( 'Y' ));
}
else if ( explode ( " " , $guessedDate )[ 0 ] == 'Y-day' )
{
$guessedDate = strptime ( explode ( " " , $guessedDate )[ 1 ], '%H:%M' );
$timestamp = mktime ( $guessedDate [ 'tm_hour' ], $guessedDate [ 'tm_min' ], 0 ,
date ( 'm' , time () - 24 * 60 * 60 ), date ( 'd' , time () - 24 * 60 * 60 ), date ( 'Y' , time () - 24 * 60 * 60 ));
}
else
{
$guessedDate = strptime ( $guessedDate , '%m-%d %H:%M' );
$timestamp = mktime ( $guessedDate [ 'tm_hour' ], $guessedDate [ 'tm_min' ], 0 ,
$guessedDate [ 'tm_mon' ] + 1 , $guessedDate [ 'tm_mday' ], date ( 'Y' ));
}
return $timestamp ;
}
2016-10-02 15:09:51 +02:00
$catBool = $this -> getInput ( 'cat_check' );
if ( $catBool )
{
$catNum = $this -> getInput ( 'cat' );
2016-10-02 16:05:58 +02:00
}
2016-09-30 11:07:43 +02:00
$critList = $this -> getInput ( 'crit' );
2016-08-28 01:25:33 +02:00
$keywordsList = explode ( " ; " , $this -> getInput ( 'q' ));
2014-12-08 19:39:57 +01:00
foreach ( $keywordsList as $keywords ){
2016-09-30 11:07:43 +02:00
switch ( $critList ) {
case " search " :
2016-10-02 15:09:51 +02:00
if ( $catBool == FALSE )
{
2016-10-02 16:05:58 +02:00
$html = getSimpleHTMLDOM ( self :: URI . 'search/' . rawurlencode ( $keywords ) . '/0/3/0' )
or returnServerError ( 'Could not request TPB.' );
2016-10-02 15:09:51 +02:00
}
else
{
2016-10-02 16:05:58 +02:00
$html = getSimpleHTMLDOM ( self :: URI . 'search/' . rawurlencode ( $keywords ) . '/0/3/' . rawurlencode ( $catNum ))
or returnServerError ( 'Could not request TPB.' );
2016-10-02 15:09:51 +02:00
}
2016-09-30 11:07:43 +02:00
break ;
case " cat " :
2016-10-02 16:05:58 +02:00
$html = getSimpleHTMLDOM ( self :: URI . 'browse/' . rawurlencode ( $keywords ) . '/0/3/0' )
or returnServerError ( 'Could not request TPB.' );
2016-09-30 11:07:43 +02:00
break ;
case " usr " :
2016-10-02 16:05:58 +02:00
$html = getSimpleHTMLDOM ( self :: URI . 'user/' . rawurlencode ( $keywords ) . '/0/3/0' )
or returnServerError ( 'Could not request TPB.' );
2016-09-30 11:07:43 +02:00
break ;
}
2014-12-08 19:39:57 +01:00
if ( $html -> find ( 'table#searchResult' , 0 ) == FALSE )
2016-09-25 23:22:33 +02:00
returnServerError ( 'No result for query ' . $keywords );
2014-05-26 19:45:10 +02:00
2014-12-08 19:39:57 +01:00
foreach ( $html -> find ( 'tr' ) as $element ) {
2016-08-22 18:55:59 +02:00
$item = array ();
2016-10-02 16:05:58 +02:00
$item [ 'uri' ] = $element -> find ( 'a' , 3 ) -> href ;
2016-09-30 11:07:43 +02:00
$item [ 'id' ] = self :: URI . $element -> find ( 'a.detLink' , 0 ) -> href ;
2016-08-22 18:55:59 +02:00
$item [ 'timestamp' ] = parseDateTimestamp ( $element );
2016-09-30 11:07:43 +02:00
$item [ 'author' ] = $element -> find ( 'a.detDesc' , 0 ) -> plaintext ;
2016-08-22 18:55:59 +02:00
$item [ 'title' ] = $element -> find ( 'a.detLink' , 0 ) -> plaintext ;
$item [ 'seeders' ] = ( int ) $element -> find ( 'td' , 2 ) -> plaintext ;
$item [ 'leechers' ] = ( int ) $element -> find ( 'td' , 3 ) -> plaintext ;
2016-10-02 15:09:51 +02:00
$item [ 'content' ] = $element -> find ( 'font' , 0 ) -> plaintext . '<br>seeders: ' . $item [ 'seeders' ] . ' | leechers: ' . $item [ 'leechers' ] . '<br><a href="' . $item [ 'id' ] . '">info page</a>' ;
2016-08-22 18:55:59 +02:00
if ( isset ( $item [ 'title' ]))
2014-12-08 19:39:57 +01:00
$this -> items [] = $item ;
}
}
}
2014-05-26 19:45:10 +02:00
}