2014-05-26 21:45:10 +04:00
< ? php
class ThePirateBayBridge extends BridgeAbstract {
2015-11-05 18:50:18 +03:00
public function loadMetadatas () {
$this -> maintainer = " mitsukarenai " ;
$this -> name = " The Pirate Bay " ;
2016-01-15 20:20:30 +03:00
$this -> uri = " https://thepiratebay.se/ " ;
2015-11-05 18:50:18 +03:00
$this -> 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 \" ) " ;
2016-01-09 12:23:19 +03:00
$this -> update = " 2015-01-09 " ;
2015-11-05 18:50:18 +03:00
$this -> parameters [] =
' [
{
" name " : " keywords, separated by semicolons " ,
" identifier " : " q " ,
" exampleValue " : " first list;second list;... "
}
] ' ;
}
2014-05-26 21:45:10 +04:00
public function collectData ( array $param ){
2014-12-08 21:39:57 +03: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 ;
}
2014-05-26 21:45:10 +04:00
if ( ! isset ( $param [ 'q' ]))
2014-12-08 21:39:57 +03:00
$this -> returnError ( 'You must specify keywords (?q=...)' , 400 );
$keywordsList = explode ( " ; " , $param [ 'q' ]);
foreach ( $keywordsList as $keywords ){
2016-01-15 20:20:30 +03:00
$html = file_get_html ( 'https://thepiratebay.se/search/' . rawurlencode ( $keywords ) . '/0/3/0' ) or $this -> returnError ( 'Could not request TPB.' , 404 );
2014-12-08 21:39:57 +03:00
if ( $html -> find ( 'table#searchResult' , 0 ) == FALSE )
$this -> returnError ( 'No result for query ' . $keywords , 404 );
2014-05-26 21:45:10 +04:00
2014-12-08 21:39:57 +03:00
foreach ( $html -> find ( 'tr' ) as $element ) {
$item = new \Item ();
2016-01-15 20:20:30 +03:00
$item -> uri = 'https://thepiratebay.se/' . $element -> find ( 'a.detLink' , 0 ) -> href ;
2014-12-08 21:39:57 +03:00
$item -> id = $item -> uri ;
$item -> timestamp = parseDateTimestamp ( $element );
$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 . '<br>seeders: ' . $item -> seeders . ' | leechers: ' . $item -> leechers . '<br><a href="' . $element -> find ( 'a' , 3 ) -> href . '">download</a>' ;
if ( ! empty ( $item -> title ))
$this -> items [] = $item ;
}
}
}
2014-05-26 21:45:10 +04:00
public function getName (){
return 'The Pirate Bay' ;
}
public function getURI (){
2016-01-15 20:20:30 +03:00
return 'https://thepiratebay.se/' ;
2014-05-26 21:45:10 +04:00
}
public function getCacheDuration (){
return 3600 ; // 1 hour
}
}