rss-bridge/bridges/ThingiverseBridge.php

166 lines
4.2 KiB
PHP
Raw Normal View History

<?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 &amp; Games' => '72',
'2D Art' => '144',
'Art Tools' => '75',
'Coins &amp; Badges' => '143',
'Interactive Art' => '78',
'Math Art' => '79',
'Scans &amp; Replicas' => '145',
'Sculptures' => '80',
'Signs &amp; 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 &amp; Outdoors' => '140',
'Bathroom' => '147',
'Containers' => '146',
'Decor' => '97',
'Household Supplies' => '99',
'Kitchen &amp; Dining' => '100',
'Office' => '101',
'Organization' => '102',
'Outdoor &amp; Garden' => '98',
'Pets' => '103',
'Replacement Parts' => '153',
'Biology' => '106',
'Engineering' => '104',
'Math' => '105',
'Physics &amp; Astronomy' => '148',
'Animals' => '107',
'Buildings &amp; Structures' => '108',
'Creatures' => '109',
'Food &amp; Drink' => '110',
'Model Furniture' => '111',
'Model Robots' => '115',
'People' => '112',
'Props' => '114',
'Vehicles' => '116',
'Hand Tools' => '118',
'Machine Tools' => '117',
'Parts' => '119',
'Tool Holders &amp; Boxes' => '120',
'Chess' => '151',
'Construction Toys' => '121',
'Dice' => '122',
'Games' => '123',
'Mechanical Toys' => '124',
'Playsets' => '113',
'Puzzles' => '125',
'Toy &amp; Game Accessories' => '149',
'3D Printer Accessories' => '127',
'3D Printer Extruders' => '152',
'3D Printer Parts' => '128',
'3D Printers' => '126',
'3D Printing Tests' => '129',
)
),
'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();
}
}