Уроки Phptoshop, Linux, Windows 7
20 Май 2012, 15:01:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости:
 
  Начало   Форум   Помощь Поиск Календарь Пользователи Downloads Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Погода gismeteo по sms с использованием bash и Linux  (Прочитано 762 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Svictor
Администратор
Активист
*****

Карма: + 5/ -0
Мужской
Сообщений: 127
Активность на форуме
0%

svictor_ru WWW Награды
« : 24 Декабрь 2009, 16:27:33 »


Собственно для работы скрипта обязательно нужна программа 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 (бесплатно).
Записан

Уроки Phptoshop, Linux, Windows 7
   

 Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  



* Счетчики
Наша Кнопка

Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines | Sitemap
SimplePortal 2.3 © 2008-2009, SimplePortal