diff --git a/bridges/MallTvBridge.php b/bridges/MallTvBridge.php new file mode 100644 index 00000000..34b38e84 --- /dev/null +++ b/bridges/MallTvBridge.php @@ -0,0 +1,73 @@ + array( + 'name' => 'url to the show', + 'required' => true, + 'exampleValue' => 'https://www.mall.tv/zivot-je-hra' + ) + ) + ); + + private function fixChars($text) { + return html_entity_decode($text, ENT_QUOTES, 'UTF-8'); + } + + private function getUploadTimeFromUrl($url) { + $html = getSimpleHTMLDOM($url) + or returnServerError('Could not request MALL.TV detail page'); + + $scriptLdJson = $html->find('script[type="application/ld+json"]', 0)->innertext; + if (!preg_match('/[\'"]uploadDate[\'"]\s*:\s*[\'"](\d{4}-\d{2}-\d{2})[\'"]/', $scriptLdJson, $match)) { + returnServerError('Could not get date from MALL.TV detail page'); + } + + return strtotime($match[1]); + } + + public function collectData() { + $url = $this->getInput('url'); + + if (!preg_match('/^https:\/\/www\.mall\.tv\/[a-z0-9-]+(\/[a-z0-9-]+)?\/?$/', $url)) { + returnServerError('Invalid url'); + } + + $html = getSimpleHTMLDOM($url) + or returnServerError('Could not request MALL.TV'); + + $this->feedUri = $url; + $this->feedName = $this->fixChars($html->find('title', 0)->plaintext); + + foreach ($html->find('section.isVideo .video-card') as $element) { + $itemTitle = $element->find('.video-card__details-link', 0); + $itemThumbnail = $element->find('.video-card__thumbnail', 0); + $itemUri = self::URI . $itemTitle->getAttribute('href'); + + $item = array( + 'title' => $this->fixChars($itemTitle->plaintext), + 'uri' => $itemUri, + 'content' => '', + 'timestamp' => $this->getUploadTimeFromUrl($itemUri) + ); + + $this->items[] = $item; + } + } + + public function getURI() { + return isset($this->feedUri) ? $this->feedUri : parent::getURI(); + } + + public function getName() { + return isset($this->feedName) ? $this->feedName : parent::getName(); + } +}