Собственно для работы скрипта обязательно нужна программа
xmlstarlet. Отправка письма же идет через
mutt, но ее можно легко можно заменить на, к примеру,
mail.Вот сам код:
1. #!/bin/bash
2.
3. # забираем погоду из обработанного xmlstarlet-ом mxl-информера
4. wheather ()
5. {
6. cloud=`echo $wh | awk '{print $3}'`
7. prec=`echo $wh | awk '{print $5}'`
8. tmin=`echo $wh | awk '{print $7}'`
9. tmax=`echo $wh | awk '{print $9}'`
10. }
11.
12. # облачность и осадки
13. f_clpr ()
14. {
15. if [[ "$cloud" == "0" ]]; then
16. cl="jasno"
17. elif [[ "$cloud" == "1" ]]; then
18. cl="per.obl."
19. elif [[ "$cloud" == "2" ]]; then
20. cl="oblachno"
21. elif [[ "$cloud" == "3" ]]; then
22. cl="pasmurno"
23. fi
24.
25. if [[ "$prec" == "10" ]]; then
26. pr="bez osadkov"
27. elif [[ "$prec" == "9" ]]; then
28. pr="n\d"
29. elif [[ "$prec" == "8" ]]; then
30. pr="groza"
31. elif [[ "$prec" == "6" || "$prec" == "7" ]]; then
32. pr="sneg"
33. elif [[ "$prec" == "5" ]]; then
34. pr="liven"
35. elif [[ "$prec" == "4" ]]; then
36. pr="dozhd"
37. fi
38. }
39.
40. # средняя температура
41. f_temp ()
42. {
43. tc=$(($tmax/2+$tmin/2))
44. echo "$tc"
45. }
46.
47. # создаем файл стиля для xml
48. (
49. cat <<'EOF'
50. <?xml version="1.0"?>
51. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
52. <xsl:template match="/">
53. <xsl:for-each select="MMWEATHER/REPORT/TOWN/FORECAST">
54. <xsl:value-of select="@hour" /> h
55. <xsl:for-each select="PHENOMENA">
56. <xsl:value-of select="@cloudiness" /> c
57. <xsl:value-of select="@precipitation" /> p
58. </xsl:for-each>
59. <xsl:for-each select="TEMPERATURE">
60. <xsl:value-of select="@min" /> tn
61. <xsl:value-of select="@max" /> tx
62. </xsl:for-each>
63. </xsl:for-each>
64. </xsl:template>
65. </xsl:stylesheet>
66. EOF
67. ) > /tmp/informer.xsl
68.
69. # скачиваем xml-информер. для нужного города задаем именно здесь
70. wget -q -O /tmp/informer.xml http://informer.gismeteo.ru/xml/33526_1.xml
71.
72. # вытягиваем нужные данные из информера, путем наложения xmlstarlet-ом стиля на информер
73. /usr/bin/xmlstarlet tr /tmp/informer.xsl /tmp/informer.xml > /tmp/informer.tmp
74.
75. # формируем sms по часам. среднюю($tc) температуру можно заменить на минимальную($tmin)-максимальную($tmax)
76. wh=`cat /tmp/informer.tmp | grep -A 4 "02 h"`
77. wheather
78. f_clpr
79. f_temp
80. w02=`echo "$cl" "$pr" t:"$tc"`
81.
82. wh=`cat /tmp/informer.tmp | grep -A 4 "08 h"`
83. wheather
84. f_clpr
85. f_temp
86. w08=`echo "$cl" "$pr" t:"$tc"`
87.
88. wh=`cat /tmp/informer.tmp | grep -A 4 "14 h"`
89. wheather
90. f_clpr
91. f_temp
92. w14=`echo "$cl" "$pr" t:"$tc"`
93.
94. wh=`cat /tmp/informer.tmp | grep -A 4 "20 h"`
95. wheather
96. f_clpr
97. f_temp
98. w20=`echo "$cl" "$pr" t:"$tc"`
99.
100. # отправляем сообщение. тут писать свой номер и sms-gate
101. echo "noch':$w02; utro:$w08; den':$w14; vecher:$w20" | mutt -s "" xxxxxxxxxx@sms.kyivstar.net
102.
103. # удаляем временные файлы
104. rm -f /tmp/informer.xml /tmp/informer.tmp /tmp/informer.xsl
105.
106. exit 0
В настройках крона нужно задать исполнение скрипта на 20:30 или позднее, т.к. до этого времени отдается погода не на следующий день, а на сегодня+завтра.
На этом все. Надеюсь, что кому-то пригодится (:.
P.S. Некоторые операторы блокируют услугу
email2sms изначально. Например, чтоб активировать ее абонентам
Djuice или
Киевстар нужно отправить пустое сообщение на номер
7021 (бесплатно).