mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-03-14 20:21:14 +03:00
[RutubeBridge] Add bridge (#2661)
This commit is contained in:
parent
2be613e015
commit
ac766aa47f
1 changed files with 91 additions and 0 deletions
91
bridges/RutubeBridge.php
Normal file
91
bridges/RutubeBridge.php
Normal file
|
@ -0,0 +1,91 @@
|
|||
<?php
|
||||
class RutubeBridge extends BridgeAbstract {
|
||||
|
||||
const NAME = 'Rutube';
|
||||
const URI = 'https://rutube.ru';
|
||||
const MAINTAINER = 'em92';
|
||||
const DESCRIPTION = 'Выводит ленту видео';
|
||||
|
||||
const PARAMETERS = array(
|
||||
'По каналу' => array(
|
||||
'c' => array(
|
||||
'name' => 'ИД канала',
|
||||
'exampleValue' => 1342940, // Мятежник Джек
|
||||
'type' => 'number',
|
||||
'required' => true
|
||||
),
|
||||
),
|
||||
'По плейлисту' => array(
|
||||
'p' => array(
|
||||
'name' => 'ИД плейлиста',
|
||||
'exampleValue' => 83641, // QRUSH
|
||||
'type' => 'number',
|
||||
'required' => true
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
protected $title;
|
||||
|
||||
public function getURI() {
|
||||
if ($this->getInput('c')) {
|
||||
return self::URI . '/channel/' . strval($this->getInput('c')) . '/videos/';
|
||||
} else if ($this->getInput('p')) {
|
||||
return self::URI . '/plst/' . strval($this->getInput('p')) . '/';
|
||||
} else {
|
||||
return parent::getURI();
|
||||
}
|
||||
}
|
||||
|
||||
public function getIcon() {
|
||||
return 'https://static.rutube.ru/static/favicon.ico';
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
if (is_null($this->title)) {
|
||||
return parent::getName();
|
||||
} else {
|
||||
return $this->title . ' - ' . parent::getName();
|
||||
}
|
||||
}
|
||||
|
||||
private function getJSONData($html) {
|
||||
$jsonDataRegex = '/window.reduxState = (.*?);/';
|
||||
preg_match($jsonDataRegex, $html, $matches) or returnServerError('Could not find reduxState');
|
||||
return json_decode(str_replace('\x', '\\\x', $matches[1]));
|
||||
}
|
||||
|
||||
public function collectData(){
|
||||
$link = $this->getURI();
|
||||
|
||||
$html = getContents($link);
|
||||
$reduxState = $this->getJSONData($html);
|
||||
$videos = [];
|
||||
if ($this->getInput('c')) {
|
||||
$videos = $reduxState->userChannel->videos->results;
|
||||
$this->title = $reduxState->userChannel->info->name;
|
||||
} else if ($this->getInput('p')) {
|
||||
$videos = $reduxState->playlist->data->results;
|
||||
$this->title = $reduxState->playlist->title;
|
||||
}
|
||||
|
||||
foreach($videos as $video) {
|
||||
$item = new FeedItem();
|
||||
$item->setTitle($video->title);
|
||||
$item->setURI($video->video_url);
|
||||
$content = '<a href="' . $item->getURI() . '">';
|
||||
$content .= '<img src="' . $video->thumbnail_url . '" />';
|
||||
$content .= '</a><br/>';
|
||||
$content .= nl2br(
|
||||
// Converting links in plaintext
|
||||
// Copied from https://stackoverflow.com/a/12590772
|
||||
preg_replace(
|
||||
'$(https?://[a-z0-9_./?=&#-]+)(?![^<>]*>)$i', ' <a href="$1" target="_blank">$1</a> ',
|
||||
$video->description . ' '
|
||||
)
|
||||
);
|
||||
$item->setContent($content);
|
||||
$this->items[] = $item;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue