Add option to enable or disable showing multimedia content in RSS items
authorAntonio Ospite <ao2@ao2.it>
Fri, 16 Nov 2018 10:50:12 +0000 (11:50 +0100)
committerAntonio Ospite <ao2@ao2.it>
Fri, 16 Nov 2018 10:50:12 +0000 (11:50 +0100)
Tweeper by default shows multimedia contents like Twitter and Instagram
images in items descriptions.

However sometimes just having multimedia contents in the <enclosure/>
element may be enough, so make it optional to also have the content in
the item description.

Keep the current default behavior for backwards compatibility.

src/Tweeper.php
src/rss_converter_dilbert.com.xsl
src/rss_converter_instagram.com.xsl
src/rss_converter_twitter.com.xsl
tweeper.1.asciidoc
tweeper.php

index b75409b..8fda9b1 100644 (file)
@@ -49,10 +49,15 @@ class Tweeper {
    *   Enables showing the username in front of the content for multi-user
    *   sites (enabled by default). Only some stylesheets supports this
    *   functionality (twitter, instagram, pump.io).
+   * @param bool $show_multimedia
+   *   Enables showing multimedia content (images, videos) directly in the
+   *   item description (enabled by default). Only some stylesheets supports
+   *   this functionality (twitter, instagram, dilbert).
    */
-  public function __construct($generate_enclosure = FALSE, $show_usernames = TRUE) {
+  public function __construct($generate_enclosure = FALSE, $show_usernames = TRUE, $show_multimedia = TRUE) {
     $this->generate_enclosure = $generate_enclosure;
     $this->show_usernames = $show_usernames;
+    $this->show_multimedia = $show_multimedia;
   }
 
   /**
@@ -362,6 +367,7 @@ class Tweeper {
     $xsltProcessor->registerPHPFunctions();
     $xsltProcessor->setParameter('', 'generate-enclosure', $this->generate_enclosure);
     $xsltProcessor->setParameter('', 'show-usernames', $this->show_usernames);
+    $xsltProcessor->setParameter('', 'show-multimedia', $this->show_multimedia);
     $xsltProcessor->importStylesheet($xslDoc);
 
     return $xsltProcessor;
index 99d2b27..fd30d35 100644 (file)
@@ -37,6 +37,7 @@
     exclude-result-prefixes="php">
 
     <xsl:param name="generate-enclosure"/>
+    <xsl:param name="show-multimedia"/>
 
     <xsl:output method="xml" indent="yes"/>
 
@@ -72,7 +73,9 @@
             </pubDate>
             <description>
                 <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
-                <img src="{$picture-url}" alt="{$picture-title}"/>
+                <xsl:if test="$show-multimedia = 1">
+                    <img src="{$picture-url}" alt="{$picture-title}"/>
+                </xsl:if>
                 <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
             </description>
             <xsl:if test="$generate-enclosure = 1">
index 01bd3d1..855ce0b 100644 (file)
@@ -25,6 +25,7 @@
 
     <xsl:param name="generate-enclosure"/>
     <xsl:param name="show-usernames"/>
+    <xsl:param name="show-multimedia"/>
 
     <xsl:output method="xml" indent="yes"/>
 
                     </xsl:if>
                     <xsl:value-of select="$item-content-caption"/>
                 </p><br />
-                <a href="{$item-permalink}"><img src="{$item-content-image}" style="max-width: 100%"/></a>
+                <xsl:if test="$show-multimedia = 1">
+                    <a href="{$item-permalink}"><img src="{$item-content-image}" style="max-width: 100%"/></a>
+                </xsl:if>
                 <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
             </description>
             <xsl:if test="$generate-enclosure = 1">
index b59a97b..1c20e70 100644 (file)
@@ -25,6 +25,7 @@
 
     <xsl:param name="generate-enclosure"/>
     <xsl:param name="show-usernames"/>
+    <xsl:param name="show-multimedia"/>
 
     <xsl:output method="xml" indent="yes"/>
 
          too instead of the t.co redirections.
     -->
     <xsl:template match="a[@data-pre-embedded='true']">
-        <!-- Prepend and append a white space for aestethic reasons -->
-        <xsl:text> </xsl:text>
-        <a>
-            <xsl:attribute name="href">
+        <xsl:if test="$show-multimedia = 1">
+            <!-- Prepend and append a white space for aestethic reasons -->
+            <xsl:text> </xsl:text>
+            <a>
+                <xsl:attribute name="href">
+                    <xsl:value-of select="concat('https://', .)"/>
+                </xsl:attribute>
                 <xsl:value-of select="concat('https://', .)"/>
-            </xsl:attribute>
-            <xsl:value-of select="concat('https://', .)"/>
-        </a>
-        <xsl:text> </xsl:text>
+            </a>
+            <xsl:text> </xsl:text>
+        </xsl:if>
     </xsl:template>
 
     <!-- Present images in a more convenient way -->
                     <xsl:attribute name="style">white-space: pre-wrap;</xsl:attribute>
                     <xsl:apply-templates select="$item-content/node()"/>
                 </xsl:element>
-                <xsl:apply-templates select="$item-media/node()"/>
+                <xsl:if test="$show-multimedia = 1">
+                    <xsl:apply-templates select="$item-media/node()"/>
+                </xsl:if>
                 <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
             </description>
             <xsl:if test="$generate-enclosure = 1">
index 8519d3a..37e885a 100644 (file)
@@ -45,6 +45,10 @@ OPTIONS
 *-e*::
     show links to supported media files in the RSS <enclosure/> element
 
+*-m <0|1>*::
+    enable or disable showing multimedia content (e.g. Twitter or Instagram
+    pictures) directly inside the item description. Default is 1 (enable).
+
 *-u <0|1>*::
     enable or disable showing usernames in front of the item for hosts which
     supports it (Twitter.com/Instagram.com). Default is 1 (enable).
index 84712f6..2d5017e 100644 (file)
@@ -38,10 +38,10 @@ function is_cli() {
  */
 function usage($argv) {
   if (is_cli()) {
-    $usage = "{$argv[0]} [-e|-u <0|1>|-h|--help] <src_url>\n";
+    $usage = "{$argv[0]} [-e|-m <0|1>|-u <0|1>|-h|--help] <src_url>\n";
   }
   else {
-    $usage = htmlentities("{$_SERVER['SCRIPT_NAME']}?src_url=<src_url>&generate_enclosure=<0|1>&show_usernames=<0|1>");
+    $usage = htmlentities("{$_SERVER['SCRIPT_NAME']}?src_url=<src_url>&generate_enclosure=<0|1>&show_usernames=<0|1>&show_multimedia=<0|1>");
   }
 
   return "usage: $usage";
@@ -54,19 +54,30 @@ function parse_options_cli($argv, $argc) {
   $options = array(
     'generate_enclosure' => FALSE,
     'show_usernames' => TRUE,
+    'show_multimedia' => TRUE,
   );
 
   if ($argc < 2) {
     return $options;
   }
 
-  $cli_options = getopt("eu:h", array("help"));
+  $cli_options = getopt("em:u:h", array("help"));
   foreach ($cli_options as $opt => $val) {
     switch ($opt) {
       case 'e':
         $options['generate_enclosure'] = TRUE;
         break;
 
+      case 'm':
+        $ret = filter_var($val, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
+        if (NULL === $ret) {
+          fwrite(STDERR, "Invalid argument for the -m option.\n");
+          fwrite(STDERR, usage($argv));
+          exit(1);
+        }
+        $options['show_multimedia'] = $val;
+        break;
+
       case 'u':
         $ret = filter_var($val, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
         if (NULL === $ret) {
@@ -102,6 +113,7 @@ function parse_options_query_string() {
   $options = array(
     'generate_enclosure' => FALSE,
     'show_usernames' => TRUE,
+    'show_multimedia' => TRUE,
   );
 
   if (isset($_GET['src_url'])) {
@@ -112,6 +124,10 @@ function parse_options_query_string() {
     $options['generate_enclosure'] = $_GET['generate_enclosure'] == 1;
   }
 
+  if (isset($_GET['show_multimedia'])) {
+    $options['show_multimedia'] = $_GET['show_multimedia'] != 0;
+  }
+
   if (isset($_GET['show_usernames'])) {
     $options['show_usernames'] = $_GET['show_usernames'] != 0;
   }
@@ -133,7 +149,7 @@ if (!isset($options['src_url'])) {
   exit(1);
 }
 
-$tweeper = new Tweeper($options['generate_enclosure'], $options['show_usernames']);
+$tweeper = new Tweeper($options['generate_enclosure'], $options['show_usernames'], $options['show_multimedia']);
 $output = $tweeper->tweep($options['src_url']);
 if (is_null($output)) {
   exit(1);