95b99d42a4
getURI and getName should fall back to parent::getURI or parent::getName respectively if it cannot build propper return values. Functions defined by bridges should be made private to prevent confusion with inherited functions
123 lines
3.3 KiB
PHP
123 lines
3.3 KiB
PHP
<?php
|
|
class PinterestBridge extends BridgeAbstract {
|
|
|
|
const MAINTAINER = "pauder";
|
|
const NAME = "Pinterest Bridge";
|
|
const URI = "http://www.pinterest.com/";
|
|
const DESCRIPTION = "Returns the newest images on a board";
|
|
|
|
const PARAMETERS = array(
|
|
'By username and board' => array(
|
|
'u' => array(
|
|
'name' => 'username',
|
|
'required' => true
|
|
),
|
|
'b' => array(
|
|
'name' => 'board',
|
|
'required' => true
|
|
)
|
|
),
|
|
'From search' => array(
|
|
'q' => array(
|
|
'name' => 'Keyword',
|
|
'required' => true
|
|
)
|
|
)
|
|
);
|
|
|
|
public function collectData(){
|
|
$html = getSimpleHTMLDOM($this->getURI());
|
|
if(!$html){
|
|
switch($this->queriedContext){
|
|
case 'By username and board':
|
|
returnServerError('Username and/or board not found');
|
|
case 'From search':
|
|
returnServerError('Could not request Pinterest.');
|
|
}
|
|
}
|
|
|
|
if($this->queriedContext === 'From search'){
|
|
foreach($html->find('div.pinWrapper') as $div){
|
|
$item = array();
|
|
|
|
$a = $div->find('a.pinImageWrapper', 0);
|
|
$img = $a->find('img', 0);
|
|
|
|
$item['uri'] = $this->getURI() . $a->getAttribute('href');
|
|
$item['content'] = '<img src="'
|
|
. htmlentities(str_replace('/236x/', '/736x/', $img->getAttribute('src')))
|
|
. '" alt="" />';
|
|
|
|
$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);
|
|
|
|
$item['username'] = $username->innertext;
|
|
$item['fullname'] = $board->innertext;
|
|
$item['avatar'] = $avatar;
|
|
|
|
$item['content'] .= '<br /><img align="left" style="margin: 2px 4px;" src="'
|
|
. htmlentities($item['avatar'])
|
|
. '" /> <strong>'
|
|
. $item['username']
|
|
. '</strong>'
|
|
. '<br />'
|
|
. $item['fullname'];
|
|
|
|
$item['title'] = $img->getAttribute('alt');
|
|
$this->items[] = $item;
|
|
}
|
|
} elseif($this->queriedContext === 'By username and board'){
|
|
$container = $html->find('SCRIPT[type="application/ld+json"]', 0)
|
|
or returnServerError('Unable to find data container!');
|
|
|
|
$json = json_decode($container->innertext, true);
|
|
|
|
foreach($json['itemListElement'] as $element){
|
|
$item = array();
|
|
|
|
$item['uri'] = $element['item']['sharedContent']['author']['url'];
|
|
$item['title'] = $element['item']['name'];
|
|
$item['author'] = $element['item']['user']['name'];
|
|
$item['timestamp'] = strtotime($element['item']['datePublished']);
|
|
$item['content'] = <<<EOD
|
|
<a href="{$item['uri']}">
|
|
<img src="{$element['item']['image']}">
|
|
</a>
|
|
<p>{$element['item']['text']}</p>
|
|
EOD;
|
|
|
|
$this->items[] = $item;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getURI(){
|
|
switch($this->queriedContext){
|
|
case 'By username and board':
|
|
$uri = self::URI . urlencode($this->getInput('u')) . '/' . urlencode($this->getInput('b'));
|
|
break;
|
|
case 'From search':
|
|
$uri = self::URI . 'search/?q=' . urlencode($this->getInput('q'));
|
|
break;
|
|
default: return parent::getURI();
|
|
}
|
|
return $uri;
|
|
}
|
|
|
|
public function getName(){
|
|
switch($this->queriedContext){
|
|
case 'By username and board':
|
|
$specific = $this->getInput('u') . '-' . $this->getInput('b');
|
|
break;
|
|
case 'From search':
|
|
$specific = $this->getInput('q');
|
|
break;
|
|
default: return parent::getName();
|
|
}
|
|
return $specific . ' - ' . self::NAME;
|
|
}
|
|
}
|