RSS-Bridge_rss-bridge/bridges/JapanExpoBridge.php

109 lines
3.7 KiB
PHP

<?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 = [ [
'mode' => [
'name' => 'Show full contents',
'type' => 'checkbox',
]
]];
public function getIcon()
{
return 'https://s.japan-expo.com/katana/images/JES073/favicons/paris.png';
}
public function collectData()
{
$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;
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);
if (count($img_search_result) >= 2) {
$thumbnail = trim($img_search_result[1], "'");
}
if ($fullcontent) {
if ($count >= 5) {
break;
}
$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
);
$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 = [];
$item['uri'] = $url;
$item['title'] = $title;
$item['timestamp'] = $timestamp;
$item['enclosures'] = [$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)),
[
'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'
]
)
);
}
}