diff options
Diffstat (limited to 'bridges/CastorusBridge.php')
-rw-r--r-- | bridges/CastorusBridge.php | 249 |
1 files changed, 133 insertions, 116 deletions
diff --git a/bridges/CastorusBridge.php b/bridges/CastorusBridge.php index 9dc878f7..a0a1454e 100644 --- a/bridges/CastorusBridge.php +++ b/bridges/CastorusBridge.php @@ -1,118 +1,135 @@ <?php -class CastorusBridge extends BridgeAbstract { - const MAINTAINER = 'logmanoriginal'; - const NAME = 'Castorus Bridge'; - const URI = 'https://www.castorus.com'; - const CACHE_TIMEOUT = 600; // 10min - const DESCRIPTION = 'Returns the latest changes'; - - const PARAMETERS = array( - 'Get latest changes' => array(), - 'Get latest changes via ZIP code' => array( - 'zip' => array( - 'name' => 'ZIP code', - 'type' => 'text', - 'required' => true, - 'exampleValue' => '7', - 'title' => 'Insert ZIP code (complete or partial). e.g: 78125 OR 781 OR 7' - ) - ), - 'Get latest changes via city name' => array( - 'city' => array( - 'name' => 'City name', - 'type' => 'text', - 'required' => true, - 'exampleValue' => 'Paris', - 'title' => 'Insert city name (complete or partial). e.g: Paris OR Par OR P' - ) - ) - ); - - // Extracts the title from an actitiy - private function extractActivityTitle($activity){ - $title = $activity->find('a', 0); - - if(!$title) - returnServerError('Cannot find title!'); - - return trim($title->plaintext); - } - - // Extracts the url from an actitiy - private function extractActivityUrl($activity){ - $url = $activity->find('a', 0); - - if(!$url) - returnServerError('Cannot find url!'); - - return self::URI . $url->href; - } - - // Extracts the time from an activity - private function extractActivityTime($activity){ - // Unfortunately the time is part of the parent node, - // so we have to clear all child nodes first - $nodes = $activity->find('*'); - - if(!$nodes) - returnServerError('Cannot find nodes!'); - - foreach($nodes as $node) { - $node->outertext = ''; - } - - return strtotime($activity->innertext); - } - - // Extracts the price change - private function extractActivityPrice($activity){ - $price = $activity->find('span', 1); - - if(!$price) - returnServerError('Cannot find price!'); - - return $price->innertext; - } - - public function collectData(){ - $zip_filter = trim($this->getInput('zip')); - $city_filter = trim($this->getInput('city')); - - $html = getSimpleHTMLDOM(self::URI); - - if(!$html) - returnServerError('Could not load data from ' . self::URI . '!'); - - $activities = $html->find('div#activite > li'); - - if(!$activities) - returnServerError('Failed to find activities!'); - - foreach($activities as $activity) { - $item = array(); - - $item['title'] = $this->extractActivityTitle($activity); - $item['uri'] = $this->extractActivityUrl($activity); - $item['timestamp'] = $this->extractActivityTime($activity); - $item['content'] = '<a href="' - . $item['uri'] - . '">' - . $item['title'] - . '</a><br><p>' - . $this->extractActivityPrice($activity) - . '</p>'; - - if(isset($zip_filter) - && !(substr($item['title'], 0, strlen($zip_filter)) === $zip_filter)) { - continue; // Skip this item - } - - if(isset($city_filter) - && !(substr($item['title'], strpos($item['title'], ' ') + 1, strlen($city_filter)) === $city_filter)) { - continue; // Skip this item - } - - $this->items[] = $item; - } - } + +class CastorusBridge extends BridgeAbstract +{ + const MAINTAINER = 'logmanoriginal'; + const NAME = 'Castorus Bridge'; + const URI = 'https://www.castorus.com'; + const CACHE_TIMEOUT = 600; // 10min + const DESCRIPTION = 'Returns the latest changes'; + + const PARAMETERS = [ + 'Get latest changes' => [], + 'Get latest changes via ZIP code' => [ + 'zip' => [ + 'name' => 'ZIP code', + 'type' => 'text', + 'required' => true, + 'exampleValue' => '7', + 'title' => 'Insert ZIP code (complete or partial). e.g: 78125 OR 781 OR 7' + ] + ], + 'Get latest changes via city name' => [ + 'city' => [ + 'name' => 'City name', + 'type' => 'text', + 'required' => true, + 'exampleValue' => 'Paris', + 'title' => 'Insert city name (complete or partial). e.g: Paris OR Par OR P' + ] + ] + ]; + + // Extracts the title from an actitiy + private function extractActivityTitle($activity) + { + $title = $activity->find('a', 0); + + if (!$title) { + returnServerError('Cannot find title!'); + } + + return trim($title->plaintext); + } + + // Extracts the url from an actitiy + private function extractActivityUrl($activity) + { + $url = $activity->find('a', 0); + + if (!$url) { + returnServerError('Cannot find url!'); + } + + return self::URI . $url->href; + } + + // Extracts the time from an activity + private function extractActivityTime($activity) + { + // Unfortunately the time is part of the parent node, + // so we have to clear all child nodes first + $nodes = $activity->find('*'); + + if (!$nodes) { + returnServerError('Cannot find nodes!'); + } + + foreach ($nodes as $node) { + $node->outertext = ''; + } + + return strtotime($activity->innertext); + } + + // Extracts the price change + private function extractActivityPrice($activity) + { + $price = $activity->find('span', 1); + + if (!$price) { + returnServerError('Cannot find price!'); + } + + return $price->innertext; + } + + public function collectData() + { + $zip_filter = trim($this->getInput('zip')); + $city_filter = trim($this->getInput('city')); + + $html = getSimpleHTMLDOM(self::URI); + + if (!$html) { + returnServerError('Could not load data from ' . self::URI . '!'); + } + + $activities = $html->find('div#activite > li'); + + if (!$activities) { + returnServerError('Failed to find activities!'); + } + + foreach ($activities as $activity) { + $item = []; + + $item['title'] = $this->extractActivityTitle($activity); + $item['uri'] = $this->extractActivityUrl($activity); + $item['timestamp'] = $this->extractActivityTime($activity); + $item['content'] = '<a href="' + . $item['uri'] + . '">' + . $item['title'] + . '</a><br><p>' + . $this->extractActivityPrice($activity) + . '</p>'; + + if ( + isset($zip_filter) + && !(substr($item['title'], 0, strlen($zip_filter)) === $zip_filter) + ) { + continue; // Skip this item + } + + if ( + isset($city_filter) + && !(substr($item['title'], strpos($item['title'], ' ') + 1, strlen($city_filter)) === $city_filter) + ) { + continue; // Skip this item + } + + $this->items[] = $item; + } + } } |