diff options
Diffstat (limited to 'bridges/JapanExpoBridge.php')
-rw-r--r-- | bridges/JapanExpoBridge.php | 186 |
1 files changed, 95 insertions, 91 deletions
diff --git a/bridges/JapanExpoBridge.php b/bridges/JapanExpoBridge.php index c56999fe..0d02e753 100644 --- a/bridges/JapanExpoBridge.php +++ b/bridges/JapanExpoBridge.php @@ -1,104 +1,108 @@ <?php -class JapanExpoBridge extends BridgeAbstract { - const MAINTAINER = 'Ginko'; - const NAME = 'Japan Expo Actualités'; - const URI = 'https://www.japan-expo-paris.com/fr/actualites'; - const CACHE_TIMEOUT = 14400; // 4h - const DESCRIPTION = 'Returns most recent entries from Japan Expo actualités.'; - const PARAMETERS = array( array( - 'mode' => array( - 'name' => 'Show full contents', - 'type' => 'checkbox', - ) - )); +class JapanExpoBridge extends BridgeAbstract +{ + const MAINTAINER = 'Ginko'; + const NAME = 'Japan Expo Actualités'; + const URI = 'https://www.japan-expo-paris.com/fr/actualites'; + const CACHE_TIMEOUT = 14400; // 4h + const DESCRIPTION = 'Returns most recent entries from Japan Expo actualités.'; + const PARAMETERS = [ [ + 'mode' => [ + 'name' => 'Show full contents', + 'type' => 'checkbox', + ] + ]]; - public function getIcon() { - return 'https://s.japan-expo.com/katana/images/JES073/favicons/paris.png'; - } + public function getIcon() + { + return 'https://s.japan-expo.com/katana/images/JES073/favicons/paris.png'; + } - public function collectData(){ + public function collectData() + { + $convert_article_images = function ($matches) { + if (is_array($matches) && count($matches) > 1) { + return '<img src="' . $matches[1] . '" />'; + } + }; - $convert_article_images = function($matches){ - if(is_array($matches) && count($matches) > 1) { - return '<img src="' . $matches[1] . '" />'; - } - }; + $html = getSimpleHTMLDOM(self::URI); + $fullcontent = $this->getInput('mode'); + $count = 0; - $html = getSimpleHTMLDOM(self::URI); - $fullcontent = $this->getInput('mode'); - $count = 0; + foreach ($html->find('a._tile2') as $element) { + $url = $element->href; + $thumbnail = 'https://s.japan-expo.com/katana/images/JES049/paris.png'; + preg_match('/url\(([^)]+)\)/', $element->find('img.rspvimgset', 0)->style, $img_search_result); - foreach($html->find('a._tile2') as $element) { + if (count($img_search_result) >= 2) { + $thumbnail = trim($img_search_result[1], "'"); + } - $url = $element->href; - $thumbnail = 'https://s.japan-expo.com/katana/images/JES049/paris.png'; - preg_match('/url\(([^)]+)\)/', $element->find('img.rspvimgset', 0)->style, $img_search_result); + if ($fullcontent) { + if ($count >= 5) { + break; + } - if(count($img_search_result) >= 2) - $thumbnail = trim($img_search_result[1], "'"); + $article_html = getSimpleHTMLDOMCached($url); + $header = $article_html->find('header.pageHeadBox', 0); + $timestamp = strtotime($header->find('time', 0)->datetime); + $title_html = $header->find('div.section', 0)->next_sibling(); + $title = $title_html->plaintext; + $headings = $title_html->next_sibling()->outertext; + $article = $article_html->find('div.content', 0)->innertext; + $article = preg_replace_callback( + '/<img [^>]+ style="[^\(]+\(\'([^\']+)\'[^>]+>/i', + $convert_article_images, + $article + ); - if($fullcontent) { - if($count >= 5) { - break; - } + $content = $headings . $article; + } else { + $date_text = $element->find('span.date', 0)->plaintext; + $timestamp = $this->frenchPubDateToTimestamp($date_text); + $title = trim($element->find('span._title', 0)->plaintext); + $content = '<img src="' + . $thumbnail + . '"></img><br />' + . $date_text + . '<br /><a href="' + . $url + . '">Lire l\'article</a>'; + } - $article_html = getSimpleHTMLDOMCached($url); - $header = $article_html->find('header.pageHeadBox', 0); - $timestamp = strtotime($header->find('time', 0)->datetime); - $title_html = $header->find('div.section', 0)->next_sibling(); - $title = $title_html->plaintext; - $headings = $title_html->next_sibling()->outertext; - $article = $article_html->find('div.content', 0)->innertext; - $article = preg_replace_callback( - '/<img [^>]+ style="[^\(]+\(\'([^\']+)\'[^>]+>/i', - $convert_article_images, - $article); + $item = []; + $item['uri'] = $url; + $item['title'] = $title; + $item['timestamp'] = $timestamp; + $item['enclosures'] = [$thumbnail]; + $item['content'] = $content; + $this->items[] = $item; + $count++; + } + } - $content = $headings . $article; - } else { - $date_text = $element->find('span.date', 0)->plaintext; - $timestamp = $this->frenchPubDateToTimestamp($date_text); - $title = trim($element->find('span._title', 0)->plaintext); - $content = '<img src="' - . $thumbnail - . '"></img><br />' - . $date_text - . '<br /><a href="' - . $url - . '">Lire l\'article</a>'; - } - - $item = array(); - $item['uri'] = $url; - $item['title'] = $title; - $item['timestamp'] = $timestamp; - $item['enclosures'] = array($thumbnail); - $item['content'] = $content; - $this->items[] = $item; - $count++; - } - } - - private function frenchPubDateToTimestamp($date_to_parse) { - return strtotime( - strtr( - strtolower(str_replace('Publié le ', '', $date_to_parse)), - array( - 'janvier' => 'jan', - 'février' => 'feb', - 'mars' => 'march', - 'avril' => 'apr', - 'mai' => 'may', - 'juin' => 'jun', - 'juillet' => 'jul', - 'août' => 'aug', - 'septembre' => 'sep', - 'octobre' => 'oct', - 'novembre' => 'nov', - 'décembre' => 'dec' - ) - ) - ); - } + private function frenchPubDateToTimestamp($date_to_parse) + { + return strtotime( + strtr( + strtolower(str_replace('Publié le ', '', $date_to_parse)), + [ + 'janvier' => 'jan', + 'février' => 'feb', + 'mars' => 'march', + 'avril' => 'apr', + 'mai' => 'may', + 'juin' => 'jun', + 'juillet' => 'jul', + 'août' => 'aug', + 'septembre' => 'sep', + 'octobre' => 'oct', + 'novembre' => 'nov', + 'décembre' => 'dec' + ] + ) + ); + } } |