Видео ролики бесплатно онлайн

Смотреть девушки видео

Официальный сайт e-rus 24/7/365

Смотреть видео бесплатно

01.12.09 00:09 nehaffian

Скрипты на bashПогода gismeteo по sms

Когда-то на Хабре выкладывали скрипт, который парсил rss нужного города в gismeteo и отсылал на телефон пользуясь email2sms. У него было два недостатка: он был написан под FreeBSD (хотя и довольно просто портировался под Linux) и, что самое главное, он не показывал осадков (о_О). Поэтому я решил модифицировать скрипт, чтоб он брал информацию из xml для информеров, конвертировал в удобную форму и отсылал по смс. Потом передумал и просто написал с нуля.

Надо сказать, что это мой третий-пятый скрипт на bash вообще, впервые пользовался awk и никогда до этого не работал с xml. Поэтому мне пришлось все это учить до необходимого уровня, что и было проделано за несколько часов гугления. Говорю я все это для того, чтоб вы не высмеивали код за очевидные (не для меня) ляпы, а подсказали, что и как можно исправить\оптимизировать. За это я был бы очень благодарен (:
Собственно для работы скрипта обязательно нужна программа xmlstarlet. Отправка письма же идет через mutt, но ее можно легко можно заменить на, к примеру, mail.
Вот сам код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

#!/bin/bash

# забираем погоду из обработанного xmlstarlet-ом mxl-информера
wheather ()
{
cloud=`echo $wh | awk '{print $3}'`
prec=`echo $wh | awk '{print $5}'`
tmin=`echo $wh | awk '{print $7}'`
tmax=`echo $wh | awk '{print $9}'`
}
# облачность и осадки
f_clpr ()
{
if [[ "$cloud" == "0" ]]; then
    cl="jasno"
    elif [[ "$cloud" == "1" ]]; then
        cl="per.obl."
        elif [[ "$cloud" == "2" ]]; then
            cl="oblachno"
            elif [[ "$cloud" == "3" ]]; then
                cl="pasmurno"
fi
if [[ "$prec" == "10" ]]; then
    pr="bez osadkov"
    elif [[ "$prec" == "9" ]]; then
        pr="n\d"
        elif [[ "$prec" == "8" ]]; then
            pr="groza"
            elif [[ "$prec" == "6" || "$prec" == "7" ]]; then
                pr="sneg"
                elif [[ "$prec" == "5" ]]; then
                    pr="liven"
                    elif [[ "$prec" == "4" ]]; then
                        pr="dozhd"
fi
}
# средняя температура
f_temp ()
{
tc=$(($tmax/2+$tmin/2))
echo "$tc"
}

# создаем файл стиля для xml
(
cat <<'EOF'
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="MMWEATHER/REPORT/TOWN/FORECAST">
<xsl:value-of select="@hour" /> h
<xsl:for-each select="PHENOMENA">
<xsl:value-of select="@cloudiness" /> c
<xsl:value-of select="@precipitation" /> p
</xsl:for-each>
<xsl:for-each select="TEMPERATURE">
<xsl:value-of select="@min" /> tn
<xsl:value-of select="@max" /> tx
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
EOF

) > /tmp/informer.xsl

# скачиваем xml-информер. для нужного города задаем именно здесь
wget -q -O /tmp/informer.xml http://informer.gismeteo.ru/xml/33526_1.xml

# вытягиваем нужные данные из информера, путем наложения xmlstarlet-ом стиля на информер
/usr/bin/xmlstarlet tr /tmp/informer.xsl /tmp/informer.xml > /tmp/informer.tmp

# формируем sms по часам. среднюю($tc) температуру можно заменить на минимальную($tmin)-максимальную($tmax)
wh=`cat /tmp/informer.tmp | grep -A 4 "02 h"`
wheather
f_clpr
f_temp
w02=`echo "$cl" "$pr" t:"$tc"`

wh=`cat /tmp/informer.tmp | grep -A 4 "08 h"`
wheather
f_clpr
f_temp
w08=`echo "$cl" "$pr" t:"$tc"`

wh=`cat /tmp/informer.tmp | grep -A 4 "14 h"`
wheather
f_clpr
f_temp
w14=`echo "$cl" "$pr" t:"$tc"`

wh=`cat /tmp/informer.tmp | grep -A 4 "20 h"`
wheather
f_clpr
f_temp
w20=`echo "$cl" "$pr" t:"$tc"`

# отправляем сообщение. тут писать свой номер и sms-gate
echo "noch':$w02; utro:$w08; den':$w14; vecher:$w20" | mutt -s "" xxxxxxxxxx@sms.kyivstar.net

# удаляем временные файлы
rm -f /tmp/informer.xml /tmp/informer.tmp /tmp/informer.xsl

exit 0

В настройках крона нужно задать исполнение скрипта на 20:30 или позднее, т.к. до этого времени отдается погода не на следующий день, а на сегодня+завтра.
На этом все. Надеюсь, что кому-то пригодится (: .

UPD. Некоторые операторы блокируют услугу email2sms изначально. Например, чтоб активировать ее абонентам Djuice или Киевстар нужно отправить пустое сообщение на номер 7021 (бесплатно).



renya 01.12.09 08:25 # +0
Клёво!
Slip 01.12.09 08:43 # +0
Спасибо!

Маленькое уточнение:

ЕМНИП, то этот шаблон для контрактных абонентов.
Для prepaid нужно будет писать xxxxxxxxxx@2sms.kyivstar.net
nehaffian 01.12.09 10:06 # +0
Надо сказать, что у меня работает как первый, так и второй гейт (сам я на djuice). Да и написано это только для примера.
bosha 01.12.09 12:42 # +0
Полезная штука. Быстро приспособил под свои нужды :)
Ginz 01.12.09 17:22 # +0
LF МТС Москва sms gate. На официальке не нашел, да и гугл какие то проги шаманские и дохликов предлагает =\
nehaffian 01.12.09 17:29 # +0
http://smsprikol.com/email2sms.php?mod=email2sms.php
booley 02.12.09 12:26 # +0
Крут.

Пошел писать почти такое же на php :)
muhas 02.12.09 17:33 # +0
NIH синдром? =) работает не трож =)
Username 03.12.09 11:47 # +0
чочо такое NIH? Nine Inch Nails напомнило внезапно :d
muhas 03.12.09 12:22 # +0
лоровский сленг, не обращай внимания. хотя если любопытно то тынц
Slip 02.12.09 20:07 # +0
Мда...
Для моего города нет XML. Взял ближайший. Вбил номер.
Результат:

1
2
3
4
5
6
3
1
5
5
Сообщение отправить не удалось, процесс-потомок вернул 127 (Exec error.).
Сообщение отправить не удалось.


xmlstarlet и mutt установлены.

В чем может быть дело?

nehaffian 02.12.09 20:48 # +0
Хм.. Странно.
А sendmail\postfix\exim\msmtp либо любой другой MTA установлен\настроен?
Slip 03.12.09 10:26 # +0
Нет.
nehaffian 03.12.09 13:00 # +0
ну, mutt или mail отправляют письма с их помощью.
вот интересная статья:
http://debback.blogspot.com/2008/04/mta-mutt-smtp.html
Slip 04.12.09 11:26 # +0
Спасибо, разобрался.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 93)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 1912 из 148 городов)
            Топ пользователей Топ блогов
            В сети: booley, commonD, cblp, exelens

            welinux.ru

            В хорошем качестве hd видео

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн