mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-03-14 20:21:14 +03:00
New bridge (#3300)
Create rss feed from wallpapers published on erowall.com. Allow fetching n latest wallpapers sorted by date, views, downloads and tags. Co-authored-by: Kurz Junge <kurz.junge.0xa@tutanota.com>
This commit is contained in:
parent
dc9530b405
commit
1ffb2df46d
1 changed files with 127 additions and 0 deletions
127
bridges/ErowallBridge.php
Normal file
127
bridges/ErowallBridge.php
Normal file
|
@ -0,0 +1,127 @@
|
|||
<?php
|
||||
|
||||
class ErowallBridge extends BridgeAbstract
|
||||
{
|
||||
const NAME = 'Erowall.com Bridge';
|
||||
const URI = 'https://www.erowall.com/';
|
||||
const DESCRIPTION = 'Latest wallpapers from erowall.com';
|
||||
const MAINTAINER = 'kurz.junge';
|
||||
|
||||
const PARAMETERS = [
|
||||
'global' => [
|
||||
'count' => [
|
||||
'type' => 'number',
|
||||
'name' => 'Count',
|
||||
'title' => 'How many wallpapers to fetch',
|
||||
'defaultValue' => 16
|
||||
]
|
||||
],
|
||||
'By tag' => [
|
||||
'tag' => [
|
||||
'type' => 'text',
|
||||
'name' => 'tag',
|
||||
'title' => 'Filter results by tag (e.g. playboy)',
|
||||
'required' => true
|
||||
]
|
||||
],
|
||||
'Latest' => [],
|
||||
'Most viewed' => [],
|
||||
'Most downloaded' => []
|
||||
];
|
||||
|
||||
public function collectData()
|
||||
{
|
||||
$requestedCount = $this->getInput('count');
|
||||
$count = 0;
|
||||
|
||||
while ($count < $requestedCount) {
|
||||
# Indexing from 1
|
||||
$videosURL = $this->getPagedURI($count / 16 + 1);
|
||||
|
||||
$website = getSimpleHTMLDOMCached($videosURL);
|
||||
$nodes = $website->find('.wpmini');
|
||||
|
||||
foreach ($nodes as $wpmini) {
|
||||
$n = $wpmini->find('a', 0);
|
||||
|
||||
# The href has format "/w/1234/" so we just remove all non-numeric
|
||||
$uid = preg_replace('/[^0-9]/', '', $n->href);
|
||||
$imageURL = self::URI . "/wallpapers/original/$uid.jpg";
|
||||
|
||||
$item = [
|
||||
'title' => "Wallpaper $uid",
|
||||
'uri' => self::URI . $n->href,
|
||||
'uid' => "$uid",
|
||||
'enclosures' => [ $imageURL ],
|
||||
'content' => "<img src=\"$imageURL\"/>"
|
||||
];
|
||||
|
||||
$tags = basename($n->title, ' wallpaper');
|
||||
$item['categories'] = array_map(
|
||||
'ucwords',
|
||||
explode(',', $tags)
|
||||
);
|
||||
|
||||
$this->items[] = $item;
|
||||
$count++;
|
||||
|
||||
if ($count >= $requestedCount) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
# In case that current page has less than 16 wallpapers, it is the
|
||||
# last page and we don't iterate further
|
||||
if (count($nodes) < 16) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function getPagedURI($pgnum)
|
||||
{
|
||||
return $this->getURI() . "/page/$pgnum";
|
||||
}
|
||||
|
||||
public function getURI()
|
||||
{
|
||||
$ret = self::URI;
|
||||
switch ($this->queriedContext) {
|
||||
case 'Most viewed':
|
||||
$ret .= 'views/';
|
||||
break;
|
||||
case 'Most downloaded':
|
||||
$ret .= 'down/';
|
||||
break;
|
||||
case 'Latest':
|
||||
$ret .= 'dat/';
|
||||
break;
|
||||
default:
|
||||
$tag = $this->getInput('tag');
|
||||
$ret .= 'teg/' . str_replace(' ', '+', $tag);
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
$count = $this->getInput('count');
|
||||
$ret = 'Erowall ';
|
||||
switch ($this->queriedContext) {
|
||||
case 'Most viewed':
|
||||
case 'Most downloaded':
|
||||
case 'Latest':
|
||||
$ret .= $count . ' ' . strtolower($this->queriedContext);
|
||||
break;
|
||||
case 'By tag':
|
||||
$tag = $this->getInput('tag');
|
||||
$ret .= "$count latest " . $tag;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
return $ret . ' wallpapers';
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue