diff --git a/bridges/RutubeBridge.php b/bridges/RutubeBridge.php
new file mode 100644
index 00000000..f4bfcdb4
--- /dev/null
+++ b/bridges/RutubeBridge.php
@@ -0,0 +1,91 @@
+ 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 = '';
+ $content .= '
';
+ $content .= '
';
+ $content .= nl2br(
+ // Converting links in plaintext
+ // Copied from https://stackoverflow.com/a/12590772
+ preg_replace(
+ '$(https?://[a-z0-9_./?=-]+)(?![^<>]*>)$i', ' $1 ',
+ $video->description . ' '
+ )
+ );
+ $item->setContent($content);
+ $this->items[] = $item;
+ }
+ }
+}