Browse Source

[DealabsBridge] First version of the generic "Pepper" Bridge (#726)

* [DealabsBridge] First version of the generic "Pepper" Bridge
sysadminstory 5 years ago
parent
commit
7126f5e838
3 changed files with 1759 additions and 105 deletions
  1. 218 105
      bridges/DealabsBridge.php
  2. 1397 0
      bridges/HotUKDealsBridge.php
  3. 144 0
      bridges/MydealsBridge.php

+ 218 - 105
bridges/DealabsBridge.php

@@ -1,8 +1,9 @@
 <?php
-class DealabsBridge extends BridgeAbstract {
-	const NAME = 'Dealabs search bridge';
+class DealabsBridge extends PepperBridgeAbstract {
+
+	const NAME = 'Dealabs Bridge';
 	const URI = 'https://www.dealabs.com/';
-	const DESCRIPTION = 'Return the Dealabs search result using keywords';
+	const DESCRIPTION = 'Affiche les Deals de Dealabs';
 	const MAINTAINER = 'sysadminstory';
 	const PARAMETERS = array(
 		'Recherche par Mot(s) clé(s)' => array (
@@ -39,7 +40,7 @@ class DealabsBridge extends BridgeAbstract {
 		),
 
 		'Deals par groupe' => array(
-			'groupe' => array(
+			'group' => array(
 				'name' => 'Groupe',
 				'type' => 'list',
 				'required' => 'true',
@@ -61,10 +62,10 @@ class DealabsBridge extends BridgeAbstract {
 					'Services divers' => 'services-divers',
 					'Sports & plein air' => 'sports-plein-air',
 					'Téléphonie' => 'telephonie',
-					'Voyages & sorties' => 'voyages-sorties-restaurants'
+					'Voyages & sorties' => 'voyages-sorties-restaurants',
 				)
 			),
-			'ordre' => array(
+			'order' => array(
 				'name' => 'Trier par',
 				'type' => 'list',
 				'required' => 'true',
@@ -78,37 +79,99 @@ class DealabsBridge extends BridgeAbstract {
 		)
 	);
 
+	public $lang = array(
+		'bridge-uri' => SELF::URI,
+		'bridge-name' => SELF::NAME,
+		'context-keyword' => 'Recherche par Mot(s) clé(s)',
+		'context-group' => 'Deals par groupe',
+		'uri-group' => '/groupe/',
+		'request-error' => 'Could not request Dealabs',
+		'no-results' => 'Il n&#039;y a rien à afficher pour le moment :(',
+		'relative-date-indicator' => array(
+			'il y a',
+		),
+		'price' => 'Prix',
+		'shipping' => 'Livraison',
+		'origin' => 'Origine',
+		'discount' => 'Réduction',
+		'title-keyword' => 'Recherche',
+		'title-group' => 'Groupe',
+		'local-months' => array(
+			'janvier',
+			'février',
+			'mars',
+			'avril',
+			'mai',
+			'juin',
+			'juillet',
+			'août',
+			'septembre',
+			'octobre',
+			'novembre',
+			'décembre'
+		),
+		'local-time-relative' => array(
+			'il y a ',
+			'min',
+			'h',
+			'jour',
+			'jours',
+			'mois',
+			'ans',
+			'et '
+		),
+		'date-prefixes' => array(
+			'Actualisé ',
+		),
+		'relative-date-alt-prefixes' => array(
+			'Actualisé ',
+		),
+		'relative-date-ignore-suffix' => array(
+		),
+
+		'localdeal' => array(
+			'Local',
+			'Pays d\'expédition'
+		),
+	);
+
+
+
+}
+
+class PepperBridgeAbstract extends BridgeAbstract {
+
 	const CACHE_TIMEOUT = 3600;
 
 	public function collectData(){
 		switch($this->queriedContext) {
-		case 'Recherche par Mot(s) clé(s)':
-			return $this->collectDataMotsCles();
+		case $this->i8n('context-keyword'):
+			return $this->collectDataKeywords();
 			break;
-		case 'Deals par groupe':
-			return $this->collectDataGroupe();
+		case $this->i8n('context-group'):
+			return $this->collectDataGroup();
 			break;
 		}
 	}
 
 	/**
-	 * Get the Deal data from the choosen groupe in the choose order
+	 * Get the Deal data from the choosen group in the choosed order
 	 */
-	public function collectDataGroupe()
+	public function collectDataGroup()
 	{
 
-		$groupe = $this->getInput('groupe');
-		$ordre = $this->getInput('ordre');
+		$group = $this->getInput('group');
+		$order = $this->getInput('order');
 
-		$url = self::URI
-			. '/groupe/' . $groupe . $ordre;
+		$url = $this->i8n('bridge-uri')
+			. $this->i8n('uri-group') . $group . $order;
 		$this->collectDeals($url);
 	}
 
 	/**
 	 * Get the Deal data from the choosen keywords and parameters
 	 */
-	public function collectDataMotsCles()
+	public function collectDataKeywords()
 	{
 		$q = $this->getInput('q');
 		$hide_expired = $this->getInput('hide_expired');
@@ -117,7 +180,7 @@ class DealabsBridge extends BridgeAbstract {
 		$priceTo = $this->getInput('priceFrom');
 
 		/* Even if the original website uses POST with the search page, GET works too */
-		$url = self::URI
+		$url = $this->i8n('bridge-uri')
 			. '/search/advanced?q='
 			. urlencode($q)
 			. '&hide_expired='. $hide_expired
@@ -138,8 +201,8 @@ class DealabsBridge extends BridgeAbstract {
 	 */
 	public function collectDeals($url){
 		$html = getSimpleHTMLDOM($url)
-			or returnServerError('Could not request Dealabs.');
-		$list = $html->find('article');
+			or returnServerError($this->i8n('request-error'));
+		$list = $html->find('article[id]');
 
 		// Deal Image Link CSS Selector
 		$selectorImageLink = implode(
@@ -197,40 +260,44 @@ class DealabsBridge extends BridgeAbstract {
 
 		// If there is no results, we don't parse the content because it display some random deals
 		$noresult = $html->find('h3[class=size--all-l size--fromW2-xl size--fromW3-xxl]', 0);
-		if($noresult != null && $noresult->plaintext == 'Il n&#039;y a rien à afficher pour le moment :(') {
+		if ($noresult != null && strpos($noresult->plaintext, $this->i8n('no-results')) !== false) {
 			$this->items = array();
 		} else {
-			foreach($list as $deal) {
+			foreach ($list as $deal) {
 				$item = array();
 				$item['uri'] = $deal->find('div[class=threadGrid-title]', 0)->find('a', 0)->href;
 				$item['title'] = $deal->find('a[class*='. $selectorLink .']', 0
-					)->plaintext;
+				)->plaintext;
 				$item['author'] = $deal->find('span.thread-username', 0)->plaintext;
 				$item['content'] = '<table><tr><td><a href="'
 					. $deal->find(
 						'a[class*='. $selectorImageLink .']', 0)->href
-					. '"><img src="'
-					. $this->getImage($deal)
-					. '"/></td><td><h2><a href="'
-					. $deal->find('a[class*='. $selectorLink .']', 0)->href
-					. '">'
-					. $deal->find('a[class*='. $selectorLink .']', 0)->innertext
-					. '</a></h2>'
-					. $this->getPrix($deal)
-					. $this->getReduction($deal)
-					. $this->getExpedition($deal)
-					. $this->getLivraison($deal)
-					. $this->getOrigine($deal)
-					. $deal->find('div[class*='. $selectorDescription .']', 0)->innertext
-					. '</td><td>'
-					. $deal->find('div[class='. $selectorHot .']', 0)->children(0)->outertext
-					. '</td></table>';
+						. '"><img src="'
+						. $this->getImage($deal)
+						. '"/></td><td><h2><a href="'
+						. $deal->find('a[class*='. $selectorLink .']', 0)->href
+						. '">'
+						. $deal->find('a[class*='. $selectorLink .']', 0)->innertext
+						. '</a></h2>'
+						. $this->getPrice($deal)
+						. $this->getDiscount($deal)
+						. $this->getShipsFrom($deal)
+						. $this->getShippingCost($deal)
+						. $this->GetSource($deal)
+						. $deal->find('div[class*='. $selectorDescription .']', 0)->innertext
+						. '</td><td>'
+						. $deal->find('div[class='. $selectorHot .']', 0)->children(0)->outertext
+						. '</td></table>';
 				$dealDateDiv = $deal->find('div[class*='. $selectorDate .']', 0)
 					->find('span[class=hide--toW3]');
 				$itemDate = end($dealDateDiv)->plaintext;
-				if(substr( $itemDate, 0, 6 ) === 'il y a') {
+				// In case of a Local deal, there is no date, but we can use
+				// this case for other reason (like date not in the last field)
+				if ($this->contains($itemDate, $this->i8n('localdeal'))) {
+					$item['timestamp'] = time();
+				} else if ($this->contains($itemDate, $this->i8n('relative-date-indicator'))) {
 					$item['timestamp'] = $this->relativeDateToTimestamp($itemDate);
-				} else 	{
+				} else {
 					$item['timestamp'] = $this->parseDate($itemDate);
 				}
 				$this->items[] = $item;
@@ -239,14 +306,28 @@ class DealabsBridge extends BridgeAbstract {
 	}
 
 	/**
+	 * Check if the string $str contains any of the string of the array $arr
+	 * @return boolean true if the string matched anything otherwise false
+	 */
+	private function contains($str, array $arr)
+	{
+		foreach ($arr as $a) {
+			if (stripos($str, $a) !== false) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
 	 * Get the Price from a Deal if it exists
 	 * @return string String of the deal price
 	 */
-	private function getPrix($deal)
+	private function getPrice($deal)
 	{
-		if($deal->find(
+		if ($deal->find(
 			'span[class*=thread-price]', 0) != null) {
-			return '<div>Prix : '
+			return '<div>'.$this->i8n('price') .' : '
 				. $deal->find(
 					'span[class*=thread-price]', 0
 				)->plaintext
@@ -261,17 +342,17 @@ class DealabsBridge extends BridgeAbstract {
 	 * Get the Shipping costs from a Deal if it exists
 	 * @return string String of the deal shipping Cost
 	 */
-	private function getLivraison($deal)
+	private function getShippingCost($deal)
 	{
-		if($deal->find('span[class*=cept-shipping-price]', 0) != null) {
-			if($deal->find('span[class*=cept-shipping-price]', 0)->children(0) != null) {
-				return '<div>Livraison : '
-				. $deal->find('span[class*=cept-shipping-price]', 0)->children(0)->innertext
-				. '</div>';
+		if ($deal->find('span[class*=cept-shipping-price]', 0) != null) {
+			if ($deal->find('span[class*=cept-shipping-price]', 0)->children(0) != null) {
+				return '<div>'. $this->i8n('shipping') .' : '
+					. $deal->find('span[class*=cept-shipping-price]', 0)->children(0)->innertext
+					. '</div>';
 			} else {
-				return '<div>Livraison : '
-				. $deal->find('span[class*=cept-shipping-price]', 0)->innertext
-				. '</div>';
+				return '<div>'. $this->i8n('shipping') .' : '
+					. $deal->find('span[class*=cept-shipping-price]', 0)->innertext
+					. '</div>';
 			}
 		} else {
 			return '';
@@ -282,10 +363,10 @@ class DealabsBridge extends BridgeAbstract {
 	 * Get the source of a Deal if it exists
 	 * @return string String of the deal source
 	 */
-	private function getOrigine($deal)
+	private function GetSource($deal)
 	{
-		if($deal->find('a[class=text--color-greyShade]', 0) != null) {
-			return '<div>Origine : '
+		if ($deal->find('a[class=text--color-greyShade]', 0) != null) {
+			return '<div>'. $this->i8n('origin') .' : '
 				. $deal->find('a[class=text--color-greyShade]', 0)->outertext
 				. '</div>';
 		} else {
@@ -297,19 +378,19 @@ class DealabsBridge extends BridgeAbstract {
 	 * Get the original Price and discout from a Deal if it exists
 	 * @return string String of the deal original price and discount
 	 */
-	private function getReduction($deal)
+	private function getDiscount($deal)
 	{
-		if($deal->find('span[class*=mute--text text--lineThrough]', 0) != null) {
+		if ($deal->find('span[class*=mute--text text--lineThrough]', 0) != null) {
 			$discountHtml = $deal->find('span[class=space--ml-1 size--all-l size--fromW3-xl]', 0);
-			if($discountHtml != null) {
+			if ($discountHtml != null) {
 				$discount = $discountHtml->plaintext;
 			} else {
 				$discount = '';
 			}
-			return '<div>Réduction : <span style="text-decoration: line-through;">'
+			return '<div>'. $this->i8n('discount') .' : <span style="text-decoration: line-through;">'
 				. $deal->find(
 					'span[class*=mute--text text--lineThrough]', 0
-					)->plaintext
+				)->plaintext
 				. '</span>&nbsp;'
 				. $discount
 				. '</div>';
@@ -324,7 +405,6 @@ class DealabsBridge extends BridgeAbstract {
 	 */
 	private function getImage($deal)
 	{
-
 		$selectorLazy = implode(
 			' ', /* Notice this is a space! */
 			array(
@@ -338,7 +418,7 @@ class DealabsBridge extends BridgeAbstract {
 			)
 		);
 
-			$selectorPlain = implode(
+		$selectorPlain = implode(
 			' ', /* Notice this is a space! */
 			array(
 				'thread-image',
@@ -348,21 +428,21 @@ class DealabsBridge extends BridgeAbstract {
 				'cept-thread-img'
 			)
 		);
-		if($deal->find('img[class='. $selectorLazy .']', 0) != null) {
+		if ($deal->find('img[class='. $selectorLazy .']', 0) != null) {
 			return json_decode(
 				html_entity_decode(
 					$deal->find('img[class='. $selectorLazy .']', 0)
-						->getAttribute('data-lazy-img')))->{'src'};
+					->getAttribute('data-lazy-img')))->{'src'};
 		} else {
-			return $deal->find('img[class='. $selectorPlain .']', 0	)->src;
+			return $deal->find('img[class*='. $selectorPlain .']', 0	)->src;
 		}
 	}
 
 	/**
-	 * Get the originating country from a Deal if it existsa
+	 * Get the originating country from a Deal if it exists
 	 * @return string String of the deal originating country
 	 */
-	private function getExpedition($deal)
+	private function getShipsFrom($deal)
 	{
 		$selector = implode(
 			' ', /* Notice this is a space! */
@@ -373,7 +453,7 @@ class DealabsBridge extends BridgeAbstract {
 				'text--color-greyShade'
 			)
 		);
-		if($deal->find('span[class='. $selector .']', 0) != null) {
+		if ($deal->find('span[class='. $selector .']', 0) != null) {
 			return '<div>'
 				. $deal->find('span[class='. $selector .']', 0)->children(2)->plaintext
 				. '</div>';
@@ -383,25 +463,12 @@ class DealabsBridge extends BridgeAbstract {
 	}
 
 	/**
-	 * Transforms a French date into a timestam
+	 * Transforms a local date into a timestamp
 	 * @return int timestamp of the input date
 	 */
 	private function parseDate($string)
 	{
-		$month_fr = array(
-			'janvier',
-			'février',
-			'mars',
-			'avril',
-			'mai',
-			'juin',
-			'juillet',
-			'août',
-			'septembre',
-			'octobre',
-			'novembre',
-			'décembre'
-		);
+		$month_local = $this->i8n('local-months');
 		$month_en = array(
 			'January',
 			'February',
@@ -416,12 +483,18 @@ class DealabsBridge extends BridgeAbstract {
 			'November',
 			'December'
 		);
-		$string = str_replace('Actualisé ', '', $string);
-		$date_str = trim(str_replace($month_fr, $month_en, $string));
 
-		if(!preg_match('/[0-9]{4}/', $string)) {
+		// A date can be prfixed with some words, we remove theme
+		$string = $this->removeDatePrefixes($string);
+		// We translate the local months name in the english one
+		$date_str = trim(str_replace($month_local, $month_en, $string));
+
+		// If the date does not contain any year, we add the current year
+		if (!preg_match('/[0-9]{4}/', $string)) {
 			$date_str .= ' ' . date('Y');
 		}
+
+		// Add the Hour and minutes
 		$date_str .= ' 00:00';
 
 		$date = DateTime::createFromFormat('j F Y H:i', $date_str);
@@ -429,21 +502,41 @@ class DealabsBridge extends BridgeAbstract {
 	}
 
 	/**
-	 * Transforms a relate French date into a timestam
+	 * Remove the prefix of a date if it has one
+	 * @return the date without prefiux
+	 */
+	private function removeDatePrefixes($string)
+	{
+		$string = str_replace($this->i8n('date-prefixes'), array(), $string);
+		return $string;
+	}
+
+	/**
+	 * Remove the suffix of a relative date if it has one
+	 * @return the relative date without suffixes
+	 */
+	private function removeRelativeDateSuffixes($string)
+	{
+		if (count($this->i8n('relative-date-ignore-suffix')) > 0) {
+			$string = preg_replace($this->i8n('relative-date-ignore-suffix'), '', $string);
+		}
+		return $string;
+	}
+
+	/**
+	 * Transforms a relative local date into a timestamp
 	 * @return int timestamp of the input date
 	 */
 	private function relativeDateToTimestamp($str) {
 		$date = new DateTime();
-		$search = array(
-			'il y a ',
-			'min',
-			'h',
-			'jour',
-			'jours',
-			'mois',
-			'ans',
-			'et '
-		);
+
+		// In case of update date, replace it by the regular relative date first word
+		$str = str_replace($this->i8n('relative-date-alt-prefixes'), $this->i8n('local-time-relative')[0], $str);
+
+		$str = $this->removeRelativeDateSuffixes($str);
+
+		$search = $this->i8n('local-time-relative');
+
 		$replace = array(
 			'-',
 			'minute',
@@ -458,18 +551,38 @@ class DealabsBridge extends BridgeAbstract {
 		return $date->getTimestamp();
 	}
 
+	/**
+	 * Returns the RSS Feed title according to the parameters
+	 * @return string the RSS feed Tiyle
+	 */
 	public function getName(){
 		switch($this->queriedContext) {
-			case 'Recherche par Mot(s) clé(s)':
-				return self::NAME . ' - Recherche : '. $this->getInput('q');
+			case $this->i8n('context-keyword'):
+				return $this->i8n('bridge-name') . ' - '. $this->i8n('title-keyword') .' : '. $this->getInput('q');
 				break;
-			case 'Deals par groupe':
-				$values = self::PARAMETERS['Deals par groupe']['groupe']['values'];
-				$groupe = array_search($this->getInput('groupe'), $values);
-				return self::NAME . ' - Groupe : '. $groupe;
+			case $this->i8n('context-group'):
+				$values = $this->getParameters()[$this->i8n('context-group')]['group']['values'];
+				$group = array_search($this->getInput('group'), $values);
+				return $this->i8n('bridge-name') . ' - '. $this->i8n('title-group'). ' : '. $group;
 				break;
 			default: // Return default value
-				return self::NAME;
+				return static::NAME;
+		}
+	}
+
+
+
+	/**
+	 * This is some "localisation" function that returns the needed content using
+	 * the "$lang" class variable in the local class
+	 * @return various the local content needed
+	 */
+	public function i8n($key)
+	{
+		if (array_key_exists($key, $this->lang)) {
+			return $this->lang[$key];
+		} else {
+			return null;
 		}
 	}
 

+ 1397 - 0
bridges/HotUKDealsBridge.php

@@ -0,0 +1,1397 @@
+<?php
+
+require_once(__DIR__ . '/DealabsBridge.php');
+class HotUKDealsBridge extends PepperBridgeAbstract {
+
+	const NAME = 'HotUKDeals bridge';
+	const URI = 'https://www.hotukdeals.com/';
+	const DESCRIPTION = 'Return the HotUKDeals search result using keywords';
+	const MAINTAINER = 'sysadminstory';
+	const PARAMETERS = array(
+		'Search by keyword(s))' => array (
+			'q' => array(
+				'name' => 'Keyword(s)',
+				'type' => 'text',
+				'required' => true
+			),
+			'hide_expired' => array(
+				'name' => 'Hide expired deals',
+				'type' => 'checkbox',
+				'required' => 'true'
+			),
+			'hide_local' => array(
+				'name' => 'Hide local deals',
+				'type' => 'checkbox',
+				'title' => 'Hide deals in physical store',
+				'required' => 'true'
+			),
+			'priceFrom' => array(
+				'name' => 'Minimal Price',
+				'type' => 'text',
+				'title' => 'Minmal Price in Pounds',
+				'required' => 'false',
+				'defaultValue' => ''
+			),
+			'priceTo' => array(
+				'name' => 'Maximum Price',
+				'type' => 'text',
+				'title' => 'Maximum Price in Pounds',
+				'required' => 'false',
+				'defaultValue' => ''
+			),
+		),
+
+		'Deals per group' => array(
+			'group' => array(
+				'name' => 'Group',
+				'type' => 'list',
+				'required' => 'true',
+				'title' => 'Group whose deals must be displayed',
+				'values' => array(
+					'2DS' => '2ds',
+					'3D Bluray' => '3d-bluray',
+					'3D Glasses' => '3d-glasses',
+					'3D Printer' => '3d-printer',
+					'3DS' => '3ds',
+					'3DS Games' => '3ds-games',
+					'3D TV' => '3d-tv',
+					'4G' => '4g',
+					'4k Bluray' => '4k-bluray',
+					'4k Monitor' => '4k-monitor',
+					'4K TV' => '4k-tv',
+					'7up' => '7up',
+					'144Hz Monitor' => '144hz',
+					'AA Batteries' => 'aa',
+					'Acer' => 'acer',
+					'Actifry' => 'actifry',
+					'Action Camera' => 'action-camera',
+					'Add On Item' => 'add-on-item',
+					'Adidas' => 'adidas',
+					'Adobe' => 'adobe',
+					'Aftershave' => 'aftershave',
+					'Air Bed' => 'air-bed',
+					'Air Conditioner' => 'air-con',
+					'Air Fryer' => 'air-fryer',
+					'Airport Parking' => 'airport-parking',
+					'AKG' => 'akg',
+					'Alarm' => 'alarm',
+					'Alcatel' => 'alcatel',
+					'Alcohol' => 'alcohol',
+					'Alienware' => 'alienware',
+					'Alton Towers' => 'alton-towers',
+					'Amazon Echo' => 'amazon-echo',
+					'Amazon Fire Stick' => 'amazon-fire-stick',
+					'Amazon Fire Tv' => 'fire-tv',
+					'Amazon Pantry' => 'amazon-pantry',
+					'Amazon Prime' => 'amazon-prime',
+					'Amazon Warehouse' => 'amazon-warehouse',
+					'AMD' => 'amd',
+					'Amex' => 'amex',
+					'Amiibo' => 'amiibo',
+					'Amsterdam' => 'amsterdam',
+					'Android' => 'android',
+					'Android Tablet' => 'android-tablet',
+					'Android TV' => 'android-tv',
+					'Anker' => 'anker',
+					'Apple' => 'apple',
+					'Apple TV' => 'apple-tv',
+					'Apple Watch' => 'apple-watch',
+					'Armani' => 'armani',
+					'Asics' => 'asics',
+					'ASUS' => 'asus',
+					'Audi' => 'audi',
+					'Baby' => 'baby',
+					'Baby & Kids' => 'kids',
+					'Baby Monitor' => 'baby-monitor',
+					'Baby Swing' => 'baby-swing',
+					'Backpack' => 'backpack',
+					'Bag' => 'bag',
+					'Bank' => 'bank',
+					'Barbour' => 'barbour',
+					'Barcelona' => 'barcelona',
+					'Bathroom' => 'bathroom',
+					'Batman' => 'batman',
+					'Battery' => 'battery',
+					'Battlefield' => 'battlefield',
+					'Battlefield 1' => 'battlefield-1',
+					'BBQ' => 'bbq',
+					'Bean To Cup' => 'bean-to-cup',
+					'Beard Trimmer' => 'beard-trimmer',
+					'Bed' => 'bed',
+					'Bedding' => 'bedding',
+					'Bed Frame' => 'bed-frame',
+					'Beer' => 'beer',
+					'Beko' => 'beko',
+					'Belfast' => 'belfast',
+					'Bench' => 'bench',
+					'Berghaus' => 'berghaus',
+					'Bike' => 'bike',
+					'Bin' => 'bin',
+					'Bioshock' => 'bioshock',
+					'Black Ops 3' => 'black-ops-3',
+					'Blackpool' => 'blackpool',
+					'Blender' => 'blender',
+					'Blinds' => 'blinds',
+					'Bloodborne' => 'bloodborne',
+					'Blu-Ray' => 'blu-ray',
+					'Bluetooth Headphones' => 'bluetooth-headphones',
+					'Bluetooth Speaker' => 'bluetooth-speaker',
+					'BMW' => 'bmw',
+					'Board Game' => 'board-game',
+					'Boiler' => 'boiler',
+					'Bosch' => 'bosch',
+					'Bose' => 'bose',
+					'Bourbon' => 'bourbon',
+					'Boxers' => 'boxers',
+					'Bra' => 'bra',
+					'Braun' => 'braun',
+					'Breakdown' => 'breakdown',
+					'Brewdog' => 'brewdog',
+					'Brita' => 'brita',
+					'Broadband' => 'broadband',
+					'BT' => 'bt',
+					'Bt Sport' => 'bt-sport',
+					'Buggy' => 'buggy',
+					'Call Of Duty' => 'call-of-duty',
+					'Camera' => 'camera',
+					'Camera Lens' => 'lens',
+					'Camping' => 'camping',
+					'Candle' => 'candle',
+					'Canon' => 'canon',
+					'Canvas' => 'canvas',
+					'Car' => 'car',
+					'Caravan' => 'caravan',
+					'Car Battery' => 'car-battery',
+					'Car Hire' => 'car-hire',
+					'Car Insurance' => 'car-insurance',
+					'Car Lease' => 'car-lease',
+					'Car Mats' => 'car-mats',
+					'Carpet' => 'carpet',
+					'Carpet Cleaner' => 'carpet-cleaner',
+					'Car Seat' => 'car-seat',
+					'Car Stereo' => 'car-stereo',
+					'Casio' => 'casio',
+					'Caterpillar Boots' => 'caterpillar',
+					'Cat Food' => 'cat-food',
+					'CCTV' => 'cctv',
+					'Chainsaw' => 'chainsaw',
+					'Chair' => 'chair',
+					'Champagne' => 'champagne',
+					'Charger' => 'charger',
+					'Chessington' => 'chessington',
+					'Chest Freezer' => 'chest-freezer',
+					'Chocolate' => 'chocolate',
+					'Chromebook' => 'chromebook',
+					'Chromecast' => 'chromecast',
+					'Cider' => 'cider',
+					'Cinema' => 'cinema',
+					'Cineworld' => 'cineworld',
+					'Circular Saw' => 'circular-saw',
+					'Circulon' => 'circulon',
+					'Citizen' => 'citizen',
+					'Clarins' => 'clarins',
+					'Clarks' => 'clarks',
+					'Clinique' => 'clinique',
+					'Clothes' => 'clothes',
+					'Coat' => 'coat',
+					'Coffee' => 'coffee',
+					'Coffee Machine' => 'coffee-machine',
+					'Coke' => 'coke',
+					'Compost' => 'compost',
+					'Computers' => 'computers',
+					'Converse' => 'converse',
+					'Cooker' => 'cooker',
+					'Cordless Phone' => 'cordless-phone',
+					'Corsair' => 'corsair',
+					'Cot' => 'cot',
+					'CPU' => 'cpu',
+					'Crash Bandicoot' => 'crash-bandicoot',
+					'Credit Card' => 'credit-card',
+					'Cricket' => 'cricket',
+					'Crisps' => 'crisps',
+					'Crocs' => 'crocs',
+					'Cruise' => 'cruise',
+					'Cuprinol' => 'cuprinol',
+					'Cutlery' => 'cutlery',
+					'Dab Radio' => 'dab-radio',
+					'Dark Souls' => 'dark-souls',
+					'Dark Souls 3' => 'dark-souls-3',
+					'Dash Cam' => 'dash-cam',
+					'Days Out' => 'days-out',
+					'DDR3' => 'ddr3',
+					'DDR4' => 'ddr4',
+					'Deezer' => 'deezer',
+					'Dehumidifier' => 'dehumidifier',
+					'Dell' => 'dell',
+					'Delonghi' => 'delonghi',
+					'Denon' => 'denon',
+					'Desk' => 'desk',
+					'Desktop' => 'desktop',
+					'Destiny' => 'destiny',
+					'Destiny 2' => 'destiny-2',
+					'Deus Ex' => 'deus-ex',
+					'Dewalt' => 'dewalt',
+					'Digital Camera' => 'digital-camera',
+					'Dining Table' => 'dining-table',
+					'Dinner Set' => 'dinner-set',
+					'Dirt 4' => 'dirt-4',
+					'Dishonored 2' => 'dishonored-2',
+					'Dishwasher' => 'dishwasher',
+					'Disney' => 'disney',
+					'Disney Infinity' => 'disney-infinity',
+					'Disneyland' => 'disneyland',
+					'DIY' => 'diy',
+					'Doctor Who' => 'doctor-who',
+					'Dog' => 'dog',
+					'Dog Bed' => 'dog-bed',
+					'Dolce Gusto' => 'dolce-gusto',
+					'DOOM' => 'doom',
+					'Dremel' => 'dremel',
+					'Dress' => 'dress',
+					'Drill' => 'drill',
+					'Drone' => 'drone',
+					'Dryer' => 'dryer',
+					'DSLR Camera' => 'dslr',
+					'Dubai' => 'dubai',
+					'Dulux' => 'dulux',
+					'Durex' => 'durex',
+					'Duvet' => 'duvet',
+					'DVD' => 'dvd',
+					'DVD Player' => 'dvd-player',
+					'Dying Light' => 'dying-light',
+					'Dyson' => 'dyson',
+					'Dyson V6' => 'dyson-v6',
+					'Dyson V8' => 'dyson-v8',
+					'E-Cig' => 'e-cig',
+					'EA' => 'ea',
+					'EA Access' => 'ea-access',
+					'Earphones' => 'earphones',
+					'Earrings' => 'earrings',
+					'Eastpak' => 'eastpak',
+					'eBook' => 'ebook',
+					'Eco-Drive' => 'eco-drive',
+					'Ecobubble' => 'ecobubble',
+					'Edifice' => 'edifice',
+					'Edinburgh' => 'edinburgh',
+					'EE' => 'ee',
+					'Egg' => 'egg',
+					'Egypt' => 'egypt',
+					'Elder Scrolls' => 'elder-scrolls',
+					'Electric Bike' => 'electric-bike',
+					'Electric Cooker' => 'electric-cooker',
+					'Electric Fires' => 'electric-fire',
+					'Electric Shower' => 'electric-shower',
+					'Electric Toothbrush' => 'electric-toothbrush',
+					'Electronics' => 'electronics',
+					'Elemis' => 'elemis',
+					'Elephone' => 'elephone',
+					'Elgato' => 'elgato',
+					'Elite Dangerous' => 'elite-dangerous',
+					'Emirates' => 'emirates',
+					'Eneloop' => 'eneloop',
+					'Energy' => 'energy',
+					'Engine Oil' => 'engine-oil',
+					'Entertainment' => 'entertainment',
+					'Epilator' => 'epilator',
+					'Epson' => 'epson',
+					'eReader' => 'ereader',
+					'Espresso' => 'espresso',
+					'Estee Lauder' => 'estee-lauder',
+					'Ethernet' => 'ethernet',
+					'Eurostar' => 'eurostar',
+					'Eurotunnel' => 'eurotunnel',
+					'EVGA' => 'evga',
+					'Extension Lead' => 'extension-lead',
+					'External Hard Drive' => 'external-hard-drive',
+					'Fairy' => 'fairy',
+					'Fallout' => 'fallout',
+					'Fallout 4' => 'fallout-4',
+					'Fan' => 'fan',
+					'Fancy Dress' => 'fancy-dress',
+					'Far Cry' => 'far-cry',
+					'Far Cry 4' => 'far-cry-4',
+					'Far Cry Primal' => 'far-cry-primal',
+					'Fashion' => 'fashion',
+					'Fathers Day' => 'fathers-day',
+					'Felix' => 'felix',
+					'Fence' => 'fence',
+					'Fender Guitars' => 'fender',
+					'Ferrero Rocher' => 'ferrero-rocher',
+					'Ferry' => 'ferry',
+					'Festival' => 'festival',
+					'Fiat' => 'fiat',
+					'FIFA' => 'fifa',
+					'FIFA 17' => 'fifa-17',
+					'FIFA 18' => 'fifa-18',
+					'Figures' => 'figures',
+					'Final Fantasy' => 'final-fantasy',
+					'Finance & Utilities' => 'personal-finance',
+					'Finish' => 'finish',
+					'Finlux' => 'finlux',
+					'Fire Emblem' => 'fire-emblem',
+					'Fire Pit' => 'fire-pit',
+					'Fireplace' => 'fireplace',
+					'Fish' => 'fish',
+					'Fisher Price' => 'fisher-price',
+					'Fishing' => 'fishing',
+					'Fiskars' => 'fiskars',
+					'Fitbit' => 'fitbit',
+					'Fitbit Alta' => 'fitbit-alta',
+					'Fitbit Blaze' => 'fitbit-blaze',
+					'Fitbit Charge 2' => 'fitbit-charge-2',
+					'Fitness Tracker' => 'fitness-tracker',
+					'Flamingo Land' => 'flamingo-land',
+					'Flask' => 'flask',
+					'Fleece' => 'fleece',
+					'Flight' => 'flight',
+					'Flip Flops' => 'flip-flops',
+					'Floodlight' => 'floodlight',
+					'Flooring' => 'flooring',
+					'Florida' => 'florida',
+					'Flowers' => 'flowers',
+					'Flybe' => 'flybe',
+					'Flymo' => 'flymo',
+					'Food' => 'food',
+					'Food Mixer' => 'food-mixer',
+					'Food Processor' => 'food-processor',
+					'Football' => 'football',
+					'Football Boots' => 'football-boots',
+					'Football Manager' => 'football-manager',
+					'Football Shirt' => 'football-shirt',
+					'Ford' => 'ford',
+					'For Honor' => 'for-honor',
+					'Formula 1' => 'f1',
+					'Forza' => 'forza',
+					'Forza Horizon' => 'forza-horizon',
+					'Forza Horizon 3' => 'forza-horizon-3',
+					'Fossil' => 'fossil',
+					'Fosters' => 'fosters',
+					'Foundation' => 'foundation',
+					'France' => 'france',
+					'Fred Perry' => 'fred-perry',
+					'Freebies' => 'freebies',
+					'Freesat' => 'freesat',
+					'Freeview' => 'freeview',
+					'Freezer' => 'freezer',
+					'Fridge' => 'fridge',
+					'Fridge Freezer' => 'fridge-freezer',
+					'Frozen' => 'frozen',
+					'Fruit' => 'fruit',
+					'Fryer' => 'fryer',
+					'Frying Pan' => 'frying-pan',
+					'Fujifilm' => 'fuji',
+					'Funko Pop' => 'funko-pop',
+					'Furby' => 'furby',
+					'Furniture' => 'furniture',
+					'Fusion' => 'fusion',
+					'G-Shock' => 'g-shock',
+					'G-Sync Monitor' => 'g-sync',
+					'Game Of Thrones' => 'game-of-thrones',
+					'Gaming' => 'gaming',
+					'Gaming Chair' => 'gaming-chair',
+					'Gaming Controller' => 'controller',
+					'Gaming Headset' => 'gaming-headset',
+					'Gaming Keyboard' => 'gaming-keyboard',
+					'Gaming Laptop' => 'gaming-laptop',
+					'Gaming Monitor' => 'gaming-monitor',
+					'Gaming PC' => 'gaming-pc',
+					'Garage' => 'garage',
+					'Garden' => 'garden',
+					'Garden Furniture' => 'garden-furniture',
+					'Garmin' => 'garmin',
+					'Gas' => 'gas',
+					'Gas Cooker' => 'gas-cooker',
+					'Gatwick' => 'gatwick',
+					'Gazebo' => 'gazebo',
+					'Gazelle' => 'gazelle',
+					'GBK' => 'gbk',
+					'Gears Of War' => 'gears-of-war',
+					'Gears Of War 4' => 'gears-of-war-4',
+					'GeForce' => 'geforce',
+					'George Foreman' => 'george-foreman',
+					'Geox' => 'geox',
+					'GHD' => 'ghd',
+					'Ghostbusters' => 'ghostbusters',
+					'Ghost Recon' => 'ghost-recon',
+					'Gibson Guitars' => 'gibson',
+					'Giffgaff' => 'giffgaff',
+					'Gift Card' => 'gift-card',
+					'Gifts' => 'gifts',
+					'Gift Set' => 'gift-set',
+					'Gilet' => 'gilet',
+					'Gillette' => 'gillette',
+					'Gimbal' => 'gimbal',
+					'Gin' => 'gin',
+					'Glasgow' => 'glasgow',
+					'Glasses' => 'glasses',
+					'Gloves' => 'gloves',
+					'Glue Gun' => 'glue-gun',
+					'Gluten Free' => 'gluten-free',
+					'Goggles' => 'goggles',
+					'Go Kart' => 'go-kart',
+					'Golf' => 'golf',
+					'Golf Balls' => 'golf-balls',
+					'Golf Clubs' => 'golf-clubs',
+					'Goodfellas' => 'goodfellas',
+					'Google' => 'google',
+					'Google Home' => 'google-home',
+					'Google Pixel' => 'google-pixel',
+					'Go Outdoors' => 'go-outdoors',
+					'GoPro' => 'gopro',
+					'Graco' => 'graco',
+					'Grand National' => 'grand-national',
+					'Graphics Card' => 'graphics-card',
+					'Gravity Rush' => 'gravity-rush',
+					'Graze' => 'graze',
+					'Greece' => 'greece',
+					'Greenhouse' => 'greenhouse',
+					'Greggs' => 'greggs',
+					'Grey Goose' => 'grey-goose',
+					'Grill' => 'grill',
+					'Grinder' => 'grinder',
+					'Grobag' => 'grobag',
+					'Groceries' => 'groceries',
+					'GTA' => 'gta',
+					'GTA V' => 'gta-v',
+					'Gtx 970' => 'gtx-970',
+					'GTX 1060' => 'gtx-1060',
+					'GTX 1070' => 'gtx-1070',
+					'GTX 1080' => 'gtx-1080',
+					'Guardians Of The Galaxy' => 'guardians-of-the-galaxy',
+					'Gucci' => 'gucci',
+					'Guinness' => 'guinness',
+					'Guitar' => 'guitar',
+					'Guitar Hero' => 'guitar-hero',
+					'Gullivers' => 'gullivers',
+					'Gym' => 'gym',
+					'Gym Membership' => 'gym-membership',
+					'H1z1' => 'h1z1',
+					'Habitat' => 'habitat',
+					'Hair' => 'hair',
+					'Hair Clipper' => 'hair-clipper',
+					'Hair Dryer' => 'hair-dryer',
+					'Hair Dye' => 'hair-dye',
+					'Halifax' => 'halifax',
+					'Halo' => 'halo',
+					'Halo 5' => 'halo-5',
+					'Hammer' => 'hammer',
+					'Hammock' => 'hammock',
+					'Hamper' => 'hamper',
+					'Handbag' => 'handbag',
+					'Hand Mixer' => 'hand-mixer',
+					'Happyland' => 'happyland',
+					'Hard Drive' => 'hard-drive',
+					'Haribo' => 'haribo',
+					'Harman Kardon' => 'harman-kardon',
+					'Harmony' => 'harmony',
+					'Harry Potter' => 'harry-potter',
+					'Hat' => 'hat',
+					'Hatchimals' => 'hatchimals',
+					'Hayfever' => 'hayfever',
+					'Hdr Tv' => 'hdr-tv',
+					'HD TV' => 'hd-tv',
+					'Headboard' => 'headboard',
+					'Headphones' => 'headphones',
+					'Headset' => 'headset',
+					'Health & Beauty' => 'beauty',
+					'Heater' => 'heater',
+					'Hedge Trimmer' => 'hedge-trimmer',
+					'Heineken' => 'heineken',
+					'Heinz' => 'heinz',
+					'Helmet' => 'helmet',
+					'Hermes' => 'hermes',
+					'Highchair' => 'highchair',
+					'Hiking' => 'hiking',
+					'Hilton' => 'hilton',
+					'Hisense' => 'hisense',
+					'Hitachi' => 'hitachi',
+					'Hitman' => 'hitman',
+					'Hive' => 'hive',
+					'Hob' => 'hob',
+					'Holiday Inn' => 'holiday-inn',
+					'Holidays & Leisure' => 'holiday',
+					'Home & Garden' => 'home',
+					'Home Cinema' => 'home-cinema',
+					'Homedics' => 'homedics',
+					'Homefront' => 'homefront',
+					'Homeplug' => 'homeplug',
+					'Home Security' => 'home-security',
+					'Honey' => 'honey',
+					'Honeywell' => 'honeywell',
+					'Hong Kong' => 'hong-kong',
+					'Honor' => 'honor',
+					'Honor 6x' => 'honor-6x',
+					'Hoodie' => 'hoodie',
+					'Hoover' => 'hoover',
+					'Horizon Zero Dawn' => 'horizon-zero-dawn',
+					'Hornby' => 'hornby',
+					'Hose' => 'hose',
+					'Hotel' => 'hotel',
+					'Hotpoint' => 'hotpoint',
+					'Hot Tub' => 'hot-tub',
+					'Hot Wheels' => 'hot-wheels',
+					'Hozelock' => 'hozelock',
+					'HP' => 'hp',
+					'HP Envy' => 'hp-envy',
+					'HP Laptop' => 'hp-laptop',
+					'H Samuel' => 'h-samuel',
+					'HTC' => 'htc',
+					'HTC 10' => 'htc-10',
+					'HTC Vive' => 'htc-vive',
+					'Huawei' => 'huawei',
+					'Huawei P9' => 'huawei-p9',
+					'Huggies' => 'huggies',
+					'Hugo Boss' => 'hugo-boss',
+					'Humax' => 'humax',
+					'Humidifier' => 'humidifier',
+					'Hunter' => 'hunter',
+					'Hydro 5' => 'hydro-5',
+					'Hyperx' => 'hyperx',
+					'Hyundai' => 'hyundai',
+					'Iams Pet Food' => 'iams',
+					'Ibiza' => 'ibiza',
+					'Icandy' => 'icandy',
+					'Ice Cream' => 'ice-cream',
+					'Ice Cream Maker' => 'ice-cream-maker',
+					'Imaginext' => 'imaginext',
+					'Impact Driver' => 'impact-driver',
+					'Indesit' => 'indesit',
+					'India' => 'india',
+					'Inflatable' => 'inflatable',
+					'Injustice' => 'injustice',
+					'Ink' => 'ink',
+					'Inner Tube' => 'inner-tube',
+					'Instant Ink' => 'instant-ink',
+					'Insulation' => 'insulation',
+					'Insurance' => 'insurance',
+					'Intel' => 'intel',
+					'Intel Atom' => 'atom',
+					'Intel i3' => 'i3',
+					'Intel i5' => 'i5',
+					'Intel i7' => 'i7',
+					'Internal Hard Drive' => 'internal-hard-drive',
+					'Internet' => 'internet',
+					'In The Night Garden' => 'in-the-night-garden',
+					'iOS' => 'ios',
+					'iPad' => 'ipad',
+					'iPad Air' => 'ipad-air',
+					'iPad Case' => 'ipad-case',
+					'iPad Mini' => 'ipad-mini',
+					'iPad Pro' => 'ipad-pro',
+					'Ip Camera' => 'ip-camera',
+					'iPhone' => 'iphone',
+					'iPhone 5S' => 'iphone-5s',
+					'iPhone 6' => 'iphone-6',
+					'iPhone 6 Plus' => 'iphone-6-plus',
+					'iPhone 6s' => 'iphone-6s',
+					'iPhone 6s Plus' => 'iphone-6s-plus',
+					'iPhone 7' => 'iphone-7',
+					'iPhone 7 Plus' => 'iphone-7-plus',
+					'iPhone Case' => 'iphone-case',
+					'Iphone SE' => 'iphone-se',
+					'iPod' => 'ipod',
+					'iPod Nano' => 'ipod-nano',
+					'iPod Touch' => 'ipod-touch',
+					'Ireland' => 'ireland',
+					'Irn Bru' => 'irn-bru',
+					'Iron' => 'iron',
+					'Ironing Board' => 'ironing-board',
+					'Isle Of Wight' => 'isle-of-wight',
+					'Isofix' => 'isofix',
+					'Issey Miyake' => 'issey-miyake',
+					'Italy' => 'italy',
+					'iTunes' => 'itunes',
+					'ITV' => 'itv',
+					'Jabra' => 'jabra',
+					'Jack Daniels' => 'jack-daniels',
+					'Jacket' => 'jacket',
+					'Jack Wills' => 'jack-wills',
+					'Jack Wolfskin' => 'jack-wolfskin',
+					'Jaguar' => 'jaguar',
+					'Jamaica' => 'jamaica',
+					'Jameson' => 'jameson',
+					'Japan' => 'japan',
+					'Jawbone' => 'jawbone',
+					'Jaybird' => 'jaybird',
+					'JBL' => 'jbl',
+					'Jeans' => 'jeans',
+					'Jewellery' => 'jewellery',
+					'Jigsaw' => 'jigsaw',
+					'Jim Beam' => 'jim-beam',
+					'Jimmy Choo' => 'jimmy-choo',
+					'Joop' => 'joop',
+					'Jordan' => 'jordan',
+					'Joseph Joseph' => 'joseph-joseph',
+					'Joules' => 'joules',
+					'Juice' => 'juice',
+					'Juicer' => 'juicer',
+					'Jumper' => 'jumper',
+					'Jumperoo' => 'jumperoo',
+					'Jura' => 'jura',
+					'Just Cause 3' => 'just-cause-3',
+					'Just Dance' => 'just-dance',
+					'JVC' => 'jvc',
+					'Karcher' => 'karcher',
+					'Kaspersky' => 'kaspersky',
+					'Kayak' => 'kayak',
+					'Keg' => 'keg',
+					'Kenwood' => 'kenwood',
+					'Kenwood kMix' => 'kmix',
+					'Keter' => 'keter',
+					'Kettle' => 'kettle',
+					'Kettlebell' => 'kettlebell',
+					'Keyboard' => 'keyboard',
+					'Kia' => 'kia',
+					'Kickers' => 'kickers',
+					'Kids Bike' => 'kids-bike',
+					'Kinder' => 'kinder',
+					'Kindle' => 'kindle',
+					'Kindle Fire' => 'kindle-fire',
+					'Kindle Paperwhite' => 'kindle-paperwhite',
+					'Kinect' => 'kinect',
+					'Kingdom Hearts' => 'kingdom-hearts',
+					'King Size' => 'king-size',
+					'Kirby' => 'kirby',
+					'Kitchen' => 'kitchen',
+					'KitchenAid' => 'kitchenaid',
+					'Kitchen Roll' => 'kitchen-roll',
+					'Kitsound' => 'kitsound',
+					'Knickers' => 'knickers',
+					'Knife' => 'knife',
+					'Kobo' => 'kobo',
+					'Kodi' => 'kodi',
+					'Kopparberg' => 'kopparberg',
+					'Kraken' => 'kraken',
+					'Krakow' => 'krakow',
+					'Krispy Kreme' => 'krispy-kreme',
+					'Kurt Geiger' => 'kurt-geiger',
+					'Lacoste' => 'lacoste',
+					'Ladder' => 'ladder',
+					'Lamb' => 'lamb',
+					'Laminate' => 'laminate',
+					'Lamp' => 'lamp',
+					'Lancome' => 'lancome',
+					'Laptop' => 'laptop',
+					'Laser Printer' => 'laser-printer',
+					'Laura Ashley' => 'laura-ashley',
+					'Lavazza' => 'lavazza',
+					'Lavender' => 'lavender',
+					'Lawnmower' => 'lawnmower',
+					'Lay-Z-Spa' => 'lay-z-spa',
+					'Le Creuset' => 'le-creuset',
+					'LED Bulbs' => 'led-bulbs',
+					'LED TV' => 'led-tv',
+					'Leeds' => 'leeds',
+					'Lego' => 'lego',
+					'Lego City' => 'lego-city',
+					'Lego Dimensions' => 'lego-dimensions',
+					'Lego Friends' => 'lego-friends',
+					'Legoland' => 'legoland',
+					'Lego Star Wars' => 'lego-star-wars',
+					'Lego Technic' => 'lego-technic',
+					'Leicester' => 'leicester',
+					'Lenovo' => 'lenovo',
+					'Lenovo Tablet' => 'lenovo-tablet',
+					'Lenovo Yoga' => 'lenovo-yoga',
+					'Levi' => 'levi',
+					'LG' => 'lg',
+					'LG G5' => 'lg-g5',
+					'LG G6' => 'lg-g6',
+					'LG TV' => 'lg-tv',
+					'Light' => 'light',
+					'Lighting' => 'lighting',
+					'Lightning Cable' => 'lightning-cable',
+					'Lindor' => 'lindor',
+					'Lindt' => 'lindt',
+					'Lingerie' => 'lingerie',
+					'Linx' => 'linx',
+					'Little Tikes' => 'little-tikes',
+					'Liverpool' => 'liverpool',
+					'Logitech' => 'logitech',
+					'London' => 'london',
+					'London Eye' => 'london-eye',
+					'London Zoo' => 'london-zoo',
+					'Lottery' => 'lottery',
+					'Lounger' => 'lounger',
+					'Lurpak' => 'lurpak',
+					'Lynx' => 'lynx',
+					'MacBook' => 'macbook',
+					'MacBook Air' => 'macbook-air',
+					'MacBook Pro' => 'macbook-pro',
+					'Mac Mini' => 'mac-mini',
+					'Mad Max' => 'mad-max',
+					'Mafia 3' => 'mafia-3',
+					'Magazine' => 'magazine',
+					'Magimix' => 'magimix',
+					'Majorca' => 'majorca',
+					'Make Up' => 'make-up',
+					'Makita' => 'makita',
+					'Maldives' => 'maldives',
+					'Manchester' => 'manchester',
+					'Manfrotto' => 'manfrotto',
+					'Marc Jacobs' => 'marc-jacobs',
+					'Mario' => 'mario',
+					'Mario Kart' => 'mario-kart',
+					'Mario Kart 8' => 'mario-kart-8',
+					'Mario Kart 8 Deluxe' => 'mario-kart-8-deluxe',
+					'Marvel' => 'marvel',
+					'Mascara' => 'mascara',
+					'Massage' => 'massage',
+					'Mass Effect' => 'mass-effect',
+					'Mass Effect Andromeda' => 'mass-effect-andromeda',
+					'Maternity' => 'maternity',
+					'Mattress' => 'mattress',
+					'Mattress Topper' => 'mattress-topper',
+					'Mavic' => 'mavic',
+					'Maxi Cosi' => 'maxi-cosi',
+					'Meat' => 'meat',
+					'Mechanical Keyboard' => 'mechanical-keyboard',
+					'Medion' => 'medion',
+					'Memory Foam' => 'memory-foam',
+					'Mens Boots' => 'mens-boots',
+					'Mens Fashion' => 'mens-clothing',
+					'Mens Shoes' => 'mens-shoes',
+					'Mercedes' => 'mercedes',
+					'Merlin' => 'merlin',
+					'Merrell' => 'merrell',
+					'Mexico' => 'mexico',
+					'Michael Kors' => 'michael-kors',
+					'Microphone' => 'microphone',
+					'Micro SD' => 'micro-sd',
+					'Microserver' => 'microserver',
+					'Microsoft' => 'microsoft',
+					'Microsoft Office' => 'microsoft-office',
+					'Microwave' => 'microwave',
+					'Miele' => 'miele',
+					'Milwaukee' => 'milwaukee',
+					'Minecraft' => 'minecraft',
+					'Mini' => 'mini',
+					'Mini Fridge' => 'mini-fridge',
+					'Mini PC' => 'mini-pc',
+					'Mirror' => 'mirror',
+					'Mitre Saw' => 'mitre-saw',
+					'Mobile Broadband' => 'mobile-broadband',
+					'Mobile Contract' => 'mobile-contract',
+					'Mobile Phone' => 'mobile-phone',
+					'Mobiles' => 'mobiles',
+					'Molton Brown' => 'molton-brown',
+					'Monitor' => 'monitor',
+					'Monopoly' => 'monopoly',
+					'Monsoon' => 'monsoon',
+					'Mop' => 'mop',
+					'Morocco' => 'morocco',
+					'Mortgage' => 'mortgage',
+					'Moses Basket' => 'moses-basket',
+					'Mot' => 'mot',
+					'Motherboard' => 'motherboard',
+					'Moto 360' => 'moto-360',
+					'Moto G' => 'moto-g',
+					'Moto G4' => 'moto-g4',
+					'Moto G5' => 'moto-g5',
+					'Motorcycle' => 'motorcycle',
+					'Motorola' => 'motorola',
+					'Moto Z' => 'moto-z',
+					'Mountain Bike' => 'mountain-bike',
+					'Mouse' => 'mouse',
+					'Mouse Mat' => 'mouse-mat',
+					'Movie' => 'movie',
+					'MP3 Player' => 'mp3-player',
+					'MSI' => 'msi',
+					'Mug' => 'mug',
+					'Multitool' => 'multitool',
+					'Music' => 'music',
+					'My Little Pony' => 'my-little-pony',
+					'Nandos' => 'nandos',
+					'NAS' => 'nas',
+					'National Express' => 'national-express',
+					'National Trust' => 'national-trust',
+					'Necklace' => 'necklace',
+					'Nectar' => 'nectar',
+					'Neff' => 'neff',
+					'Nerf' => 'nerf',
+					'Nescafe' => 'nescafe',
+					'Nespresso' => 'nespresso',
+					'Nest' => 'nest',
+					'Netflix' => 'netflix',
+					'Netgear' => 'netgear',
+					'Netgear Arlo' => 'arlo',
+					'New Balance' => 'new-balance',
+					'Newcastle' => 'newcastle',
+					'New Look' => 'new-look',
+					'New York' => 'new-york',
+					'Nextbase' => 'nextbase',
+					'Nexus' => 'nexus',
+					'NFL' => 'nfl',
+					'Nier' => 'nier',
+					'Nike' => 'nike',
+					'Nike Air Max' => 'nike-air-max',
+					'Nikon' => 'nikon',
+					'Nilfisk' => 'nilfisk',
+					'Ninja' => 'ninja',
+					'Nintendo' => 'nintendo',
+					'Nintendo DS' => 'nintendo-ds',
+					'Nintendo eShop' => 'eshop',
+					'Nintendo Switch' => 'nintendo-switch',
+					'Nioh' => 'nioh',
+					'Nissan' => 'nissan',
+					'Nivea' => 'nivea',
+					'Nokia' => 'nokia',
+					'North Face' => 'north-face',
+					'Norton' => 'norton',
+					'Note 4' => 'note-4',
+					'Now TV' => 'now-tv',
+					'Nursery' => 'nursery',
+					'Nus' => 'nus',
+					'Nutella' => 'nutella',
+					'Nutribullet' => 'nutribullet',
+					'Nutri Ninja' => 'nutri-ninja',
+					'NVIDIA' => 'nvidia',
+					'O2' => 'o2',
+					'O2 Refresh' => 'o2-refresh',
+					'Oak' => 'oak',
+					'Oakley' => 'oakley',
+					'Oculus' => 'oculus',
+					'Odeon' => 'odeon',
+					'Office' => 'office',
+					'Office Chair' => 'office-chair',
+					'OLED TV' => 'oled',
+					'Olympus' => 'olympus',
+					'Oneplus' => 'oneplus',
+					'Onkyo' => 'onkyo',
+					'Oral-B' => 'oral-b',
+					'Origin' => 'origin',
+					'Orlando' => 'orlando',
+					'Osprey' => 'osprey',
+					'Ottoman' => 'ottoman',
+					'Outdoor' => 'outdoor',
+					'Oven' => 'oven',
+					'Overwatch' => 'overwatch',
+					'Paddling Pool' => 'paddling-pool',
+					'Paint' => 'paint',
+					'Pampers' => 'pampers',
+					'Pan' => 'pan',
+					'Panasonic' => 'panasonic',
+					'Panasonic Lumix' => 'lumix',
+					'Pandora' => 'pandora',
+					'Papa Johns' => 'papa-johns',
+					'Parasol' => 'parasol',
+					'Parcel' => 'parcel',
+					'Paris' => 'paris',
+					'Parking' => 'parking',
+					'Paw Patrol' => 'paw-patrol',
+					'PAYG' => 'payg',
+					'Paypal' => 'paypal',
+					'PC' => 'pc',
+					'PC Case' => 'pc-case',
+					'PC Game' => 'pc-game',
+					'Pebble' => 'pebble',
+					'Peppa Pig' => 'peppa-pig',
+					'Pepsi' => 'pepsi',
+					'Perfume' => 'perfume',
+					'Persona' => 'persona',
+					'Persona 5' => 'persona-5',
+					'Petrol' => 'petrol',
+					'Philips' => 'philips',
+					'Philips Hue' => 'philips-hue',
+					'Phones' => 'phone',
+					'Photo' => 'photo',
+					'Piano' => 'piano',
+					'Pillow' => 'pillow',
+					'Pizza' => 'pizza',
+					'Plant' => 'plant',
+					'Playhouse' => 'playhouse',
+					'Playmobil' => 'playmobil',
+					'Playstation' => 'playstation',
+					'Playstation Plus' => 'playstation-plus',
+					'Playstation VR' => 'playstation-vr',
+					'Pokemon' => 'pokemon',
+					'Pool' => 'pool',
+					'Power Bank' => 'power-bank',
+					'Powerline' => 'powerline',
+					'Power Rangers' => 'power-rangers',
+					'Pram' => 'pram',
+					'Pressure Cooker' => 'pressure-cooker',
+					'Pressure Washer' => 'pressure-washer',
+					'Printer' => 'printer',
+					'Projector' => 'projector',
+					'Protein' => 'protein',
+					'PS3' => 'ps3',
+					'PS4' => 'ps4',
+					'PS4 Controller' => 'ps4-controller',
+					'PS4 Games' => 'ps4-games',
+					'PS4 Headset' => 'ps4-headset',
+					'PS4 Pro' => 'ps4-pro',
+					'PS4 Slim' => 'ps4-slim',
+					'PSN' => 'psn',
+					'PSU' => 'psu',
+					'PS Vita' => 'ps-vita',
+					'Puma' => 'puma',
+					'Pushchair' => 'pushchair',
+					'Qnap' => 'qnap',
+					'Quorn' => 'quorn',
+					'Rab' => 'rab',
+					'Radiator' => 'radiator',
+					'Radio' => 'radio',
+					'Radley' => 'radley',
+					'Railcard' => 'railcard',
+					'Ralph Lauren' => 'ralph-lauren',
+					'RAM' => 'ram',
+					'Raspberry Pi' => 'raspberry-pi',
+					'Rattan Garden Furniture' => 'rattan',
+					'Ray Ban' => 'ray-ban',
+					'Razer' => 'razer',
+					'Razor' => 'razor',
+					'Reebok' => 'reebok',
+					'Resident Evil' => 'resident-evil',
+					'Resident Evil 7' => 'resident-evil-7',
+					'Rice' => 'rice',
+					'Ring' => 'ring',
+					'Road Bike' => 'road-bike',
+					'Rocket League' => 'rocket-league',
+					'Rogue One' => 'rogue-one',
+					'Roku' => 'roku',
+					'Rolex' => 'rolex',
+					'Roof Box' => 'roof-box',
+					'Roses' => 'roses',
+					'Rotary' => 'rotary',
+					'Router' => 'router',
+					'Rug' => 'rug',
+					'Rum' => 'rum',
+					'Running' => 'running',
+					'RX 480' => 'rx-480',
+					'Ryanair' => 'ryanair',
+					'Ryobi' => 'ryobi',
+					'Sale' => 'sale',
+					'Salmon' => 'salmon',
+					'Salomon' => 'salomon',
+					'Samsonite' => 'samsonite',
+					'Samsung' => 'samsung',
+					'Samsung Galaxy' => 'samsung-galaxy',
+					'Samsung Galaxy S7' => 'samsung-galaxy-s7',
+					'Samsung Galaxy S7 Edge' => 'samsung-galaxy-s7-edge',
+					'Samsung Galaxy S8' => 'samsung-galaxy-s8',
+					'Samsung Galaxy S8 Plus' => 'samsung-s8-plus',
+					'Samsung Gear' => 'samsung-gear',
+					'Samsung TV' => 'samsung-tv',
+					'Sandals' => 'sandals',
+					'Sander' => 'sander',
+					'SanDisk' => 'sandisk',
+					'Sat Nav' => 'sat-nav',
+					'Saw' => 'saw',
+					'Scalextric' => 'scalextric',
+					'Scooter' => 'scooter',
+					'Screenwash' => 'screenwash',
+					'Screwdriver' => 'screwdriver',
+					'SD Card' => 'sd-card',
+					'SDXC' => 'sdxc',
+					'Seagate' => 'seagate',
+					'Seat' => 'seat',
+					'Security Camera' => 'security-camera',
+					'Seeds' => 'seeds',
+					'Seiko' => 'seiko',
+					'Sennheiser' => 'sennheiser',
+					'Server' => 'server',
+					'Sewing Machine' => 'sewing-machine',
+					'Shadow Of Mordor' => 'shadow-of-mordor',
+					'Shark' => 'shark',
+					'Sharpie' => 'sharpie',
+					'Shaver' => 'shaver',
+					'Shed' => 'shed',
+					'Shelves' => 'shelves',
+					'Shirt' => 'shirt',
+					'Shoes' => 'shoe',
+					'Shopkins' => 'shopkins',
+					'Shorts' => 'shorts',
+					'Shower' => 'shower',
+					'Shredder' => 'shredder',
+					'Sideboard' => 'sideboard',
+					'Sim' => 'sim',
+					'Sim Free' => 'sim-free',
+					'Sim Only' => 'sim-only',
+					'Sink' => 'sink',
+					'Skechers' => 'skechers',
+					'Ski' => 'ski',
+					'Skoda' => 'skoda',
+					'Sky' => 'sky',
+					'Skylanders' => 'skylanders',
+					'Skyrim' => 'skyrim',
+					'Sleeping Bag' => 'sleeping-bag',
+					'Slide' => 'slide',
+					'Slimming World' => 'slimming-world',
+					'Slippers' => 'slippers',
+					'Slow Cooker' => 'slow-cooker',
+					'SLR Camera' => 'slr',
+					'Smart' => 'smart',
+					'Smartphone' => 'smartphone',
+					'Smartthings' => 'smartthings',
+					'Smart TV' => 'smart-tv',
+					'Smartwatch' => 'smartwatch',
+					'Snapfish' => 'snapfish',
+					'Socket Set' => 'socket-set',
+					'Socks' => 'socks',
+					'Sofa' => 'sofa',
+					'Software & Apps' => 'software-apps',
+					'Sonicare' => 'sonicare',
+					'Sonos' => 'sonos',
+					'Sony' => 'sony',
+					'Sony TV' => 'sony-tv',
+					'Soundbar' => 'soundbar',
+					'Soup Maker' => 'soup-maker',
+					'Spa' => 'spa',
+					'Spain' => 'spain',
+					'Speakers' => 'speakers',
+					'Spinner' => 'spinner',
+					'Spirits' => 'spirits',
+					'Splatoon' => 'splatoon',
+					'Sports & Fitness' => 'sports-fitness',
+					'SSD' => 'ssd',
+					'Starbucks' => 'starbucks',
+					'Star Trek' => 'star-trek',
+					'Star Wars' => 'star-wars',
+					'Steak' => 'steak',
+					'Steam' => 'steam',
+					'Steamer' => 'steamer',
+					'Steam Iron' => 'steam-iron',
+					'Steam Link' => 'steam-link',
+					'Steam Mop' => 'steam-mop',
+					'Storage' => 'storage',
+					'Storage Box' => 'storage-box',
+					'Strimmer' => 'strimmer',
+					'Student' => 'student',
+					'Suit' => 'suit',
+					'Suitcase' => 'suitcase',
+					'Sun Cream' => 'sun-cream',
+					'Sunglasses' => 'sunglasses',
+					'Superdry' => 'superdry',
+					'Surface' => 'surface',
+					'Surface Book' => 'surface-book',
+					'Sweets' => 'sweets',
+					'Swing' => 'swing',
+					'Synology' => 'synology',
+					'T-Shirt' => 't-shirt',
+					'Table' => 'table',
+					'Tablet' => 'tablet',
+					'Table Tennis' => 'table-tennis',
+					'Tado' => 'tado',
+					'Tag Heuer' => 'tag-heuer',
+					'Takeaway' => 'takeaway',
+					'Talkmobile' => 'talkmobile',
+					'Tap' => 'tap',
+					'Tassimo' => 'tassimo',
+					'Tastecard' => 'tastecard',
+					'Tea' => 'tea',
+					'Ted Baker' => 'ted-baker',
+					'Tefal' => 'tefal',
+					'Tekken' => 'tekken',
+					'Tekken 7' => 'tekken-7',
+					'Telegraph' => 'telegraph',
+					'Telescope' => 'telescope',
+					'Tenerife' => 'tenerife',
+					'Tennis' => 'tennis',
+					'Tent' => 'tent',
+					'Tesco Clothing' => 'tesco-clothing',
+					'Tesla' => 'tesla',
+					'Thailand' => 'thailand',
+					'Theatre' => 'theatre',
+					'The Body Shop' => 'body-shop',
+					'The Last Guardian' => 'the-last-guardian',
+					'The Last Of Us' => 'the-last-of-us',
+					'Theme Park' => 'theme-park',
+					'Thermometer' => 'thermometer',
+					'Thermos' => 'thermos',
+					'Thermostat' => 'thermostat',
+					'The Sun' => 'the-sun',
+					'The Witcher 3' => 'the-witcher-3',
+					'Thinkpad' => 'thinkpad',
+					'Thomas Sabo' => 'thomas-sabo',
+					'Thorntons' => 'thorntons',
+					'Thorpe Park' => 'thorpe-park',
+					'Throw' => 'throw',
+					'Thrustmaster' => 'thrustmaster',
+					'Thule' => 'thule',
+					'Tights' => 'tights',
+					'Tile' => 'tile',
+					'Timberland' => 'timberland',
+					'Tissot' => 'tissot',
+					'Titanfall' => 'titanfall',
+					'Titanfall 2' => 'titanfall-2',
+					'Toaster' => 'toaster',
+					'Toddler Bed' => 'toddler-bed',
+					'Toilet' => 'toilet',
+					'Toilet Roll' => 'toilet-roll',
+					'Toilet Seat' => 'toilet-seat',
+					'Tomb Raider' => 'tomb-raider',
+					'Tom Clancy' => 'tom-clancy',
+					'Tom Ford' => 'tom-ford',
+					'Tommee Tippee' => 'tommee-tippee',
+					'Toms' => 'toms',
+					'TomTom' => 'tomtom',
+					'Tool' => 'tool',
+					'Toothbrush' => 'toothbrush',
+					'Toothpaste' => 'toothpaste',
+					'Toot Toot' => 'toot-toot',
+					'Torch' => 'torch',
+					'Torque Wrench' => 'torque-wrench',
+					'Toshiba' => 'toshiba',
+					'Towel' => 'towel',
+					'Toyota' => 'toyota',
+					'Toys' => 'toy',
+					'Toy Story' => 'toy-story',
+					'Tp Link' => 'tp-link',
+					'Tracksuit' => 'tracksuit',
+					'Train' => 'train',
+					'Trainers' => 'trainers',
+					'Trampoline' => 'trampoline',
+					'Transcend' => 'transcend',
+					'Transformers' => 'transformers',
+					'Travel' => 'travel',
+					'Travel Insurance' => 'travel-insurance',
+					'Travelodge' => 'travelodge',
+					'Travel System' => 'travel-system',
+					'Treadmill' => 'treadmill',
+					'Trespass' => 'trespass',
+					'Trike' => 'trike',
+					'Tripod' => 'tripod',
+					'Tripp' => 'tripp',
+					'Trolley' => 'trolley',
+					'Trousers' => 'trousers',
+					'Trunki' => 'trunki',
+					'Tumble Dryer' => 'tumble-dryer',
+					'Tuna' => 'tuna',
+					'Turbo Trainer' => 'turbo-trainer',
+					'Turkey' => 'turkey',
+					'Turntable' => 'turntable',
+					'Turtle Beach' => 'turtle-beach',
+					'TV' => 'tv',
+					'TV Stand' => 'tv-stand',
+					'Tyres' => 'tyres',
+					'Ubisoft' => 'ubisoft',
+					'Ue Boom' => 'ue-boom',
+					'UFC' => 'ufc',
+					'UGG' => 'ugg',
+					'Ulefone' => 'ulefone',
+					'Ultimate Ears UE Boom 2' => 'ue-boom-2',
+					'Ultimate Outdoors' => 'ultimate-outdoors',
+					'Ultrabook' => 'ultrabook',
+					'Ultrawide Monitor' => 'ultrawide',
+					'Umbrella' => 'umbrella',
+					'Umi' => 'umi',
+					'Uncharted' => 'uncharted',
+					'Uncharted 4' => 'uncharted-4',
+					'Under Armour' => 'under-armour',
+					'Underwear' => 'underwear',
+					'Unicorn' => 'unicorn',
+					'Unidays' => 'unidays',
+					'Urban Decay' => 'urban-decay',
+					'Usa' => 'usa',
+					'USB Hub' => 'usb-hub',
+					'USB Memory Stick' => 'flash-drive',
+					'Usn' => 'usn',
+					'Vacuum Cleaners' => 'vacuum-cleaners',
+					'Vango' => 'vango',
+					'Vanish' => 'vanish',
+					'Vans' => 'vans',
+					'Vape' => 'vape',
+					'Vauxhall' => 'vauxhall',
+					'Vax' => 'vax',
+					'Velvet' => 'velvet',
+					'Venice' => 'venice',
+					'Versace' => 'versace',
+					'Vibrator' => 'vibrator',
+					'Victorinox' => 'victorinox',
+					'Vileda' => 'vileda',
+					'Vinyl' => 'vinyl',
+					'Virgin' => 'virgin',
+					'Vitamix' => 'vitamix',
+					'Vodafone' => 'vodafone',
+					'Vodka' => 'vodka',
+					'Volvo' => 'volvo',
+					'VPN' => 'vpn',
+					'VR' => 'vr',
+					'VTech' => 'vtech',
+					'Vue' => 'vue',
+					'VW' => 'vw',
+					'Wacom' => 'wacom',
+					'Waffle Maker' => 'waffle-maker',
+					'Wahl' => 'wahl',
+					'Walkers' => 'walkers',
+					'Walking Boots' => 'walking-boots',
+					'Walking Dead' => 'walking-dead',
+					'Wallet' => 'wallet',
+					'Wallpaper' => 'wallpaper',
+					'Walsall' => 'walsall',
+					'Wardrobe' => 'wardrobe',
+					'Warhammer' => 'warhammer',
+					'Washer Dryer' => 'washer-dryer',
+					'Washing Machine' => 'washing-machine',
+					'Watch' => 'watch',
+					'Watch Dogs' => 'watch-dogs',
+					'Watch Dogs 2' => 'watch-dogs-2',
+					'Water Bottle' => 'water-bottle',
+					'Water Butt' => 'water-butt',
+					'Water Filter' => 'water-filter',
+					'Wayfair' => 'wayfair',
+					'Webcam' => 'webcam',
+					'Weber' => 'weber',
+					'Wedding' => 'wedding',
+					'Weed' => 'weed',
+					'Weekend Break' => 'weekend-break',
+					'Weetabix' => 'weetabix',
+					'Weight Watchers' => 'weight-watchers',
+					'Wellies' => 'wellies',
+					'Wenger' => 'wenger',
+					'Western Digital' => 'western-digital',
+					'Wetsuit' => 'wetsuit',
+					'Wheelbarrow' => 'wheelbarrow',
+					'Whey' => 'whey',
+					'Whiskas' => 'whiskas',
+					'Whisky' => 'whisky',
+					'Wifi Camera' => 'wifi-camera',
+					'Wifi Extender' => 'wifi-extender',
+					'Wii' => 'wii',
+					'Wii U' => 'wii-u',
+					'Wii U Pro Controller' => 'wii-u-pro-controller',
+					'Wileyfox' => 'wileyfox',
+					'Wilkinson Sword' => 'wilkinson-sword',
+					'Wimbledon' => 'wimbledon',
+					'Windows' => 'windows',
+					'Windows 10' => 'windows-10',
+					'Wine' => 'wine',
+					'Wipes' => 'wipes',
+					'Wireless Headphones' => 'wireless-headphones',
+					'Wireless Keyboard' => 'wireless-keyboard',
+					'Witcher' => 'witcher',
+					'Wok' => 'wok',
+					'Wolfenstein' => 'wolfenstein',
+					'Women Fashion' => 'womens-clothes',
+					'Workbench' => 'workbench',
+					'World Of Warcraft' => 'world-of-warcraft',
+					'Worx' => 'worx',
+					'Wuaki' => 'wuaki',
+					'WWE' => 'wwe',
+					'Xbox' => 'xbox',
+					'Xbox 360' => 'xbox-360',
+					'Xbox 360 Game' => 'xbox-360-game',
+					'Xbox Controller' => 'xbox-controller',
+					'Xbox Gift Card' => 'xbox-gift-card',
+					'Xbox Headset' => 'xbox-headset',
+					'Xbox Live' => 'xbox-live',
+					'Xbox One' => 'xbox-one',
+					'Xbox One Controller' => 'xbox-one-controller',
+					'Xbox One Elite Controller' => 'xbox-one-elite-controller',
+					'Xbox One Games' => 'xbox-one-games',
+					'Xbox One S' => 'xbox-one-s',
+					'Xbox One X' => 'xbox-one-x',
+					'Xbox Wireless Adapter' => 'xbox-wireless-adapter',
+					'Xcom' => 'xcom',
+					'XCOM 2' => 'xcom-2',
+					'XFX' => 'xfx',
+					'Xiaomi' => 'xiaomi',
+					'Xiaomi Redmi' => 'redmi',
+					'Xperia' => 'xperia',
+					'Xperia Z3' => 'xperia-z3',
+					'Xperia Z5' => 'xperia-z5',
+					'XPS' => 'xps',
+					'Yakuza' => 'yakuza',
+					'Yale' => 'yale',
+					'Yamaha' => 'yamaha',
+					'Yankee Candle' => 'yankee-candle',
+					'Yoga' => 'yoga',
+					'York' => 'york',
+					'Yorkshire' => 'yorkshire',
+					'Yoshi' => 'yoshi',
+					'Youview' => 'youview',
+					'Yves Saint Laurent' => 'yves-saint-laurent',
+					'Zante' => 'zante',
+					'Zanussi' => 'zanussi',
+					'Zelda' => 'zelda',
+					'Zelda Breath Of The Wild' => 'zelda-breath-of-the-wild',
+					'Zenbook' => 'zenbook',
+					'Zippo' => 'zippo',
+					'Zizzi' => 'zizzi',
+					'Zoo' => 'zoo',
+					'Zoostorm' => 'zoostorm',
+					'ZOTAC' => 'zotac',
+					'ZTE' => 'zte',
+					'ZyXEL' => 'zyxel',
+				)
+			),
+			'order' => array(
+				'name' => 'Order by',
+				'type' => 'list',
+				'required' => 'true',
+				'title' => 'Sort order of deals',
+				'values' => array(
+					'From the most to the least hot deal' => '-hot',
+					'From the most recent deal to the oldest' => '',
+					'From the most commented deal to the least commented deal' => '-discussed'
+				)
+			)
+		)
+	);
+
+	public $lang = array(
+		'bridge-uri' => SELF::URI,
+		'bridge-name' => SELF::NAME,
+		'context-keyword' => 'Search by keyword(s))',
+		'context-group' => 'Deals per group',
+		'uri-group' => '/tag/',
+		'request-error' => 'Could not request HotUKDeals',
+		'no-results' => 'Ooops, looks like we could',
+		'relative-date-indicator' => array(
+			'ago',
+		),
+		'price' => 'Price',
+		'shipping' => 'Shipping',
+		'origin' => 'Origin',
+		'discount' => 'Discount',
+		'title-keyword' => 'Search',
+		'title-group' => 'Group',
+		'local-months' => array(
+			'Jan',
+			'Feb',
+			'Mar',
+			'Apr',
+			'May',
+			'Jun',
+			'Jul',
+			'Aug',
+			'Sep',
+			'Occ',
+			'Nov',
+			'Dec',
+			'st',
+			'nd',
+			'rd',
+			'th'
+		),
+		'local-time-relative' => array(
+			'Found ',
+			'm',
+			'h,',
+			'day',
+			'days',
+			'month',
+			'year',
+			'and '
+		),
+		'date-prefixes' => array(
+			'Found ',
+			'Refreshed ',
+			'Made hot '
+		),
+		'relative-date-alt-prefixes' => array(
+			'Made hot ',
+			'Refreshed ',
+			'Last updated '
+		),
+		'relative-date-ignore-suffix' => array(
+			'/by.*$/'
+		),
+		'localdeal' => array(
+			'Local',
+			'Expires'
+		)
+	);
+
+}

+ 144 - 0
bridges/MydealsBridge.php

@@ -0,0 +1,144 @@
+<?php
+
+require_once(__DIR__ . '/DealabsBridge.php');
+class MydealsBridge extends PepperBridgeAbstract {
+
+	const NAME = 'Mydeals bridge';
+	const URI = 'https://www.mydealz.de/';
+	const DESCRIPTION = 'Zeigt die Deals von mydeals.de';
+	const MAINTAINER = 'sysadminstory';
+	const PARAMETERS = array(
+		'Suche nach Stichworten' => array (
+			'q' => array(
+				'name' => 'Stichworten',
+				'type' => 'text',
+				'required' => true
+			),
+			'hide_expired' => array(
+				'name' => 'Abgelaufenes ausblenden',
+				'type' => 'checkbox',
+				'required' => 'true'
+			),
+			'hide_local' => array(
+				'name' => 'Lokales ausblenden',
+				'type' => 'checkbox',
+				'title' => 'Deals im physischen Geschäft ausblenden',
+				'required' => 'true'
+			),
+			'priceFrom' => array(
+				'name' => 'Minimaler Preis',
+				'type' => 'text',
+				'title' => 'Minmaler Preis in Euros',
+				'required' => 'false',
+				'defaultValue' => ''
+			),
+			'priceTo' => array(
+				'name' => 'Maximaler Preis',
+				'type' => 'text',
+				'title' => 'maximaler Preis in Euro',
+				'required' => 'false',
+				'defaultValue' => ''
+			),
+		),
+
+		'Deals pro Gruppen' => array(
+			'group' => array(
+				'name' => 'Gruppen',
+				'type' => 'list',
+				'required' => 'true',
+				'title' => 'Gruppe, deren Deals angezeigt werden müssen',
+				'values' => array(
+					'Elektronik' => 'elektronik',
+					'Handy & Smartphone' => 'smartphone',
+					'Gaming' => 'gaming',
+					'Software' => 'apps-software',
+					'Fashion Frauen' => 'fashion-frauen',
+					'Fashion Männer' => 'fashion-accessoires',
+					'Beauty & Gesundheit' => 'beauty',
+					'Family & Kids' => 'family-kids',
+					'Essen & Trinken' => 'food',
+					'Freizeit & Reisen' => 'reisen',
+					'Haushalt & Garten' => 'home-living',
+					'Entertainment' => 'entertainment',
+					'Verträge & Finanzen' => 'vertraege-finanzen',
+					'Coupons' => 'coupons',
+
+				)
+			),
+			'order' => array(
+				'name' => 'sortieren nach',
+				'type' => 'list',
+				'required' => 'true',
+				'title' => 'Sortierung der deals',
+				'values' => array(
+					'Vom heißesten zum kältesten Deal' => '',
+					'Vom jüngsten Deal zum ältesten' => '-new',
+					'Vom am meisten kommentierten Deal zum am wenigsten kommentierten Deal' => '-discussed'
+				)
+			)
+		)
+	);
+
+	public $lang = array(
+		'bridge-uri' => SELF::URI,
+		'bridge-name' => SELF::NAME,
+		'context-keyword' => 'Suche nach Stichworten',
+		'context-group' => 'Deals pro Gruppen',
+		'uri-group' => '/gruppe/',
+		'request-error' => 'Could not request mydeals',
+		'no-results' => 'Ups, wir konnten keine Deals zu',
+		'relative-date-indicator' => array(
+			'vor',
+			'seit'
+		),
+		'price' => 'Preis',
+		'shipping' => 'Versand',
+		'origin' => 'Ursprung',
+		'discount' => 'Rabatte',
+		'title-keyword' => 'Suche',
+		'title-group' => 'Gruppe',
+		'local-months' => array(
+			'Jan',
+			'Feb',
+			'Mär',
+			'Apr',
+			'Mai',
+			'Jun',
+			'Jul',
+			'Aug',
+			'Sep',
+			'Okt',
+			'Nov',
+			'Dez',
+			'.'
+		),
+		'local-time-relative' => array(
+			'eingestellt vor ',
+			'm',
+			'h,',
+			'day',
+			'days',
+			'month',
+			'year',
+			'and '
+		),
+		'date-prefixes' => array(
+			'eingestellt am ',
+			'lokal ',
+			'aktualisiert ',
+		),
+		'relative-date-alt-prefixes' => array(
+			'aktualisiert vor ',
+			'kommentiert vor ',
+			'heiß seit '
+		),
+		'relative-date-ignore-suffix' => array(
+			'/von.*$/'
+		),
+		'localdeal' => array(
+			'Lokal ',
+			'Läuft bis '
+		)
+	);
+
+}