2014-01-30 17:55:35 +04:00
< ? php
class PinterestBridge extends BridgeAbstract {
2015-11-05 18:50:18 +03:00
2014-01-30 17:55:35 +04:00
private $username ;
private $board ;
2014-01-30 18:25:25 +04:00
private $query ;
2015-11-05 18:50:18 +03:00
public function loadMetadatas () {
$this -> maintainer = " pauder " ;
$this -> name = " Pinterest Bridge " ;
2016-08-06 19:40:36 +03:00
$this -> uri = " http://www.pinterest.com " ;
2015-11-05 18:50:18 +03:00
$this -> description = " Returns the newest images on a board " ;
2016-08-22 02:25:56 +03:00
$this -> parameters [ " By username and board " ] = array (
'u' => array ( 'name' => 'username' ),
'b' => array ( 'name' => 'board' )
);
$this -> parameters [ " From search " ] = array (
'q' => array ( 'name' => 'Keyword' )
);
2015-11-05 18:50:18 +03:00
}
2016-08-25 02:24:53 +03:00
public function collectData (){
$param = $this -> parameters [ $this -> queriedContext ];
2014-01-30 17:55:35 +04:00
$html = '' ;
2016-08-25 02:24:53 +03:00
if ( isset ( $param [ 'u' ][ 'value' ]) || isset ( $param [ 'b' ][ 'value' ])) {
2016-07-08 20:06:35 +03:00
2016-08-25 02:24:53 +03:00
if ( empty ( $param [ 'u' ][ 'value' ]))
2014-02-09 18:20:52 +04:00
{
2016-08-17 15:45:08 +03:00
$this -> returnClientError ( 'You must specify a Pinterest username (?u=...).' );
2014-02-09 18:20:52 +04:00
}
2016-08-25 02:24:53 +03:00
if ( empty ( $param [ 'b' ][ 'value' ]))
2014-02-09 18:20:52 +04:00
{
2016-08-17 15:45:08 +03:00
$this -> returnClientError ( 'You must specify a Pinterest board for this username (?b=...).' );
2014-02-09 18:20:52 +04:00
}
2016-07-08 20:06:35 +03:00
2016-08-25 02:24:53 +03:00
$this -> username = $param [ 'u' ][ 'value' ];
$this -> board = $param [ 'b' ][ 'value' ];
2016-07-08 20:06:35 +03:00
$html = $this -> getSimpleHTMLDOM ( $this -> getURI () . '/' . urlencode ( $this -> username ) . '/' . urlencode ( $this -> board )) or $this -> returnServerError ( 'Username and/or board not found' );
2016-02-26 17:58:03 +03:00
2016-08-25 02:24:53 +03:00
} else if ( isset ( $param [ 'q' ][ 'value' ]))
2014-01-30 18:25:25 +04:00
{
2016-08-25 02:24:53 +03:00
$this -> query = $param [ 'q' ][ 'value' ];
2016-07-08 20:06:35 +03:00
$html = $this -> getSimpleHTMLDOM ( $this -> getURI () . '/search/?q=' . urlencode ( $this -> query )) or $this -> returnServerError ( 'Could not request Pinterest.' );
2014-01-30 17:55:35 +04:00
}
2016-07-08 20:06:35 +03:00
2014-01-30 17:55:35 +04:00
else {
2016-08-17 15:45:08 +03:00
$this -> returnClientError ( 'You must specify a Pinterest username and a board name (?u=...&b=...).' );
2014-01-30 17:55:35 +04:00
}
2016-07-08 20:06:35 +03:00
2014-01-30 17:55:35 +04:00
foreach ( $html -> find ( 'div.pinWrapper' ) as $div )
{
$a = $div -> find ( 'a.pinImageWrapper' , 0 );
2016-07-08 20:06:35 +03:00
2014-01-30 17:55:35 +04:00
$img = $a -> find ( 'img' , 0 );
2016-07-08 20:06:35 +03:00
2016-08-22 19:55:59 +03:00
$item = array ();
$item [ 'uri' ] = $this -> getURI () . $a -> getAttribute ( 'href' );
$item [ 'content' ] = '<img src="' . htmlentities ( str_replace ( '/236x/' , '/736x/' , $img -> getAttribute ( 'src' ))) . '" alt="" />' ;
2016-07-08 20:06:35 +03:00
2014-01-30 18:25:25 +04:00
if ( isset ( $this -> query ))
{
2016-02-26 17:58:03 +03:00
$avatar = $div -> find ( 'div.creditImg' , 0 ) -> find ( 'img' , 0 );
$avatar = $avatar -> getAttribute ( 'data-src' );
$avatar = str_replace ( " \\ " , " " , $avatar );
$username = $div -> find ( 'div.creditName' , 0 );
$board = $div -> find ( 'div.creditTitle' , 0 );
2016-07-08 20:06:35 +03:00
2016-08-22 19:55:59 +03:00
$item [ 'username' ] = $username -> innertext ;
$item [ 'fullname' ] = $board -> innertext ;
$item [ 'avatar' ] = $avatar ;
2016-07-08 20:06:35 +03:00
2016-08-22 19:55:59 +03:00
$item [ 'content' ] .= '<br /><img align="left" style="margin: 2px 4px;" src="' . htmlentities ( $item [ 'avatar' ]) . '" /> <strong>' . $item [ 'username' ] . '</strong>' ;
$item [ 'content' ] .= '<br />' . $item [ 'fullname' ];
2014-01-30 18:25:25 +04:00
}
2016-07-08 20:06:35 +03:00
2016-08-22 19:55:59 +03:00
$item [ 'title' ] = $img -> getAttribute ( 'alt' );
2016-07-08 20:06:35 +03:00
2016-08-22 19:55:59 +03:00
//$item['timestamp'] = $media->created_time;
2014-01-30 17:55:35 +04:00
$this -> items [] = $item ;
2016-07-08 20:06:35 +03:00
2014-01-30 17:55:35 +04:00
}
}
public function getName (){
2016-07-08 20:06:35 +03:00
2014-01-30 18:25:25 +04:00
if ( isset ( $this -> query ))
{
return $this -> query . ' - Pinterest' ;
} else {
return $this -> username . ' - ' . $this -> board . ' - Pinterest' ;
}
2014-01-30 17:55:35 +04:00
}
}