mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-11-25 02:46:15 +03:00
Add DoujinStyleBridge (#3549)
* v1 * improve title * search support * random support * fix categories * add metadata to content * fix linter errors * i'm sorry
This commit is contained in:
parent
a1bae7a9a8
commit
4ce63c88aa
1 changed files with 148 additions and 0 deletions
148
bridges/DoujinStyleBridge.php
Normal file
148
bridges/DoujinStyleBridge.php
Normal file
|
@ -0,0 +1,148 @@
|
|||
<?php
|
||||
|
||||
class DoujinStyleBridge extends BridgeAbstract
|
||||
{
|
||||
const NAME = 'DoujinStyle Bridge';
|
||||
const URI = 'https://doujinstyle.com/';
|
||||
const DESCRIPTION = 'Returns submissions from DoujinStyle';
|
||||
const MAINTAINER = 'mrtnvgr';
|
||||
|
||||
// TODO: "Games" support
|
||||
|
||||
const PARAMETERS = [
|
||||
'Most recent submissions' => [],
|
||||
'Randomly selected items' => [],
|
||||
'From search results' => [
|
||||
'query' => [
|
||||
'name' => 'Search query',
|
||||
'required' => true,
|
||||
'exampleValue' => 'FELT',
|
||||
],
|
||||
'flac' => [
|
||||
'name' => 'Include FLAC',
|
||||
'type' => 'checkbox',
|
||||
'defaultValue' => false,
|
||||
],
|
||||
'mp3' => [
|
||||
'name' => 'Include MP3',
|
||||
'type' => 'checkbox',
|
||||
'defaultValue' => false,
|
||||
],
|
||||
'tta' => [
|
||||
'name' => 'Include TTA',
|
||||
'type' => 'checkbox',
|
||||
'defaultValue' => false,
|
||||
],
|
||||
'opus' => [
|
||||
'name' => 'Include Opus',
|
||||
'type' => 'checkbox',
|
||||
'defaultValue' => false,
|
||||
],
|
||||
'ogg' => [
|
||||
'name' => 'Include OGG',
|
||||
'type' => 'checkbox',
|
||||
'defaultValue' => false,
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
public function collectData()
|
||||
{
|
||||
$html = getSimpleHTMLDOM($this->getURI());
|
||||
$html = defaultLinkTo($html, $this->getURI());
|
||||
|
||||
$submissions = $html->find('.gridBox .gridDetails');
|
||||
foreach ($submissions as $submission) {
|
||||
$item = [];
|
||||
|
||||
$item['uri'] = $submission->find('a', 0)->href;
|
||||
|
||||
$content = getSimpleHTMLDOM($item['uri']);
|
||||
$content = defaultLinkTo($content, $this->getURI());
|
||||
|
||||
$title = $content->find('h2', 0)->plaintext;
|
||||
|
||||
$cover = $content->find('#imgClick a', 0);
|
||||
if (is_null($cover)) {
|
||||
$cover = $content->find('.coverWrap', 0)->src;
|
||||
} else {
|
||||
$cover = $cover->href;
|
||||
}
|
||||
|
||||
$item['content'] = "<img src='$cover'/>";
|
||||
|
||||
$keys = [];
|
||||
foreach ($content->find('.pageWrap .pageSpan') as $key) {
|
||||
$keys[] = $key->plaintext;
|
||||
}
|
||||
|
||||
$values = $content->find('.pageWrap .pageSpan2');
|
||||
$metadata = array_combine($keys, $values);
|
||||
|
||||
$format = 'Unknown';
|
||||
|
||||
foreach ($metadata as $key => $value) {
|
||||
switch ($key) {
|
||||
case 'Artist':
|
||||
$artist = $value->find('a', 0)->plaintext;
|
||||
$item['title'] = "$artist - $title";
|
||||
$item['content'] .= "<br>Artist: $artist";
|
||||
break;
|
||||
case 'Tags:':
|
||||
$item['categories'] = [];
|
||||
foreach ($value->find('a') as $tag) {
|
||||
$tag = str_replace('-', '-', $tag->plaintext);
|
||||
$item['categories'][] = $tag;
|
||||
}
|
||||
|
||||
$item['content'] .= '<br>Tags: ' . join(', ', $item['categories']);
|
||||
break;
|
||||
case 'Format:':
|
||||
$item['content'] .= "<br>Format: $value->plaintext";
|
||||
break;
|
||||
case 'Date Added:':
|
||||
$item['timestamp'] = $value->plaintext;
|
||||
break;
|
||||
case 'Provided By:':
|
||||
$item['author'] = $value->find('a', 0)->plaintext;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$this->items[] = $item;
|
||||
}
|
||||
}
|
||||
|
||||
public function getURI()
|
||||
{
|
||||
$url = self::URI;
|
||||
|
||||
switch ($this->queriedContext) {
|
||||
case 'From search results':
|
||||
$url .= '?p=search&type=blanket';
|
||||
$url .= '&result=' . $this->getInput('query');
|
||||
|
||||
if ($this->getInput('flac') == 1) {
|
||||
$url .= '&format0=on';
|
||||
}
|
||||
if ($this->getInput('mp3') == 1) {
|
||||
$url .= '&format1=on';
|
||||
}
|
||||
if ($this->getInput('tta') == 1) {
|
||||
$url .= '&format2=on';
|
||||
}
|
||||
if ($this->getInput('opus') == 1) {
|
||||
$url .= '&format3=on';
|
||||
}
|
||||
if ($this->getInput('ogg') == 1) {
|
||||
$url .= '&format4=on';
|
||||
}
|
||||
break;
|
||||
case 'Randomly selected items':
|
||||
$url .= '?p=random';
|
||||
break;
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue