mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-12-18 08:54:20 +03:00
Add StorytelBridge for Storytel list fetching (#4355)
* Add StorytelBridge for fetching Storytel lists * Updated StorytelBridge to include URL validation and cleaned up code
This commit is contained in:
parent
59d77d4576
commit
17d142c038
1 changed files with 58 additions and 0 deletions
58
bridges/StorytelBridge.php
Normal file
58
bridges/StorytelBridge.php
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
class StorytelBridge extends BridgeAbstract
|
||||
{
|
||||
const NAME = 'Storytel List Bridge';
|
||||
const URI = 'https://www.storytel.com/tr';
|
||||
const DESCRIPTION = 'Fetches books from a Storytel list, including title, author, and cover image.';
|
||||
const MAINTAINER = 'Okbaydere';
|
||||
const PARAMETERS = [
|
||||
'List' => [
|
||||
'url' => [
|
||||
'name' => 'Storytel List URL',
|
||||
'required' => true,
|
||||
'exampleValue' => 'https://www.storytel.com/tr/lists/23d09e0bd8fe4d998d1832ddbfa18166',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
public function collectData()
|
||||
{
|
||||
$url = $this->getInput('url');
|
||||
|
||||
if (!preg_match('/^https:\/\/www\.storytel\.com/', $url)) {
|
||||
returnServerError('Invalid URL: Only Storytel URLs are allowed.');
|
||||
}
|
||||
|
||||
$html = getSimpleHTMLDOM($url);
|
||||
if (!$html) {
|
||||
returnServerError('Unable to fetch Storytel list');
|
||||
}
|
||||
|
||||
foreach ($html->find('li.sc-4615116a-1') as $element) {
|
||||
$item = [];
|
||||
|
||||
$titleElement = $element->find('span.sc-b1963858-0.hoTsmF', 0);
|
||||
$item['title'] = $titleElement ? $titleElement->plaintext : 'No title';
|
||||
|
||||
$authorElement = $element->find('span.sc-b1963858-0.ghYMwH', 0);
|
||||
$item['author'] = $authorElement ? $authorElement->plaintext : 'Unknown author';
|
||||
|
||||
$imgElement = $element->find('img.sc-da400893-5', 0);
|
||||
$coverUrl = $imgElement ? $imgElement->getAttribute('srcset') : '';
|
||||
if ($coverUrl) {
|
||||
$coverUrls = explode(', ', $coverUrl);
|
||||
$bestCoverUrl = trim(end($coverUrls));
|
||||
$item['content'] = '<img src="' . preg_replace('/\?.*/', '', $bestCoverUrl) . '"/>';
|
||||
}
|
||||
|
||||
$linkElement = $element->find('a', 0);
|
||||
$item['uri'] = $linkElement ? 'https://www.storytel.com' . $linkElement->getAttribute('href') : $url;
|
||||
|
||||
$item['content'] .= '<p>Author: ' . $item['author'] . '</p>';
|
||||
$item['content'] .= '<p><a href="' . $item['uri'] . '">More details</a></p>';
|
||||
|
||||
$this->items[] = $item;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue