diff options
Diffstat (limited to 'bridges/WebfailBridge.php')
-rw-r--r-- | bridges/WebfailBridge.php | 321 |
1 files changed, 167 insertions, 154 deletions
diff --git a/bridges/WebfailBridge.php b/bridges/WebfailBridge.php index fefd539a..e55988da 100644 --- a/bridges/WebfailBridge.php +++ b/bridges/WebfailBridge.php @@ -1,156 +1,169 @@ <?php -class WebfailBridge extends BridgeAbstract { - const MAINTAINER = 'logmanoriginal'; - const URI = 'https://webfail.com'; - const NAME = 'Webfail'; - const DESCRIPTION = 'Returns the latest fails'; - const PARAMETERS = array( - 'By content type' => array( - 'language' => array( - 'name' => 'Language', - 'type' => 'list', - 'title' => 'Select your language', - 'values' => array( - 'English' => 'en', - 'German' => 'de' - ), - 'defaultValue' => 'English' - ), - 'type' => array( - 'name' => 'Type', - 'type' => 'list', - 'title' => 'Select your content type', - 'values' => array( - 'None' => '/', - 'Facebook' => '/ffdts', - 'Images' => '/images', - 'Videos' => '/videos', - 'Gifs' => '/gifs' - ), - 'defaultValue' => 'None' - ) - ) - ); - - public function getURI(){ - if(is_null($this->getInput('language'))) - return parent::getURI(); - - // e.g.: https://en.webfail.com - return 'https://' . $this->getInput('language') . '.webfail.com'; - } - - public function collectData(){ - $html = getSimpleHTMLDOM($this->getURI() . $this->getInput('type')); - - $type = array_search($this->getInput('type'), - self::PARAMETERS[$this->queriedContext]['type']['values']); - - switch(strtolower($type)) { - case 'facebook': - case 'videos': - $this->extractNews($html, $type); - break; - case 'none': - case 'images': - case 'gifs': - $this->extractArticle($html); - break; - default: returnClientError('Unknown type: ' . $type); - } - } - - private function extractNews($html, $type){ - $news = $html->find('#main', 0)->find('a.wf-list-news'); - foreach($news as $element) { - $item = array(); - $item['title'] = $this->fixTitle($element->find('div.wf-news-title', 0)->innertext); - $item['uri'] = $this->getURI() . $element->href; - - $img = $element->find('img.wf-image', 0)->src; - // Load high resolution image for 'facebook' - switch(strtolower($type)) { - case 'facebook': - $img = $this->getImageHiResUri($item['uri']); - break; - default: - } - - $description = ''; - if(!is_null($element->find('div.wf-news-description', 0))) { - $description = $element->find('div.wf-news-description', 0)->innertext; - } - - $infoElement = $element->find('div.wf-small', 0); - if (!is_null($infoElement)) { - if (preg_match('/(\d{2}\.\d{2}\.\d{4})/m', $infoElement->innertext, $matches) === 1 && count($matches) == 2) { - $dt = DateTime::createFromFormat('!d.m.Y', $matches[1]); - if ($dt !== false) { - $item['timestamp'] = $dt->getTimestamp(); - } - } - } - - $item['content'] = '<p>' - . $description - . '</p><br><a href="' - . $item['uri'] - . '"><img src="' - . $img - . '"></a>'; - - $this->items[] = $item; - } - } - - private function extractArticle($html){ - $articles = $html->find('article'); - foreach($articles as $article) { - $item = array(); - $item['title'] = $this->fixTitle($article->find('a', 1)->innertext); - - // Images, videos and gifs are provided in their own unique way - if(!is_null($article->find('img.wf-image', 0))) { // Image type - $item['uri'] = $this->getURI() . $article->find('a', 2)->href; - $item['content'] = '<a href="' - . $item['uri'] - . '"><img src="' - . $article->find('img.wf-image', 0)->src - . '"></a>'; - } elseif(!is_null($article->find('div.wf-video', 0))) { // Video type - $videoId = $this->getVideoId($article->find('div.wf-play', 0)->onclick); - $item['uri'] = 'https://youtube.com/watch?v=' . $videoId; - $item['content'] = '<a href="' - . $item['uri'] - . '"><img src="http://img.youtube.com/vi/' - . $videoId - . '/0.jpg"></a>'; - } elseif(!is_null($article->find('video[id*=gif-]', 0))) { // Gif type - $item['uri'] = $this->getURI() . $article->find('a', 2)->href; - $item['content'] = '<video controls src="' - . $article->find('video[id*=gif-]', 0)->src - . '" poster="' - . $article->find('video[id*=gif-]', 0)->poster - . '"></video>'; - } - - $this->items[] = $item; - } - } - - private function fixTitle($title){ - // This fixes titles that include umlauts (in German language) - return html_entity_decode($title, ENT_QUOTES | ENT_HTML401, 'UTF-8'); - } - - private function getVideoId($onclick){ - return substr($onclick, 21, 11); - } - - private function getImageHiResUri($url){ - // https://de.webfail.com/ef524fae509?tag=ffdt - // http://cdn.webfail.com/upl/img/ef524fae509/post2.jpg - $id = substr($url, strrpos($url, '/') + 1, strlen($url) - strrpos($url, '?') + 2); - return 'http://cdn.webfail.com/upl/img/' . $id . '/post2.jpg'; - } + +class WebfailBridge extends BridgeAbstract +{ + const MAINTAINER = 'logmanoriginal'; + const URI = 'https://webfail.com'; + const NAME = 'Webfail'; + const DESCRIPTION = 'Returns the latest fails'; + const PARAMETERS = [ + 'By content type' => [ + 'language' => [ + 'name' => 'Language', + 'type' => 'list', + 'title' => 'Select your language', + 'values' => [ + 'English' => 'en', + 'German' => 'de' + ], + 'defaultValue' => 'English' + ], + 'type' => [ + 'name' => 'Type', + 'type' => 'list', + 'title' => 'Select your content type', + 'values' => [ + 'None' => '/', + 'Facebook' => '/ffdts', + 'Images' => '/images', + 'Videos' => '/videos', + 'Gifs' => '/gifs' + ], + 'defaultValue' => 'None' + ] + ] + ]; + + public function getURI() + { + if (is_null($this->getInput('language'))) { + return parent::getURI(); + } + + // e.g.: https://en.webfail.com + return 'https://' . $this->getInput('language') . '.webfail.com'; + } + + public function collectData() + { + $html = getSimpleHTMLDOM($this->getURI() . $this->getInput('type')); + + $type = array_search( + $this->getInput('type'), + self::PARAMETERS[$this->queriedContext]['type']['values'] + ); + + switch (strtolower($type)) { + case 'facebook': + case 'videos': + $this->extractNews($html, $type); + break; + case 'none': + case 'images': + case 'gifs': + $this->extractArticle($html); + break; + default: + returnClientError('Unknown type: ' . $type); + } + } + + private function extractNews($html, $type) + { + $news = $html->find('#main', 0)->find('a.wf-list-news'); + foreach ($news as $element) { + $item = []; + $item['title'] = $this->fixTitle($element->find('div.wf-news-title', 0)->innertext); + $item['uri'] = $this->getURI() . $element->href; + + $img = $element->find('img.wf-image', 0)->src; + // Load high resolution image for 'facebook' + switch (strtolower($type)) { + case 'facebook': + $img = $this->getImageHiResUri($item['uri']); + break; + default: + } + + $description = ''; + if (!is_null($element->find('div.wf-news-description', 0))) { + $description = $element->find('div.wf-news-description', 0)->innertext; + } + + $infoElement = $element->find('div.wf-small', 0); + if (!is_null($infoElement)) { + if (preg_match('/(\d{2}\.\d{2}\.\d{4})/m', $infoElement->innertext, $matches) === 1 && count($matches) == 2) { + $dt = DateTime::createFromFormat('!d.m.Y', $matches[1]); + if ($dt !== false) { + $item['timestamp'] = $dt->getTimestamp(); + } + } + } + + $item['content'] = '<p>' + . $description + . '</p><br><a href="' + . $item['uri'] + . '"><img src="' + . $img + . '"></a>'; + + $this->items[] = $item; + } + } + + private function extractArticle($html) + { + $articles = $html->find('article'); + foreach ($articles as $article) { + $item = []; + $item['title'] = $this->fixTitle($article->find('a', 1)->innertext); + + // Images, videos and gifs are provided in their own unique way + if (!is_null($article->find('img.wf-image', 0))) { // Image type + $item['uri'] = $this->getURI() . $article->find('a', 2)->href; + $item['content'] = '<a href="' + . $item['uri'] + . '"><img src="' + . $article->find('img.wf-image', 0)->src + . '"></a>'; + } elseif (!is_null($article->find('div.wf-video', 0))) { // Video type + $videoId = $this->getVideoId($article->find('div.wf-play', 0)->onclick); + $item['uri'] = 'https://youtube.com/watch?v=' . $videoId; + $item['content'] = '<a href="' + . $item['uri'] + . '"><img src="http://img.youtube.com/vi/' + . $videoId + . '/0.jpg"></a>'; + } elseif (!is_null($article->find('video[id*=gif-]', 0))) { // Gif type + $item['uri'] = $this->getURI() . $article->find('a', 2)->href; + $item['content'] = '<video controls src="' + . $article->find('video[id*=gif-]', 0)->src + . '" poster="' + . $article->find('video[id*=gif-]', 0)->poster + . '"></video>'; + } + + $this->items[] = $item; + } + } + + private function fixTitle($title) + { + // This fixes titles that include umlauts (in German language) + return html_entity_decode($title, ENT_QUOTES | ENT_HTML401, 'UTF-8'); + } + + private function getVideoId($onclick) + { + return substr($onclick, 21, 11); + } + + private function getImageHiResUri($url) + { + // https://de.webfail.com/ef524fae509?tag=ffdt + // http://cdn.webfail.com/upl/img/ef524fae509/post2.jpg + $id = substr($url, strrpos($url, '/') + 1, strlen($url) - strrpos($url, '?') + 2); + return 'http://cdn.webfail.com/upl/img/' . $id . '/post2.jpg'; + } } |