<?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; } }