diff options
| author | 2020-04-16 18:11:26 +0200 | |
|---|---|---|
| committer | 2020-04-16 18:11:26 +0200 | |
| commit | bdc4da6ad07f2f5dfa7cf397cf3a379199c0a2ed (patch) | |
| tree | 17d3ce149bf6bdea7aaab3e7672c6b39e2a4a39a /app/Models | |
| parent | 5ddae689535cb5df7ae4d54f0efc3806d71a266c (diff) | |
Expose podcast in API (#2898)
* Expose podcast in API
Expose RSS enclosures in our API, e.g. for clients supporting podcasts
* PHP CS?
* Annoying linter
* Light optimisation
Diffstat (limited to 'app/Models')
| -rw-r--r-- | app/Models/Entry.php | 22 | ||||
| -rw-r--r-- | app/Models/Feed.php | 5 |
2 files changed, 27 insertions, 0 deletions
diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 9540e0ed5..f4cd82288 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -59,6 +59,28 @@ class FreshRSS_Entry extends Minz_Model { public function content() { return $this->content; } + public function enclosures() { + $results = []; + try { + if (strpos($this->content, '<p class="enclosure-content') !== false) { + $dom = new DOMDocument(); + $dom->loadHTML($this->content, LIBXML_NONET | LIBXML_NOERROR | LIBXML_NOWARNING); + $xpath = new DOMXpath($dom); + $enclosures = $xpath->query('//div[@class="enclosure"]/p[@class="enclosure-content"]/*[@src]'); + foreach ($enclosures as $enclosure) { + $results[] = [ + 'url' => $enclosure->getAttribute('src'), + 'type' => $enclosure->getAttribute('data-type'), + 'length' => $enclosure->getAttribute('data-length'), + ]; + } + } + return $results; + } catch (Exception $ex) { + return $results; + } + } + public function link() { return $this->link; } diff --git a/app/Models/Feed.php b/app/Models/Feed.php index a41b35860..c0bc90b2d 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -373,13 +373,18 @@ class FreshRSS_Feed extends Minz_Model { $elinks[$elink] = true; $mime = strtolower($enclosure->get_type()); $medium = strtolower($enclosure->get_medium()); + $length = $enclosure->get_length(); if ($medium === 'image' || strpos($mime, 'image/') === 0) { $enclosureContent .= '<p class="enclosure-content"><img src="' . $elink . '" alt="" /></p>'; } elseif ($medium === 'audio' || strpos($mime, 'audio/') === 0) { $enclosureContent .= '<p class="enclosure-content"><audio preload="none" src="' . $elink + . ($length == null ? '' : '" data-length="' . intval($length)) + . '" data-type="' . htmlspecialchars($mime, ENT_COMPAT, 'UTF-8') . '" controls="controls"></audio> <a download="" href="' . $elink . '">💾</a></p>'; } elseif ($medium === 'video' || strpos($mime, 'video/') === 0) { $enclosureContent .= '<p class="enclosure-content"><video preload="none" src="' . $elink + . ($length == null ? '' : '" data-length="' . intval($length)) + . '" data-type="' . htmlspecialchars($mime, ENT_COMPAT, 'UTF-8') . '" controls="controls"></video> <a download="" href="' . $elink . '">💾</a></p>'; } elseif ($medium != '' || strpos($mime, 'application/') === 0 || strpos($mime, 'text/') === 0) { $enclosureContent .= '<p class="enclosure-content"><a download="" href="' . $elink . '">💾</a></p>'; |
