В сценарии были прописаны команды и файлы которые следует использовать для получения погоды. Я немного модифицировал его. Выглядит он следующим образом:
#!/bin/sh
RUNDIR=/home/borilav/bin/
CURLCMD=/usr/bin/curl
XSLTCMD=/usr/bin/xsltproc
CURLURL="http://informer.gismeteo.ru/xml/27612_1.xml"
XSLT=/home/borislav/bin/gis1.xsl
#####
eval "$CURLCMD \"$CURLURL\" 2>/dev/null | $XSLTCMD $XSLT"
В качестве шаблона для xml с гисметео используется gis.xsl. Признаюсь над ним пришлось потрудиться. В статье я нашел способ обработки (это оказывается называется "парсинг") xml от гисметео. Там описали способ представления для html-документа. Я адаптировал его для текстового формата. Выглядит вот так.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns=">http://www.w3.org/1999/xhtml">
<xsl:output method="text" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<!--Шаблон, преобразующий порядковый номер месяца в его текстовое представление-->
<xsl:template name="hour-abbreviation">
<xsl:param name="hour"/>
<xsl:choose>
<xsl:when test="$hour = 03">ночь</xsl:when>
<xsl:when test="$hour = 09">утро</xsl:when>
<xsl:when test="$hour = 15">день</xsl:when>
<xsl:when test="$hour = 21">вечер</xsl:when>
<xsl:otherwise>?</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--Шаблон, показывающий текстовое представление облачности-->
<xsl:template name="get-cloudiness">
<xsl:param name="cloudiness"/>
<xsl:choose>
<xsl:when test="$cloudiness = 0">ясно</xsl:when>
<xsl:when test="$cloudiness = 1">малооблачно</xsl:when>
<xsl:when test="$cloudiness = 2">облачно</xsl:when>
<xsl:when test="$cloudiness = 3">пасмурно</xsl:when>
<xsl:otherwise>?</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--Шаблон, показывающий текстовое представление атмосферных явлений-->
<xsl:template name="get-precipitation">
<xsl:param name="precipitation"/>
<xsl:choose>
<xsl:when test="$precipitation = 4">дождь</xsl:when>
<xsl:when test="$precipitation = 5">ливень</xsl:when>
<xsl:when test="$precipitation = 6">снег</xsl:when>
<xsl:when test="$precipitation = 7">снег</xsl:when>
<xsl:when test="$precipitation = 8">гроза</xsl:when>
<xsl:when test="$precipitation = 10">без осадков</xsl:when>
<xsl:otherwise>?</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--Шаблон, отображающий атмосферные явления-->
<xsl:template match="PHENOMENA">
<xsl:call-template name="get-cloudiness"> <xsl:with-param name="cloudiness" select="@cloudiness" /></xsl:call-template>, <xsl:call-template name="get-precipitation"><xsl:with-param name="precipitation" select="@precipitation" /> </xsl:call-template>
</xsl:template>
<!--Шаблон, отображающий температуру-->
<xsl:template match="TEMPERATURE">
<xsl:value-of select="@min"/>..<xsl:value-of select="@max"/> °C
</xsl:template>
<xsl:template match="RELWET">
<xsl:value-of select="@min"/>..<xsl:value-of select="@max"/> %
</xsl:template>
<xsl:template match="PRESSURE">
<xsl:value-of select="@min"/>..<xsl:value-of select="@max"/> мм рт.ст.
</xsl:template>
<!--Корневой шаблн результирующей страницы-->
<xsl:template match="/">
<!--Здесь мы выбираем только самый первый(ближайший) прогноз под номером 1 -->
<xsl:apply-templates select="MMWEATHER/*/TOWN/FORECAST[1]"/>
<xsl:apply-templates select="MMWEATHER/*/TOWN/FORECAST[2]"/>
<xsl:apply-templates select="MMWEATHER/*/TOWN/FORECAST[3]"/>
<xsl:apply-templates select="MMWEATHER/*/TOWN/FORECAST[4]"/>
</xsl:template>
<!--Базовый шаблон, отображающий информер-->
<xsl:template match="MMWEATHER/*/TOWN/FORECAST">
<xsl:apply-templates select="TEMPERATURE"/>
<xsl:apply-templates select="RELWET"/>
<xsl:apply-templates select="PRESSURE"/>
<xsl:apply-templates select="PHENOMENA"/>
</xsl:template>
</xsl:stylesheet>
Далее в файл настроек Conky вставляется строка.
${execpi 60 /home/borislav/bin/gis.sh}
Но не все гладко и точно работает, потому что я не знаю почему и как нужно исправить во всем этом коде для нормального отбражения.
Получилось сделать, чтобы не было кривизны это разбить эту массу цифр и букофф на четыре файла, каждый обращается в гисметео и получает погоду. Потом обращается к своему шаблону xsl и выводит погоду для своего прописанного времени суток (благо у гисметео погода приведена на 3 часа ночи, 9 - утра, 15 - дня и 21 - вечера). В conky-мониторе кривизна вывода компенсируется приставками и надстройками.
$alignc GISMETEO.RU
${color #7E0000} Ночь${color}
${execpi 60 /home/borislav/bin/gis.sh}
${color #7E0000} Утро${color}
${execpi 60 /home/borislav/bin/gis2.sh}
${color #7E0000} День${color}
${execpi 60 /home/borislav/bin/gis3.sh}
${color #7E0000} Вечер${color}
${execpi 60 /home/borislav/bin/gis4.sh}
Вот такая вот погода.
Комментариев нет:
Отправить комментарий