diff options
Diffstat (limited to 'bridges/AmazonBridge.php')
-rw-r--r-- | bridges/AmazonBridge.php | 201 |
1 files changed, 101 insertions, 100 deletions
diff --git a/bridges/AmazonBridge.php b/bridges/AmazonBridge.php index ba440a59..40855a15 100644 --- a/bridges/AmazonBridge.php +++ b/bridges/AmazonBridge.php @@ -1,103 +1,104 @@ <?php -class AmazonBridge extends BridgeAbstract { - - const MAINTAINER = 'Alexis CHEMEL'; - const NAME = 'Amazon'; - const URI = 'https://www.amazon.com/'; - const CACHE_TIMEOUT = 3600; // 1h - const DESCRIPTION = 'Returns products from Amazon search'; - - const PARAMETERS = array(array( - 'q' => array( - 'name' => 'Keyword', - 'required' => true, - 'exampleValue' => 'watch', - ), - 'sort' => array( - 'name' => 'Sort by', - 'type' => 'list', - 'values' => array( - 'Relevance' => 'relevanceblender', - 'Price: Low to High' => 'price-asc-rank', - 'Price: High to Low' => 'price-desc-rank', - 'Average Customer Review' => 'review-rank', - 'Newest Arrivals' => 'date-desc-rank', - ), - 'defaultValue' => 'relevanceblender', - ), - 'tld' => array( - 'name' => 'Country', - 'type' => 'list', - 'values' => array( - 'Australia' => 'com.au', - 'Brazil' => 'com.br', - 'Canada' => 'ca', - 'China' => 'cn', - 'France' => 'fr', - 'Germany' => 'de', - 'India' => 'in', - 'Italy' => 'it', - 'Japan' => 'co.jp', - 'Mexico' => 'com.mx', - 'Netherlands' => 'nl', - 'Spain' => 'es', - 'Sweden' => 'se', - 'Turkey' => 'com.tr', - 'United Kingdom' => 'co.uk', - 'United States' => 'com', - ), - 'defaultValue' => 'com', - ), - )); - - public function collectData() { - - $baseUrl = sprintf('https://www.amazon.%s', $this->getInput('tld')); - - $url = sprintf( - '%s/s/?field-keywords=%s&sort=%s', - $baseUrl, - urlencode($this->getInput('q')), - $this->getInput('sort') - ); - - $dom = getSimpleHTMLDOM($url); - - $elements = $dom->find('div.s-result-item'); - - foreach($elements as $element) { - $item = []; - - $title = $element->find('h2', 0); - if (!$title) { - continue; - } - - $item['title'] = $title->innertext; - - $itemUrl = $element->find('a', 0)->href; - $item['uri'] = urljoin($baseUrl, $itemUrl); - - $image = $element->find('img', 0); - if ($image) { - $item['content'] = '<img src="' . $image->getAttribute('src') . '" /><br />'; - } - - $price = $element->find('span.a-price > .a-offscreen', 0); - if ($price) { - $item['content'] .= $price->innertext; - } - - $this->items[] = $item; - } - } - - public function getName(){ - if(!is_null($this->getInput('tld')) && !is_null($this->getInput('q'))) { - return 'Amazon.' . $this->getInput('tld') . ': ' . $this->getInput('q'); - } - - return parent::getName(); - } +class AmazonBridge extends BridgeAbstract +{ + const MAINTAINER = 'Alexis CHEMEL'; + const NAME = 'Amazon'; + const URI = 'https://www.amazon.com/'; + const CACHE_TIMEOUT = 3600; // 1h + const DESCRIPTION = 'Returns products from Amazon search'; + + const PARAMETERS = [[ + 'q' => [ + 'name' => 'Keyword', + 'required' => true, + 'exampleValue' => 'watch', + ], + 'sort' => [ + 'name' => 'Sort by', + 'type' => 'list', + 'values' => [ + 'Relevance' => 'relevanceblender', + 'Price: Low to High' => 'price-asc-rank', + 'Price: High to Low' => 'price-desc-rank', + 'Average Customer Review' => 'review-rank', + 'Newest Arrivals' => 'date-desc-rank', + ], + 'defaultValue' => 'relevanceblender', + ], + 'tld' => [ + 'name' => 'Country', + 'type' => 'list', + 'values' => [ + 'Australia' => 'com.au', + 'Brazil' => 'com.br', + 'Canada' => 'ca', + 'China' => 'cn', + 'France' => 'fr', + 'Germany' => 'de', + 'India' => 'in', + 'Italy' => 'it', + 'Japan' => 'co.jp', + 'Mexico' => 'com.mx', + 'Netherlands' => 'nl', + 'Spain' => 'es', + 'Sweden' => 'se', + 'Turkey' => 'com.tr', + 'United Kingdom' => 'co.uk', + 'United States' => 'com', + ], + 'defaultValue' => 'com', + ], + ]]; + + public function collectData() + { + $baseUrl = sprintf('https://www.amazon.%s', $this->getInput('tld')); + + $url = sprintf( + '%s/s/?field-keywords=%s&sort=%s', + $baseUrl, + urlencode($this->getInput('q')), + $this->getInput('sort') + ); + + $dom = getSimpleHTMLDOM($url); + + $elements = $dom->find('div.s-result-item'); + + foreach ($elements as $element) { + $item = []; + + $title = $element->find('h2', 0); + if (!$title) { + continue; + } + + $item['title'] = $title->innertext; + + $itemUrl = $element->find('a', 0)->href; + $item['uri'] = urljoin($baseUrl, $itemUrl); + + $image = $element->find('img', 0); + if ($image) { + $item['content'] = '<img src="' . $image->getAttribute('src') . '" /><br />'; + } + + $price = $element->find('span.a-price > .a-offscreen', 0); + if ($price) { + $item['content'] .= $price->innertext; + } + + $this->items[] = $item; + } + } + + public function getName() + { + if (!is_null($this->getInput('tld')) && !is_null($this->getInput('q'))) { + return 'Amazon.' . $this->getInput('tld') . ': ' . $this->getInput('q'); + } + + return parent::getName(); + } } |