2014-02-09 18:33:02 +04:00
< ? php
class BandcampBridge extends BridgeAbstract {
2015-11-05 18:50:18 +03:00
2014-02-09 18:33:02 +04:00
private $request ;
2015-11-05 18:50:18 +03:00
public function loadMetadatas () {
$this -> maintainer = " sebsauvage " ;
$this -> name = " Bandcamp Tag " ;
$this -> uri = " http://bandcamp.com/ " ;
$this -> description = " New bandcamp release by tag " ;
2016-08-09 15:54:44 +03:00
$this -> update = " 2016-08-09 " ;
2015-11-05 18:50:18 +03:00
$this -> parameters [] =
' [
{
" name " : " tag " ,
" type " : " text " ,
" identifier " : " tag "
}
] ' ;
}
2014-02-09 18:33:02 +04:00
public function collectData ( array $param ){
$html = '' ;
if ( isset ( $param [ 'tag' ])) {
$this -> request = $param [ 'tag' ];
2016-06-26 00:17:42 +03:00
$html = $this -> file_get_html ( 'http://bandcamp.com/tag/' . urlencode ( $this -> request ) . '?sort_field=date' ) or $this -> returnError ( 'No results for this query.' , 404 );
2014-02-09 18:33:02 +04:00
}
else {
$this -> returnError ( 'You must specify tag (/tag/...)' , 400 );
}
foreach ( $html -> find ( 'li.item' ) as $release ) {
2016-03-02 15:14:22 +03:00
$script = $release -> find ( 'div.art' , 0 ) -> getAttribute ( 'onclick' );
$uri = ltrim ( $script , " return 'url( " );
$uri = rtrim ( $uri , " ') " );
2014-02-09 18:33:02 +04:00
$item = new \Item ();
2016-08-09 15:54:44 +03:00
$item -> author = $release -> find ( 'div.itemsubtext' , 0 ) -> plaintext . ' - ' . $release -> find ( 'div.itemtext' , 0 ) -> plaintext ;
2014-02-09 18:33:02 +04:00
$item -> title = $release -> find ( 'div.itemsubtext' , 0 ) -> plaintext . ' - ' . $release -> find ( 'div.itemtext' , 0 ) -> plaintext ;
2016-03-02 15:14:22 +03:00
$item -> content = '<img src="' . $uri . '"/><br/>' . $release -> find ( 'div.itemsubtext' , 0 ) -> plaintext . ' - ' . $release -> find ( 'div.itemtext' , 0 ) -> plaintext ;
2014-02-09 18:33:02 +04:00
$item -> id = $release -> find ( 'a' , 0 ) -> getAttribute ( 'href' );
$item -> uri = $release -> find ( 'a' , 0 ) -> getAttribute ( 'href' );
$this -> items [] = $item ;
}
}
public function getName (){
return ( ! empty ( $this -> request ) ? $this -> request . ' - ' : '' ) . 'Bandcamp Tag' ;
}
public function getCacheDuration (){
return 600 ; // 10 minutes
}
}