diff options
author | 2024-11-03 18:22:44 +0100 | |
---|---|---|
committer | 2024-11-03 18:22:44 +0100 | |
commit | 082542dabcfd0ac1b68923a438c218023353d4f9 (patch) | |
tree | aec7b18b9885a82d01e12ec4e532b54d212e379b | |
parent | bc536f392877623ce48140a72a0025415458061d (diff) | |
download | rss-bridge-082542dabcfd0ac1b68923a438c218023353d4f9.tar.gz rss-bridge-082542dabcfd0ac1b68923a438c218023353d4f9.tar.zst rss-bridge-082542dabcfd0ac1b68923a438c218023353d4f9.zip |
[TestFaktaBridge] new bridge (#4307)
* [TestFaktaBridge] new bridge
* [TestFaktaBridge] fix linting errors
-rw-r--r-- | bridges/TestFaktaBridge.php | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/bridges/TestFaktaBridge.php b/bridges/TestFaktaBridge.php new file mode 100644 index 00000000..b9a65138 --- /dev/null +++ b/bridges/TestFaktaBridge.php @@ -0,0 +1,100 @@ +<?PHP + +class TestFaktaBridge extends BridgeAbstract +{ + const NAME = 'Testfakta'; + const URI = 'https://www.testfakta.se'; + const DESCRIPTION = 'Letest independent tests by Testfakta'; + const MAINTAINER = 'ajain-93'; + + public function getIcon() + { + return self::URI . '/themes/testfakta/favicon.ico'; + } + + private function parseSwedishDates($dateString) + { + // Mapping of Swedish month names to English month names + $months = [ + 'Jan' => 'Jan', + 'Feb' => 'Feb', + 'Mar' => 'Mar', + 'Apr' => 'Apr', + 'Maj' => 'May', + 'Jun' => 'Jun', + 'Jul' => 'Jul', + 'Aug' => 'Aug', + 'Sep' => 'Sep', + 'Okt' => 'Oct', + 'Nov' => 'Nov', + 'Dec' => 'Dec' + ]; + + // Replace Swedish month names with English + $dateString = preg_replace_callback( + '/\b(' . implode('|', array_keys($months)) . ')\b/', + function ($matches) use ($months) { + return $months[$matches[0]]; + }, + $dateString + ); + + // Create DateTime object + $dateValue = DateTime::createFromFormat( + 'd M, Y', + trim($dateString), + new DateTimeZone('Europe/Stockholm') + ); + if ($dateValue) { + $dateValue->setTime(0, 0); // Set time to 00:00 + return $dateValue->getTimestamp(); + } + + return $dateValue ? $dateValue->getTimestamp() : false; + } + + public function collectData() + { + $NEWSURL = self::URI . '/sv'; + $html = getSimpleHTMLDOMCached($NEWSURL, 18000) or + returnServerError('Could not request: ' . $NEWSURL); + + foreach ($html->find('.row-container') as $element) { + // Debug::log($element); + + $title = $element->find('h2', 0)->plaintext; + $category = trim($element->find('.red-label', 0)->plaintext); + $url = self::URI . $element->find('a', 0)->getAttribute('href'); + $figure = $element->find('img', 0); + $preamble = trim($element->find('.text', 0)->plaintext); + + $article_html = getSimpleHTMLDOMCached($url, 18000) or + returnServerError('Could not request: ' . $url); + $article_content = $article_html->find('div.content', 0); + $article_text = $article_html->find('article', 0); + + $requestor = $article_html->find('div.uppdrag', 0)->plaintext; + $author = trim($article_html->find('span.name', 0)->plaintext); + $published = $this->parseSwedishDates( + str_replace( + 'Publicerad: ', + '', + trim($article_html->find('span.created', 0)->plaintext) + ) + ); + + $content = $figure . '<br/>'; + $content .= '<b>' . strtoupper($category) . '</b> ' . $requestor . '<br/><br/>'; + $content .= '<b><i>' . $preamble . '</i></b><br/><br/>'; + $content .= $article_text; + + $this->items[] = [ + 'uri' => $url, + 'title' => $title, + 'author' => $author, + 'timestamp' => $published, + 'content' => trim($content), + ]; + } + } +} |