DotNetNuke Twitter XSL Transformation

I have become a big fan of Twitter. It helps bridge the gap between blog posts and IM. It's also a great way to keep people informed quickly and easily.

Of course, the very first thing I wanted to do was display the tweets on the various DotNetNuke sites I own and operate.

The XSLT transform that comes with DotNetNuke was pretty ugly when displaying the Twitter RSS feed, so I hacked up some modifications using Visual Studio 2008. It provides a great IDE to debug XSLTs. The only spot of this XSLT that will need tweaking for you is the TimeZone Offset (tzOffset) variable. I wanted it to display my tweets time based on my time zone CST.

Feel free to modify this to your hearts content. Let me know if you come up with any cool changes! Have fun! (You can also download it via: http://www.davidlwalker.com/Portals/1/twitter.xsl)

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform>
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="rss/channel">
    <xsl:for-each select="item[position() &lt; 11]">
      <div class="twitterEntry">
        <p>
          <a href="{link}">
            <xsl:call-template name="getDate">
              <xsl:with-param name="dateTime" select="pubDate" />
              <xsl:with-param name="tzOffset" select="-6" />
            </xsl:call-template>
          </a>
          –   <xsl:value-of select="substring-after(title,': ')" />
        </p>
      </div>
    </xsl:for-each>
  </xsl:template>

  <xsl:template name="getDate">
    <xsl:param name="dateTime" />
    <xsl:param name="tzOffset" />
    <xsl:value-of select="substring($dateTime,9,4)" />
    <xsl:value-of select="substring($dateTime,6,2)" />
    <xsl:text>,</xsl:text>
    <xsl:value-of select="substring($dateTime,12,6)" />
    <xsl:variable name="orighour">
      <xsl:choose>
        <xsl:when test="(number(substring($dateTime,18,2))+number($tzOffset)) &lt; 0">
          <xsl:value-of select="(12+(number(substring($dateTime,18,2))+number($tzOffset)))+12" />
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="number(substring($dateTime,18,2))+number($tzOffset)" />
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name="hour">
      <xsl:choose>
        <xsl:when test="$orighour &gt; 12">
          <xsl:value-of select="number($orighour)-12" />
        </xsl:when>
        <xsl:when test="$orighour = 0">
          <xsl:value-of select="'12'" />
        </xsl:when>
        <xsl:when test="$orighour = 12">
          <xsl:value-of select="'12'" />
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="number($orighour)-12" />
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name="ampm" >
      <xsl:choose>
        <xsl:when test="$orighour &gt; 11">
          <xsl:value-of select="' PM'" />
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="' AM'" />
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:value-of select="$hour" />
    <xsl:value-of select="substring($dateTime,20,3)" />
    <xsl:value-of select="$ampm" />
  </xsl:template>

</xsl:stylesheet>

Technorati Tags: DotNetNuke,Twitter,XSL,XSLT,RSS

Leave a Reply

Your email address will not be published. Required fields are marked *