2022-06-04 21:10:07 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class SlusheBridge extends BridgeAbstract
|
2022-07-01 16:10:30 +03:00
|
|
|
{
|
2022-06-04 21:10:07 +03:00
|
|
|
const MAINTAINER = 'quickwick';
|
|
|
|
const NAME = 'Slushe';
|
|
|
|
const URI = 'https://slushe.com';
|
|
|
|
const DESCRIPTION = 'Returns latest posts from Slushe';
|
|
|
|
|
|
|
|
const PARAMETERS = [
|
|
|
|
'Artist' => [
|
|
|
|
'artist_name' => [
|
|
|
|
'name' => 'Artist name',
|
|
|
|
'required' => true,
|
|
|
|
'exampleValue' => 'lexx228',
|
|
|
|
'title' => 'Enter an artist name'
|
2022-07-01 16:10:30 +03:00
|
|
|
]
|
2022-06-04 21:10:07 +03:00
|
|
|
],
|
|
|
|
'Category' => [
|
|
|
|
'category' => [
|
|
|
|
'name' => 'Category',
|
|
|
|
'type' => 'list',
|
|
|
|
'defaultValue' => 'Safe for Work',
|
|
|
|
'title' => 'Choose a category',
|
|
|
|
'values' => [
|
|
|
|
'2D' => '29',
|
|
|
|
'3DX' => '58',
|
|
|
|
'Animation' => '60',
|
|
|
|
'Anime Fan Art' => '46',
|
|
|
|
'BDSM' => '47',
|
|
|
|
'Big Butt' => '73',
|
|
|
|
'Big Dick' => '52',
|
|
|
|
'Bit Tits' => '49',
|
|
|
|
'Bisexual' => '69',
|
|
|
|
'Comic' => '51',
|
|
|
|
'Couple' => '3',
|
|
|
|
'Dickgirl/Futanari' => '56',
|
|
|
|
'Feet' => '75',
|
|
|
|
'Game Fan Art' => '63',
|
|
|
|
'Gay' => '36',
|
|
|
|
'GIF' => '42',
|
|
|
|
'Group Sex/ Orgy' => '62',
|
|
|
|
'Lesbian' => '67',
|
|
|
|
'Mature' => '72',
|
|
|
|
'Misc. Fan Art' => '68',
|
|
|
|
'Monster' => '64',
|
|
|
|
'Pin-Up' => '28',
|
|
|
|
'Safe for Work' => '71',
|
|
|
|
'SFM' => '70',
|
|
|
|
'Solo' => '66',
|
|
|
|
'Threesome' => '38',
|
|
|
|
'TV & Film Fan Art' => '34',
|
|
|
|
'Western Fan Art' => '33'
|
2022-07-01 16:10:30 +03:00
|
|
|
]
|
|
|
|
]
|
2022-06-04 21:10:07 +03:00
|
|
|
],
|
|
|
|
'Search' => [
|
|
|
|
'search_term' => [
|
|
|
|
'name' => 'Search term(s)',
|
|
|
|
'required' => true,
|
|
|
|
'exampleValue' => 'pole dance',
|
|
|
|
'title' => 'Enter one or more search terms, separated by spaces'
|
2022-07-01 16:10:30 +03:00
|
|
|
]
|
|
|
|
]
|
2022-06-04 21:10:07 +03:00
|
|
|
];
|
|
|
|
|
|
|
|
public function getName()
|
|
|
|
{
|
|
|
|
switch ($this->queriedContext) {
|
|
|
|
case 'Artist':
|
|
|
|
return 'Slushe Artist: ' . $this->getInput('artist_name');
|
|
|
|
break;
|
|
|
|
case 'Category':
|
|
|
|
return 'Slushe Category: ' . $this->getInput('category');
|
|
|
|
break;
|
|
|
|
case 'Search':
|
|
|
|
return 'Slushe Search: ' . $this->getInput('search_term');
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return self::NAME;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function collectData()
|
|
|
|
{
|
|
|
|
switch ($this->queriedContext) {
|
|
|
|
case 'Artist':
|
|
|
|
$uri = self::URI . '/' . $this->getInput('artist_name');
|
|
|
|
break;
|
|
|
|
case 'Category':
|
|
|
|
$uri = self::URI . '/search/posts/channels?niche=' .
|
|
|
|
$this->getInput('category');
|
|
|
|
break;
|
|
|
|
case 'Search':
|
|
|
|
$uri = self::URI . '/search/posts/' . $this->getInput('search_term') .
|
|
|
|
'?s=1';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
$headers = [
|
|
|
|
'Authority : slushe.com',
|
|
|
|
'Cookie: age-verify=1;',
|
|
|
|
'sec-ch-ua: "Chromium";v="100", " Not A;Brand";v="99"',
|
|
|
|
'sec-ch-ua-mobile: ?0',
|
|
|
|
'sec-ch-ua-platform: "Windows"',
|
|
|
|
'sec-fetch-dest: document',
|
|
|
|
'sec-fetch-mode: navigate',
|
|
|
|
'sec-fetch-site: same-origin',
|
|
|
|
'sec-fetch-user: ?1',
|
|
|
|
'upgrade-insecure-requests: 1'
|
|
|
|
];
|
|
|
|
// Add user-agent string to headers with implode, due to line length limit
|
|
|
|
$user_agent_string = [
|
|
|
|
'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/',
|
|
|
|
'537.36(KHTML, like Gecko) Chrome/100.0.4896.147 Safari/537.36'
|
|
|
|
];
|
|
|
|
$headers[] = implode('', $user_agent_string);
|
|
|
|
|
|
|
|
$html = getSimpleHTMLDOM($uri, $headers);
|
|
|
|
|
|
|
|
//Loop on each entry
|
|
|
|
foreach ($html->find('div.blog-item') as $element) {
|
|
|
|
$title = $element->find('h3.title', 0)->first_child()->innertext;
|
|
|
|
$article_uri = $element->find('h3.title', 0)->first_child()->href;
|
|
|
|
$timestamp = $element->find('div.publication-date', 0)->innertext;
|
|
|
|
$author = $element->find('div.artist', 0)->
|
|
|
|
first_child()->first_child()->innertext;
|
|
|
|
|
|
|
|
// Create & populate item
|
|
|
|
$item = [];
|
|
|
|
$item['uri'] = $article_uri;
|
|
|
|
$item['id'] = $item['uri'];
|
|
|
|
$item['timestamp'] = $timestamp;
|
|
|
|
$item['title'] = $title;
|
|
|
|
$item['author'] = $author;
|
|
|
|
|
|
|
|
$media_html = '';
|
|
|
|
|
|
|
|
// Look for image thumbnails
|
|
|
|
$media_uris = $element->find('div.thumb', 0);
|
|
|
|
if (isset($media_uris)) {
|
|
|
|
// Add gallery image count, if it exists
|
|
|
|
$gallery_count = $media_uris->find('span.count', 0);
|
|
|
|
if (isset($gallery_count)) {
|
|
|
|
$media_html .= '<p>Gallery count: ' .
|
|
|
|
$gallery_count->first_child()->innertext . '</p>';
|
|
|
|
}
|
|
|
|
// Add image thumbnail(s)
|
|
|
|
foreach ($media_uris->find('img') as $media_uri) {
|
|
|
|
$media_html .= '<a href="' . $article_uri . '">' . $media_uri . '</a>';
|
|
|
|
$item['enclosures'][] = str_replace(' ', '%20', $media_uri->src);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Look for video thumbnails
|
|
|
|
$media_uris = $element->find('div.thumb-holder', 0);
|
|
|
|
// Add video thumbnail(s)
|
|
|
|
if (isset($media_uris)) {
|
|
|
|
foreach ($media_uris->find('img') as $media_uri) {
|
|
|
|
$media_html .= '<p>Video:</p><a href="' .
|
|
|
|
$article_uri . '">' . $media_uri . '</a>';
|
2024-08-08 05:31:47 +03:00
|
|
|
|
2022-06-04 21:10:07 +03:00
|
|
|
$item['enclosures'][] = $media_uri->src;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$item['content'] = $media_html;
|
|
|
|
|
|
|
|
if (isset($item['title'])) {
|
|
|
|
$this->items[] = $item;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|