166 lines
4.3 KiB
PHP
166 lines
4.3 KiB
PHP
<?php
|
|
class ThingiverseBridge extends BridgeAbstract {
|
|
|
|
const NAME = 'Thingiverse Search';
|
|
const URI = 'https://thingiverse.com';
|
|
const DESCRIPTION = 'Returns feeds for search results';
|
|
const MAINTAINER = 'AntoineTurmel';
|
|
const PARAMETERS = array(
|
|
array(
|
|
'query' => array(
|
|
'name' => 'Search query',
|
|
'type' => 'text',
|
|
'required' => true,
|
|
'title' => 'Insert your search term here',
|
|
'exampleValue' => 'Enter your search term'
|
|
),
|
|
'sortby' => array(
|
|
'name' => 'Sort by',
|
|
'type' => 'list',
|
|
'required' => false,
|
|
'values' => array(
|
|
'Relevant' => 'relevant',
|
|
'Text' => 'text',
|
|
'Popular' => 'popular',
|
|
'# of Makes' => 'makes',
|
|
'Newest' => 'newest',
|
|
),
|
|
'defaultValue' => 'newest'
|
|
),
|
|
'category' => array(
|
|
'name' => 'Category',
|
|
'type' => 'list',
|
|
'required' => false,
|
|
'values' => array(
|
|
'Any' => '',
|
|
'3D Printing' => '73',
|
|
'Art' => '63',
|
|
'Fashion' => '64',
|
|
'Gadgets' => '65',
|
|
'Hobby' => '66',
|
|
'Household' => '67',
|
|
'Learning' => '69',
|
|
'Models' => '70',
|
|
'Tools' => '71',
|
|
'Toys & Games' => '72',
|
|
'2D Art' => '144',
|
|
'Art Tools' => '75',
|
|
'Coins & Badges' => '143',
|
|
'Interactive Art' => '78',
|
|
'Math Art' => '79',
|
|
'Scans & Replicas' => '145',
|
|
'Sculptures' => '80',
|
|
'Signs & Logos' => '76',
|
|
'Accessories' => '81',
|
|
'Bracelets' => '82',
|
|
'Costume' => '142',
|
|
'Earrings' => '139',
|
|
'Glasses' => '83',
|
|
'Jewelry' => '84',
|
|
'Keychains' => '130',
|
|
'Rings' => '85',
|
|
'Audio' => '141',
|
|
'Camera' => '86',
|
|
'Computer' => '87',
|
|
'Mobile Phone' => '88',
|
|
'Tablet' => '90',
|
|
'Video Games' => '91',
|
|
'Automotive' => '155',
|
|
'DIY' => '93',
|
|
'Electronics' => '92',
|
|
'Music' => '94',
|
|
'R/C Vehicles' => '95',
|
|
'Robotics' => '96',
|
|
'Sport & Outdoors' => '140',
|
|
'Bathroom' => '147',
|
|
'Containers' => '146',
|
|
'Decor' => '97',
|
|
'Household Supplies' => '99',
|
|
'Kitchen & Dining' => '100',
|
|
'Office' => '101',
|
|
'Organization' => '102',
|
|
'Outdoor & Garden' => '98',
|
|
'Pets' => '103',
|
|
'Replacement Parts' => '153',
|
|
'Biology' => '106',
|
|
'Engineering' => '104',
|
|
'Math' => '105',
|
|
'Physics & Astronomy' => '148',
|
|
'Animals' => '107',
|
|
'Buildings & Structures' => '108',
|
|
'Creatures' => '109',
|
|
'Food & Drink' => '110',
|
|
'Model Furniture' => '111',
|
|
'Model Robots' => '115',
|
|
'People' => '112',
|
|
'Props' => '114',
|
|
'Vehicles' => '116',
|
|
'Hand Tools' => '118',
|
|
'Machine Tools' => '117',
|
|
'Parts' => '119',
|
|
'Tool Holders & Boxes' => '120',
|
|
'Chess' => '151',
|
|
'Construction Toys' => '121',
|
|
'Dice' => '122',
|
|
'Games' => '123',
|
|
'Mechanical Toys' => '124',
|
|
'Playsets' => '113',
|
|
'Puzzles' => '125',
|
|
'Toy & Game Accessories' => '149',
|
|
'3D Printer Accessories' => '127',
|
|
'3D Printer Extruders' => '152',
|
|
'3D Printer Parts' => '128',
|
|
'3D Printers' => '126',
|
|
'3D Printing Tests' => '129',
|
|
),
|
|
'defaultValue' => ''
|
|
),
|
|
'showimage' => array(
|
|
'name' => 'Show image in content',
|
|
'type' => 'checkbox',
|
|
'required' => false,
|
|
'title' => 'Activate to show the image in the content',
|
|
'defaultValue' => 'checked'
|
|
)
|
|
)
|
|
);
|
|
|
|
public function collectData(){
|
|
$html = getSimpleHTMLDOM($this->getURI())
|
|
or returnServerError('Failed to receive ' . $this->getURI());
|
|
|
|
$results = $html->find('div.thing-card');
|
|
|
|
foreach($results as $result) {
|
|
|
|
$item = array();
|
|
|
|
$item['title'] = $result->find('span.ellipsis', 0);
|
|
$item['uri'] = self::URI . $result->find('a', 1)->href;
|
|
$item['author'] = $result->find('span.item-creator', 0);
|
|
$item['content'] = '';
|
|
|
|
$image = $result->find('img.card-img', 0)->src;
|
|
|
|
if($this->getInput('showimage')) {
|
|
$item['content'] .= '<img src="' . $image . '">';
|
|
}
|
|
|
|
$item['enclosures'] = array($image);
|
|
|
|
$this->items[] = $item;
|
|
}
|
|
}
|
|
|
|
public function getURI(){
|
|
if(!is_null($this->getInput('query'))) {
|
|
$uri = self::URI . '/search?q=' . urlencode($this->getInput('query'));
|
|
$uri .= '&sort=' . $this->getInput('sortby');
|
|
$uri .= '&category_id=' . $this->getInput('category');
|
|
|
|
return $uri;
|
|
}
|
|
|
|
return parent::getURI();
|
|
}
|
|
}
|