]> git.wh0rd.org Git - tt-rss.git/commitdiff
parser: move media:element handling to feeditem_common; use media:content @media...
authorAndrew Dolgov <noreply@fakecake.org>
Tue, 21 Aug 2018 04:01:26 +0000 (07:01 +0300)
committerAndrew Dolgov <noreply@fakecake.org>
Tue, 21 Aug 2018 04:01:26 +0000 (07:01 +0300)
classes/feeditem/atom.php [changed mode: 0644->0755]
classes/feeditem/common.php [changed mode: 0644->0755]
classes/feeditem/rss.php [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 8c3e0f8..2bae075
@@ -138,62 +138,7 @@ class FeedItem_Atom extends FeedItem_Common {
                        }
                }
 
-               $enclosures = $this->xpath->query("media:content", $this->elem);
-
-               foreach ($enclosures as $enclosure) {
-                       $enc = new FeedEnclosure();
-
-                       $enc->type = $enclosure->getAttribute("type");
-                       $enc->link = $enclosure->getAttribute("url");
-                       $enc->length = $enclosure->getAttribute("length");
-                       $enc->height = $enclosure->getAttribute("height");
-                       $enc->width = $enclosure->getAttribute("width");
-
-                       $desc = $this->xpath->query("media:description", $enclosure)->item(0);
-                       if ($desc) $enc->title = strip_tags($desc->nodeValue);
-
-                       array_push($encs, $enc);
-               }
-
-
-               $enclosures = $this->xpath->query("media:group", $this->elem);
-
-               foreach ($enclosures as $enclosure) {
-                       $enc = new FeedEnclosure();
-
-                       $content = $this->xpath->query("media:content", $enclosure)->item(0);
-
-                       if ($content) {
-                               $enc->type = $content->getAttribute("type");
-                               $enc->link = $content->getAttribute("url");
-                               $enc->length = $content->getAttribute("length");
-                               $enc->height = $content->getAttribute("height");
-                               $enc->width = $content->getAttribute("width");
-
-                               $desc = $this->xpath->query("media:description", $content)->item(0);
-                               if ($desc) {
-                                       $enc->title = strip_tags($desc->nodeValue);
-                               } else {
-                                       $desc = $this->xpath->query("media:description", $enclosure)->item(0);
-                                       if ($desc) $enc->title = strip_tags($desc->nodeValue);
-                               }
-
-                               array_push($encs, $enc);
-                       }
-               }
-
-               $enclosures = $this->xpath->query("media:thumbnail", $this->elem);
-
-               foreach ($enclosures as $enclosure) {
-                       $enc = new FeedEnclosure();
-
-                       $enc->type = "image/generic";
-                       $enc->link = $enclosure->getAttribute("url");
-                       $enc->height = $enclosure->getAttribute("height");
-                       $enc->width = $enclosure->getAttribute("width");
-
-                       array_push($encs, $enc);
-               }
+               $encs = array_merge($encs, parent::get_enclosures());
 
                return $encs;
        }
old mode 100644 (file)
new mode 100755 (executable)
index 10c4685..46822b7
@@ -74,6 +74,79 @@ abstract class FeedItem_Common extends FeedItem {
                }
        }
 
+       // this is common for both Atom and RSS types and deals with various media: elements
+       function get_enclosures() {
+               $encs = [];
+
+               $enclosures = $this->xpath->query("media:content", $this->elem);
+
+               foreach ($enclosures as $enclosure) {
+                       $enc = new FeedEnclosure();
+
+                       $enc->type = $enclosure->getAttribute("type");
+                       $enc->link = $enclosure->getAttribute("url");
+                       $enc->length = $enclosure->getAttribute("length");
+                       $enc->height = $enclosure->getAttribute("height");
+                       $enc->width = $enclosure->getAttribute("width");
+
+                       $medium = $enclosure->getAttribute("medium");
+                       if (!$enc->type && $medium) {
+                               $enc->type = strtolower("$medium/generic");
+                       }
+
+                       $desc = $this->xpath->query("media:description", $enclosure)->item(0);
+                       if ($desc) $enc->title = strip_tags($desc->nodeValue);
+
+                       array_push($encs, $enc);
+               }
+
+               $enclosures = $this->xpath->query("media:group", $this->elem);
+
+               foreach ($enclosures as $enclosure) {
+                       $enc = new FeedEnclosure();
+
+                       $content = $this->xpath->query("media:content", $enclosure)->item(0);
+
+                       if ($content) {
+                               $enc->type = $content->getAttribute("type");
+                               $enc->link = $content->getAttribute("url");
+                               $enc->length = $content->getAttribute("length");
+                               $enc->height = $content->getAttribute("height");
+                               $enc->width = $content->getAttribute("width");
+
+                               $medium = $content->getAttribute("medium");
+                               if (!$enc->type && $medium) {
+                                       $enc->type = strtolower("$medium/generic");
+                               }
+
+                               $desc = $this->xpath->query("media:description", $content)->item(0);
+                               if ($desc) {
+                                       $enc->title = strip_tags($desc->nodeValue);
+                               } else {
+                                       $desc = $this->xpath->query("media:description", $enclosure)->item(0);
+                                       if ($desc) $enc->title = strip_tags($desc->nodeValue);
+                               }
+
+                               array_push($encs, $enc);
+                       }
+               }
+
+               $enclosures = $this->xpath->query("media:thumbnail", $this->elem);
+
+               foreach ($enclosures as $enclosure) {
+                       $enc = new FeedEnclosure();
+
+                       $enc->type = "image/generic";
+                       $enc->link = $enclosure->getAttribute("url");
+                       $enc->height = $enclosure->getAttribute("height");
+                       $enc->width = $enclosure->getAttribute("width");
+
+                       array_push($encs, $enc);
+               }
+
+               return $encs;
+       }
+
        function count_children($node) {
                return $node->getElementsByTagName("*")->length;
        }
@@ -86,4 +159,4 @@ abstract class FeedItem_Common extends FeedItem {
                }
        }
 
-}
\ No newline at end of file
+}
old mode 100644 (file)
new mode 100755 (executable)
index dca125b..6bb2721
@@ -129,62 +129,7 @@ class FeedItem_RSS extends FeedItem_Common {
                        array_push($encs, $enc);
                }
 
-               $enclosures = $this->xpath->query("media:content", $this->elem);
-
-               foreach ($enclosures as $enclosure) {
-                       $enc = new FeedEnclosure();
-
-                       $enc->type = $enclosure->getAttribute("type");
-                       $enc->link = $enclosure->getAttribute("url");
-                       $enc->length = $enclosure->getAttribute("length");
-                       $enc->height = $enclosure->getAttribute("height");
-                       $enc->width = $enclosure->getAttribute("width");
-
-                       $desc = $this->xpath->query("media:description", $enclosure)->item(0);
-                       if ($desc) $enc->title = strip_tags($desc->nodeValue);
-
-                       array_push($encs, $enc);
-               }
-
-
-               $enclosures = $this->xpath->query("media:group", $this->elem);
-
-               foreach ($enclosures as $enclosure) {
-                       $enc = new FeedEnclosure();
-
-                       $content = $this->xpath->query("media:content", $enclosure)->item(0);
-
-                       if ($content) {
-                               $enc->type = $content->getAttribute("type");
-                               $enc->link = $content->getAttribute("url");
-                               $enc->length = $content->getAttribute("length");
-                               $enc->height = $content->getAttribute("height");
-                               $enc->width = $content->getAttribute("width");
-
-                               $desc = $this->xpath->query("media:description", $content)->item(0);
-                               if ($desc) {
-                                       $enc->title = strip_tags($desc->nodeValue);
-                               } else {
-                                       $desc = $this->xpath->query("media:description", $enclosure)->item(0);
-                                       if ($desc) $enc->title = strip_tags($desc->nodeValue);
-                               }
-
-                               array_push($encs, $enc);
-                       }
-               }
-
-               $enclosures = $this->xpath->query("media:thumbnail", $this->elem);
-
-               foreach ($enclosures as $enclosure) {
-                       $enc = new FeedEnclosure();
-
-                       $enc->type = "image/generic";
-                       $enc->link = $enclosure->getAttribute("url");
-                       $enc->height = $enclosure->getAttribute("height");
-                       $enc->width = $enclosure->getAttribute("width");
-
-                       array_push($encs, $enc);
-               }
+               $encs = array_merge($encs, parent::get_enclosures());
 
                return $encs;
        }