From d859df0ab453073641fa6c5c52de521639ce2d68 Mon Sep 17 00:00:00 2001 From: NH Gooi Date: Mon, 3 Jun 2024 16:04:26 +0200 Subject: [PATCH] API endpoint voor NLPO-dashboard --- api/app/Http/Controllers/NewsController.php | 78 +++++++++++++++++++-- api/routes/web.php | 1 + 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/api/app/Http/Controllers/NewsController.php b/api/app/Http/Controllers/NewsController.php index 35378e6..685c061 100644 --- a/api/app/Http/Controllers/NewsController.php +++ b/api/app/Http/Controllers/NewsController.php @@ -103,13 +103,19 @@ QUERY; public function retrieveNewsItems($page, $count, $filter, $params) { $filterSql = ""; - $params = ['target' => self::$WEBSITE_TARGET, 'category' => self::$NEWS_CATEGORY, 'secondarycategory' => self::$EXTERNAL_NEWS_CATEGORY]; - if($filter) { - foreach($filter as $field => $value) { - $paramName = preg_replace('/[^A-Za-z0-9]/', '', $field); - $filterSql .= " AND $field = :$paramName"; - $params[$paramName] = $value; - } + $params['target'] = self::$WEBSITE_TARGET; + $params['category'] = self::$NEWS_CATEGORY; + $params['secondarycategory'] = self::$EXTERNAL_NEWS_CATEGORY; + if($filter) { + if(is_array($filter)) { + foreach($filter as $field => $value) { + $paramName = preg_replace('/[^A-Za-z0-9]/', '', $field); + $filterSql .= " AND $field = :$paramName"; + $params[$paramName] = $value; + } + } else { + $filterSql .= ' AND ' . $filter; + } } $start = ($page - 1) * $count; @@ -397,6 +403,64 @@ QUERY return $item ? response()->json(new \Model\CalendarEvent($item['data'], $item['images'], $item['podcast'])) : abort(404); } + /** + * Overzicht voor het NLPO-dashboard + */ + public function nlpo(Request $request) { + $from = $request->get('from'); + if(!$from) { $from = date('Y-m-d', strtotime('-7 days')); } + $to = $request->get('to'); + if(!$to) { $to = date('Y-m-d'); } + + $filter = 'DATE(`news`.`creationdt`) >= :from AND DATE(`news`.`creationdt`) <= :to'; + $items = $this->retrieveNewsItems(1, 10000, + $filter, + ['from' => $from, 'to' => $to]); + $result = []; + foreach($items as $item) { + $tags = []; + if($item->theme) $tags[] = $item->theme->title; + if($item->region) $tags[] = $item->region->title; + + $text = $item->content; + $source = app('db')->select('SELECT content FROM `news_target_content` WHERE news = :news AND target = 0 AND published = 1 AND active = 1', + ['news' => $item->id]); + if(count($source)) { + $text = $source[0]->content; + $source_data = json_decode($source[0]->content); + if($source_data) { + $text = ""; + foreach($source_data->article->blocks as $block) { + if($block->type == 'authors') { + $authors = []; + foreach($block->authors as $author) { + $authors[] = $author->name; + } + $item->author = implode(', ', $authors); + } else if(isset($block->text)) { + $text .= '
' . $block->text . '
'; + } + } + } else { + $text = $source[0]; + } + } + $result[] = [ + 'title' => $item->title, + 'url' => 'https://nhgooi.nl/' . $item->url, + 'text' => $text, + 'date' => $item->published->format('Y-m-d\TH:i:s.z\Z'), + 'art_id' => $item->id, + 'author' => $item->author, + 'excerpt' => strip_tags($item->content), + 'categories' => $tags, + 'tags' => $tags, + 'comment_count' => 0 + ]; + } + return response()->json($result); + } + private function itemFromCategory($category, $id) { $params = ['id' => (int)$id, 'target' => self::$WEBSITE_TARGET]; if(is_array($category)) { diff --git a/api/routes/web.php b/api/routes/web.php index 99e5a51..1097741 100644 --- a/api/routes/web.php +++ b/api/routes/web.php @@ -24,6 +24,7 @@ $app->get( 'menu/special', 'MenuController@special' ); $app->get('nieuws/overzicht', 'NewsController@newslist' ); $app->get('nieuws/kabelkrant', 'NewsController@tvlist' ); +$app->get('nieuws/nlpo', 'NewsController@nlpo' ); $app->get('nieuws/regio/{region:[a-z0-9-]+}', 'NewsController@regionlist' ); $app->get('nieuws/thema/{theme:[a-z0-9-]+}', 'NewsController@themelist' ); $app->get('nieuws/zoeken/{query}', 'NewsController@findnews' );