aboutsummaryrefslogtreecommitdiff
path: root/app/Models
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2020-04-16 18:11:26 +0200
committerGravatar GitHub <noreply@github.com> 2020-04-16 18:11:26 +0200
commitbdc4da6ad07f2f5dfa7cf397cf3a379199c0a2ed (patch)
tree17d3ce149bf6bdea7aaab3e7672c6b39e2a4a39a /app/Models
parent5ddae689535cb5df7ae4d54f0efc3806d71a266c (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.php22
-rw-r--r--app/Models/Feed.php5
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>';