tweeper.php: add "image/png" to the supported types for <enclosure/>
[tweeper.git] / rss_converter_dilbert.com.xsl
index 7394b91..ce7075f 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Stylesheet to convert Dilbert daily strips to RSS.
 
 <!--
   Stylesheet to convert Dilbert daily strips to RSS.
 
-  Copyright (C) 2013  Antonio Ospite <ospite@studenti.unina.it>
+  Copyright (C) 2013-2014  Antonio Ospite <ao2@ao2.it>
 
   This file is part of tweeper.
 
 
   This file is part of tweeper.
 
 <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:php="http://php.net/xsl"
 <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:php="http://php.net/xsl"
-    xsl:extension-element-prefixes="php">
+    xsl:extension-element-prefixes="php"
+    exclude-result-prefixes="php">
 
     <xsl:output method="xml" indent="yes"/>
 
 
     <xsl:output method="xml" indent="yes"/>
 
-    <xsl:variable name="BaseURL" select="concat('http://', //meta[@property='og:site_name']/@content)"/>
+    <xsl:variable name="BaseURL" select="//meta[@property='og:url']/@content"/>
 
 
-    <xsl:template match="//a[@id='strip_zoom']">
-        <xsl:variable name="picture-id" select="substring-after(./@href, '#')"/>
-        <xsl:variable name="picture-element" select="//div[@id=$picture-id]/img"/>
-        <xsl:variable name="picture-print-url" select="php:functionString('str_replace', 'zoom', 'print', $picture-element/@src)"/>
+    <xsl:template match="//section[@class='comic-item']">
+        <xsl:variable name="item-permalink" select=".//a[@class='img-comic-link']/@href"/>
+        <xsl:variable name="picture-url" select=".//img[@class='img-responsive img-comic']/@src"/>
+        <xsl:variable name="picture-title" select=".//img[@class='img-responsive img-comic']/@alt"/>
         <item>
             <title>
         <item>
             <title>
-                <xsl:value-of select="$picture-element/@title"/>
+                <xsl:variable name="title-length" select="140"/>
+                <!-- ellipsize, inspired from http://stackoverflow.com/questions/13622338 -->
+                <xsl:choose>
+                    <xsl:when test="string-length($picture-title) > $title-length">
+                        <xsl:variable name="truncated-length" select="$title-length - 3"/>
+                        <xsl:value-of select="substring($picture-title, 1, $truncated-length)"/>
+                        <xsl:text>...</xsl:text>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:value-of select="$picture-title"/>
+                    </xsl:otherwise>
+                </xsl:choose>
             </title>
             <link>
             </title>
             <link>
-                <xsl:value-of select="concat($BaseURL, $picture-element/@src)"/>
+                <xsl:value-of select="$item-permalink"/>
             </link>
             </link>
+            <guid>
+                <xsl:value-of select="$item-permalink"/>
+            </guid>
             <pubDate>
             <pubDate>
-                <xsl:value-of select="php:functionString('Tweeper::str_to_gmdate', substring-after($picture-id, 'strip_enlarged_'))"/>
+                <xsl:value-of select="php:functionString('Tweeper::strToRssDate', normalize-space(.//date))"/>
             </pubDate>
             <description>
                 <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
             </pubDate>
             <description>
                 <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
-                <img src="{$picture-print-url}" />
+                <img src="{$picture-url}" alt="{$picture-title}"/>
                 <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
             </description>
         </item>
     </xsl:template>
 
     <xsl:template match="/">
                 <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
             </description>
         </item>
     </xsl:template>
 
     <xsl:template match="/">
+        <xsl:variable name="channel-title" select="//meta[@property='og:title']/@content"/>
+        <xsl:variable name="channel-link" select="$BaseURL"/>
 
         <rss version="2.0">
 
         <rss version="2.0">
+            <xsl:attribute name="xml:base"><xsl:value-of select="$BaseURL" /></xsl:attribute>
             <channel>
                 <generator>Tweeper</generator>
                 <title>
             <channel>
                 <generator>Tweeper</generator>
                 <title>
-                    <xsl:value-of select="//meta[@property='og:title']/@content"/>
+                    <xsl:value-of select="$channel-title"/>
                 </title>
                 <link>
                 </title>
                 <link>
-                    <xsl:value-of select="$BaseURL"/>
+                    <xsl:value-of select="$channel-link"/>
                 </link>
                 <description>
                     <xsl:value-of select="//meta[@property='og:description']/@content"/>
                 </description>
                 <image>
                 </link>
                 <description>
                     <xsl:value-of select="//meta[@property='og:description']/@content"/>
                 </description>
                 <image>
+                    <title>
+                        <xsl:value-of select="$channel-title"/>
+                    </title>
+                    <link>
+                        <xsl:value-of select="$channel-link"/>
+                    </link>
                     <url>
                     <url>
-                        <xsl:value-of select="//meta[@property='og:image']/@content"/>
+                        <xsl:value-of select="concat($BaseURL, //img[@alt='Dilbert logo']/@src)"/>
                     </url>
                 </image>
                     </url>
                 </image>
-                <xsl:apply-templates select="//a[@id='strip_zoom']"/>
+                <xsl:apply-templates select="//section[@class='comic-item']"/>
             </channel>
         </rss>
     </xsl:template>
             </channel>
         </rss>
     </xsl:template>