EVOLUTION-MANAGER
Edit File: awstats.datademo2.xslt
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsl:output method="text"/> <!-- This xsl parses a awstats xml "history file" and generates a small plaintext report, nicely suited for cron and mail. some decisions have been made regarding what to display - pages or hits, etc. You are free to tweak. Commissioned by LabforCulture *pike@labforculture.org 20060708 usage: mail -s stats yourboss@yoursite < xsltproc thisfile.xsl database.xml build for AWSTATS DATA FILE 6.5 (build 1.857) --> <xsl:template match="/"> <xsl:for-each select="/xml/section[@id='general']/table/tr"> <xsl:text>
----------------</xsl:text> <xsl:for-each select="td[text()='FirstTime']"> <xsl:text>
Period </xsl:text> <xsl:for-each select="./following-sibling::node()"> <xsl:value-of select="concat(': ',substring(.,1,4),'/',substring(.,5,2),'/',substring(.,7,2))" /> </xsl:for-each> <xsl:for-each select="../../tr/td[text()='LastTime']/following-sibling::node()"> <xsl:value-of select="concat(' - ',substring(.,1,4),'/',substring(.,5,2),'/',substring(.,7,2))" /> </xsl:for-each> </xsl:for-each> <xsl:for-each select="td[text()='TotalUnique']/following-sibling::node()"> <xsl:text>
Total unique visitors : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> <xsl:for-each select="td[text()='TotalVisits']/following-sibling::node()"> <xsl:text>
Total visits : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> </xsl:for-each> <xsl:for-each select="/xml/section[@id='time']/table"> <xsl:text>
Total viewed pages : </xsl:text><xsl:value-of select="sum(tr/td[2])" /> <xsl:text>
Total viewed hits : </xsl:text><xsl:value-of select="sum(tr/td[3])" /> <xsl:text>
Total not viewed pages : </xsl:text><xsl:value-of select="sum(tr/td[5])" /> <xsl:text>
Total not viewed hits : </xsl:text><xsl:value-of select="sum(tr/td[6])" /> </xsl:for-each> <xsl:for-each select="/xml/section[@id='misc']/table"> <xsl:for-each select="tr/td[text()='AddToFavourites']/following-sibling::node()[2]"> <xsl:text>
Added to favourites (?) : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> </xsl:for-each> <xsl:text>
----------------</xsl:text> <xsl:for-each select="/xml/section[@id='session']/table"> <xsl:text>
Visit duration:</xsl:text> <xsl:for-each select="tr/td[text()='0s-30s']/following-sibling::node()"> <xsl:text>
 0s-30s : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> <xsl:for-each select="tr/td[text()='30s-2mn']/following-sibling::node()"> <xsl:text>
 30s-2mn : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> <xsl:for-each select="tr/td[text()='2mn-5mn']/following-sibling::node()"> <xsl:text>
 2mn-5mn : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> <xsl:for-each select="tr/td[text()='5mn-15mn']/following-sibling::node()"> <xsl:text>
 5mn-15mn : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> <xsl:for-each select="tr/td[text()='15mn-30mn']/following-sibling::node()"> <xsl:text>
 15mn-30mn : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> <xsl:for-each select="tr/td[text()='30mn-1h']/following-sibling::node()"> <xsl:text>
 30mn-1h : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> <xsl:for-each select="tr/td[text()='1h+']/following-sibling::node()"> <xsl:text>
 1h+ : </xsl:text> <xsl:value-of select="." /> </xsl:for-each> </xsl:for-each> <xsl:text>
----------------</xsl:text> <xsl:for-each select="/xml/section[@id='domain']/table"> <xsl:text>
Countries top 5:</xsl:text> <xsl:for-each select="tr"> <xsl:sort select="td[2]" data-type="number" order="descending"/> <xsl:if test="position()<=5"> <xsl:text>
 </xsl:text> <xsl:value-of select="td[1]" /> <xsl:text> : </xsl:text> <xsl:value-of select="td[2]" /> <xsl:text> pages</xsl:text> </xsl:if> </xsl:for-each> </xsl:for-each> <xsl:text>
----------------</xsl:text> <!-- awstats xml output is seriously bugged here in my version. the first 10 rows of sider has 5 columns, the rest has 4 columns .. the second columns content is added as plaintext inside the first column ! i will wait for a fix. meanwhile, the numbers outputted here are dead wrong. <xsl:for-each select="/xml/section[@id='sider']/table"> <xsl:text>
Entry pages top 10 (bugged):</xsl:text> <xsl:for-each select="tr"> <xsl:sort select="td[4]" data-type="number" order="descending"/> <xsl:if test="position()<=10"> <xsl:text>
 </xsl:text> <xsl:value-of select="td[4]" /> <xsl:text> : </xsl:text> <xsl:value-of select="td[1]" /> </xsl:if> </xsl:for-each> <xsl:text>
Exit pages top 10 (bugged):</xsl:text> <xsl:for-each select="tr[position()<=10]"> <xsl:sort select="td[5]" data-type="number" order="descending"/> <xsl:if test="position()<=10"> <xsl:text>
 </xsl:text> <xsl:value-of select="td[5]" /> <xsl:text> : </xsl:text> <xsl:value-of select="td[1]" /> </xsl:if> </xsl:for-each> </xsl:for-each> --> <xsl:for-each select="/xml/section[@id='origin']/table"> <xsl:text>
Users arrived via:</xsl:text> <xsl:for-each select="tr"> <xsl:sort select="td[2]" data-type="number" order="descending"/> <xsl:if test="td[1]='From0'"> <xsl:text>
 Typed in / from bookmarks : </xsl:text> <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> </xsl:if> <xsl:if test="td[1]='From1'"> <xsl:text>
 Unknown : </xsl:text> <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> </xsl:if> <xsl:if test="td[1]='From2'"> <xsl:text>
 Linked from an Internet Search Engine : </xsl:text> <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> </xsl:if> <xsl:if test="td[1]='From3'"> <xsl:text>
 Linked from an external page : </xsl:text> <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> </xsl:if> <xsl:if test="td[1]='From4'"> <xsl:text>
 Linked from an internal page : </xsl:text> <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> </xsl:if> <xsl:if test="td[1]='From5'"> <xsl:text>
 Linked from newsgroups : </xsl:text> <xsl:value-of select="td[2]" /><xsl:text> pages</xsl:text> </xsl:if> </xsl:for-each> </xsl:for-each> <xsl:text>
----------------</xsl:text> <xsl:for-each select="/xml/section[@id='searchwords']/table"> <xsl:text>
Top search phrases:</xsl:text> <xsl:for-each select="tr[position()<=10]"> <xsl:text>
 </xsl:text> <xsl:value-of select="td[1]" /> <xsl:text> - </xsl:text> <xsl:value-of select="td[2]" /> <xsl:text> hits</xsl:text> </xsl:for-each> </xsl:for-each> <xsl:text>
----------------</xsl:text> <xsl:for-each select="/xml/section[@id='sereferrals']/table"> <xsl:text>
Robots/spiders:</xsl:text> <xsl:for-each select="tr"> <xsl:sort select="td[3]" data-type="number" order="descending"/> <xsl:if test="position()<=10"> <xsl:text>
 </xsl:text> <xsl:value-of select="td[1]" /> <xsl:text> - </xsl:text> <xsl:value-of select="td[3]" /> <xsl:text> hits</xsl:text> </xsl:if> </xsl:for-each> </xsl:for-each> <xsl:text>
----------------
</xsl:text> </xsl:template> </xsl:stylesheet>