diff --git a/bridges/WebfailBridge.php b/bridges/WebfailBridge.php new file mode 100644 index 00000000..bf2e47af --- /dev/null +++ b/bridges/WebfailBridge.php @@ -0,0 +1,134 @@ + 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 self::URI; + + // 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'] = $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; + } + + $item['content'] = '

' + . $description + . '


'; + + $this->items[] = $item; + } + } + + private function ExtractArticle($html){ + $articles = $html->find('article'); + foreach($articles as $article){ + $item = array(); + $item['title'] = $article->find('a', 1)->innertext; + + // Webfail shares videos or images + if(!is_null($article->find('img.wf-image', 0))){ // Image type + $item['uri'] = $this->getURI() . $article->find('a', 2)->href; + $item['content'] = ''; + } 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'] = ''; + } + + $this->items[] = $item; + } + } + + 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'; + } +}