rss-bridge/bridges/FunkBridge.php

85 lines
2.2 KiB
PHP
Raw Normal View History

<?php
class FunkBridge extends BridgeAbstract {
const MAINTAINER = 'µKöff';
const NAME = 'Funk';
const URI = 'https://www.funk.net/';
const DESCRIPTION = 'Videos per channel of German public video-on-demand service Funk';
const PARAMETERS = array(
'Channel' => array(
'channel' => array(
'name' => 'Slug',
'type' => 'text',
'required' => true,
'exampleValue' => 'game-two-856'
),
'max' => array(
'name' => 'Maximum',
'type' => 'number',
'defaultValue' => '-1'
)
)
);
public function collectData(){
switch($this->queriedContext) {
case 'Channel':
$url = static::URI . 'data/videos/byChannelAlias/' . $this->getInput('channel') . '/';
if(!empty($this->getInput('max')) && $this->getInput('max') >= 0) {
$url .= '?size=' . $this->getInput('max');
}
$jsonString = getContents($url) or returnServerError('No contents received!');
$json = json_decode($jsonString, true);
foreach($json['list'] as $element) {
$this->items[] = $this->collectArticle($element);
}
break;
default:
returnServerError('Unknown context!');
}
}
private function collectArticle($element) {
$item = array();
$item['uri'] = static::URI . 'channel/' . $element['channelAlias'] . '/' . $element['alias'];
$item['title'] = $element['title'];
$item['timestamp'] = $element['publicationDate'];
$item['author'] = str_replace('-' . $element['channelId'], '', $element['channelAlias']);
$item['content'] = $element['shortDescription'];
$item['enclosures'] = array(
'https://www.funk.net/api/v4.0/thumbnails/' . $element['imageLandscape']
);
$item['uid'] = $element['entityId'];
return $item;
}
public function detectParameters($url) {
$regex = '/^https?:\/\/(?:www\.)?funk\.net\/channel\/([^\/]+).*$/';
if(preg_match($regex, $url, $urlMatches) > 0) {
return array(
'channel' => $urlMatches[1]
);
} else {
return null;
}
}
public function getIcon() {
return 'https://www.funk.net/img/favicons/favicon-192x192.png';
}
public function getName(){
switch($this->queriedContext) {
case 'Channel':
if(!empty($this->getInput('channel'))) {
return $this->getInput('channel');
}
break;
}
return parent::getName();
}
}