From 89c37017269feaf1f57086526d4ae8324d52d31a Mon Sep 17 00:00:00 2001 From: Mischa Spelt Date: Thu, 30 Jan 2020 22:46:21 +0100 Subject: [PATCH] Added RSS for podcasts at /rss/podcasts --- .../Http/Controllers/PodcastController.php | 26 ++++++++++--- api/resources/views/rss/podcasts.blade.php | 37 +++++++++++++++++++ api/routes/web.php | 3 ++ common/classes/Podcast.php | 12 ++++++ 4 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 api/resources/views/rss/podcasts.blade.php diff --git a/api/app/Http/Controllers/PodcastController.php b/api/app/Http/Controllers/PodcastController.php index 4ddff44..2deb342 100644 --- a/api/app/Http/Controllers/PodcastController.php +++ b/api/app/Http/Controllers/PodcastController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Http\Response; use Symfony\Component\HttpFoundation\StreamedResponse; error_reporting(E_ALL); @@ -11,7 +12,7 @@ ini_set('display_errors', true); class PodcastController extends Controller { public static $BASE_SQL = <<getPodcastList($request, null, []); } + /** + * RSS-feed van alle podcasts + */ + public function rss(Request $request) { + $podcasts = $this->retrievePodcasts($page = 1, $count = 20, $filter = null, $params = []); + $view = view('rss.podcasts')->with('podcasts', $podcasts); + return response($view)->header('Content-Type', 'application/xml'); + } + /** * Lijst van alle podcasts voor een specifiek programma */ @@ -103,12 +113,18 @@ QUERY; private function getPodcastList(Request $request, $filter, $params) { - $count = (int)$request->get('aantal', 15); - $page = (int)$request->get('pagina', 1); + $count = (int)$request->get('aantal', 15); + $page = (int)$request->get('pagina', 1); if($count <= 0 || $page <= 0) { return abort(400); } + $result = $this->retrievePodcasts($page, $count, $filter, $params); + return response()->json(['page' => $page, 'count' => $count, 'podcasts' => $result]); + } + + private function retrievePodcasts($page, $count, $filter, $params) + { $start = ($page - 1) * $count; $podcasts = app('db')->select(self::$BASE_SQL . ($filter ? ' AND (' . $filter . ')' : '') @@ -120,8 +136,8 @@ QUERY; foreach($podcasts as $podcast) { $result[] = new \Model\Podcast($podcast); } - - return response()->json(['page' => $page, 'count' => $count, 'podcasts' => $result]); + + return $result; } /** diff --git a/api/resources/views/rss/podcasts.blade.php b/api/resources/views/rss/podcasts.blade.php new file mode 100644 index 0000000..4362243 --- /dev/null +++ b/api/resources/views/rss/podcasts.blade.php @@ -0,0 +1,37 @@ + + + + +NH Gooi Gemist +Fragmenten en interviews eerder te horen op NH Gooi Radio +https://nhgooi.nl +nl-nl +NH Gooi Radio +no + + + info@nhgooi.nl + + +nlnl + +@foreach($podcasts as $podcast) + + {{$podcast->title}} + {{$podcast->content}} + {{$podcast->content}} + https://nhgooi.nl/podcast/download/{{$podcast->url}} + {{$podcast->created->format('r')}} + NH Gooi Radio + {{$podcast->formatDuration()}} + no + https://nhgooi.nl/podcast-{{$podcast->id}} + +@endforeach + + + + diff --git a/api/routes/web.php b/api/routes/web.php index e42302d..2f0c436 100644 --- a/api/routes/web.php +++ b/api/routes/web.php @@ -11,10 +11,13 @@ | */ + $app->get('/', function () use ($app) { return redirect('docs'); }); +$app->get( 'rss/podcasts', 'PodcastController@rss' ); + $app->get( 'menu/special', 'MenuController@special' ); $app->get('nieuws/overzicht', 'NewsController@newslist' ); diff --git a/common/classes/Podcast.php b/common/classes/Podcast.php index 65ea695..d5772f0 100644 --- a/common/classes/Podcast.php +++ b/common/classes/Podcast.php @@ -14,6 +14,7 @@ class Podcast extends Model { public $url; public $auth; public $download; + public $duration; public $image; private $key; @@ -59,6 +60,17 @@ class Podcast extends Model { return '/var/audio/podcast/' . $this->soundfilename; } + public function formatDuration() { + $seconds = $this->duration / 1000; + $milliseconds = $this->duration % 1000; + + $hours = ($seconds > 3600) ? floor($seconds / 3600) : 0; + $seconds %= 3600; + return str_pad($hours, 2, '0', STR_PAD_LEFT) + . gmdate(':i:s', $seconds) + . ($milliseconds ? ".$milliseconds" : '') ; + } + public function excerpt() { $maxLength = 500; return '

' .