Прогноз погоды по sms (*nix + shell script, email2sms)

    Захотелось мне получать прогноз погоды на завтра по смс. Бесплатно, конечно :) Причём захотелось давно, был написан скрипт, который успешно работал, но некоторое время назад перестал (сменился формат на сайте). Решил переписать скрипт заново, заодно и сменить «поставщика прогнозов» на всем известного Gismeteo. Заранее оговорюсь, что скрипт, может, и не само совершенство, зато в некотором роде универсальный (предусмотрен вариант отправки транслитом) и, что самое главное, рабочий :)
    1. #!sh

    2. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH

    3. fetch -a -q -w 5 -o /tmp/weather.xml http://informer.gismeteo.ru/rss/48454.xml
    4. iconv -c -f windows-1251 -t koi8-r /tmp/weather.xml > /tmp/weather-koi8.xml
    5. TODAY=`date -v+1d "+%d:"`

    6. # -= Night =-
    7. WEATHER_BETA=`cat /tmp/weather-koi8.xml | grep -A 2 "Бангкок: Ночь" | tail -n 1`
    8. CLOUDINESS=`echo $WEATHER_BETA | awk -F"<|>|," '{print $3}'`
    9. PRECIPITATION=`echo $WEATHER_BETA | awk -F"<|>|," '{print $4}'`
    10. TEMPERATURE=`echo $WEATHER_BETA | awk -F"<|>|," '{print $5}' | awk '{print $2}'`
    11. WIND=`echo $WEATHER_BETA | awk -F"<|>|," '{print $7 $8}' | awk '{print $2 " " $3 $4}'`
    12. if [ "$PRECIPITATION" != "без осадков" ]
    13. then
    14.     WEATHERN=`echo $TEMPERATURE", "$CLOUDINESS", "$WIND`
    15. else
    16.     WEATHERN=`echo $TEMPERATURE", "$PRECIPITATION", "$WIND`
    17. fi


    18. # -= Day =-
    19. WEATHER_BETA=`cat /tmp/weather-koi8.xml | grep -A 2 "Бангкок: День" | tail -n 1`
    20. CLOUDINESS=`echo $WEATHER_BETA | awk -F"<|>|," '{print $3}'`
    21. PRECIPITATION=`echo $WEATHER_BETA | awk -F"<|>|," '{print $4}'`
    22. TEMPERATURE=`echo $WEATHER_BETA | awk -F"<|>|," '{print $5}' | awk '{print $2}'`
    23. WIND=`echo $WEATHER_BETA | awk -F"<|>|," '{print $7 $8}' | awk '{print $2 " " $3 $4}'`
    24. if [ "$PRECIPITATION" != "без осадков" ]Weather forecast SMS
    25. then
    26.     WEATHERD=`echo $TEMPERATURE", "$CLOUDINESS", "$WIND`
    27. else
    28.     WEATHERD=`echo $TEMPERATURE", "$PRECIPITATION", "$WIND`
    29. fi

    30. WEATHERN_TR=`echo $WEATHERN | tr "абвгдезийклмнопрстуфхцьыАБВГДЕЗИЙКЛМНОПРСТУФХЦЬЫ" "abvgdezijklmnoprstufhc'yABVGDEZIJKLMNOPRSTUFHC'Y" | sed -e 's/ё/io/g;s/ж/zh/g;s/ч/ch/g;s/ш/sh/g;s/щ/sch/g;s/э/\`e/g;s/ю/yu/g;s/я/ya/g;s/ъ/"/g;s/Ё/Io/g;s/Ж/Zh/g;s/Ч/Ch/g;s/Ш/Sh/g;s/Щ/Sch/g;s/Э/\`Е/g;s/Ю/Yu/g;s/Я/Ya/g;s/Ъ/"/g;'`
    31. WEATHERD_TR=`echo $WEATHERD | tr "абвгдезийклмнопрстуфхцьыАБВГДЕЗИЙКЛМНОПРСТУФХЦЬЫ" "abvgdezijklmnoprstufhc'yABVGDEZIJKLMNOPRSTUFHC'Y" | sed -e 's/ё/io/g;s/ж/zh/g;s/ч/ch/g;s/ш/sh/g;s/щ/sch/g;s/э/\`e/g;s/ю/yu/g;s/я/ya/g;s/ъ/"/g;s/Ё/Io/g;s/Ж/Zh/g;s/Ч/Ch/g;s/Ш/Sh/g;s/Щ/Sch/g;s/Э/\`Е/g;s/Ю/Yu/g;s/Я/Ya/g;s/Ъ/"/g;'`
    32. echo $TODAY $WEATHERN_TR"; "$WEATHERD_TR


    33. # Translit
    34. #echo $TODAY $WEATHERN_TR $WEATHERD_TR | mail -s "" number@sms.your.sms.gate -froot@yourdomain.net

    35. # Cyrillic
    36. echo $TODAY $WEATHERN"; "$WEATHERD | iconv -c -f koi8-r -t CP1251 | mail -s "" number@sms.your.sms.gate -froot@yourdomain.net

    37. rm -f /tmp/weather.xml
    38. rm -f /tmp/weather-koi8.xml
    Примечания к скрипту:
    • вместо «number@sms.your.sms.gate» нужно, естественно, вписать свой номер в соответствии с рекомендациями вашего оператора
    • вместо «root@yourdomain.net» нужно вписать действующий адрес, т.к. он проверяется некоторыми операторами, причём желательно, чтобы адрес был как можно короче, т.к. он будет включён в основной текст sms и «съест» несколько драгоценных символов
    • с кириллицей, скорее всего, придётся повозиться, ибо к ней применимо множество ограничений, от в два раза меньшего количества символов в sms до принудительной транслитерации на стороне оператора
    • если нужно указать нескольких получателей, то нужно делать примерно вот так: /usr/bin/mail -s "" -c number2@sms.your.sms.gate,number3@sms.your.sms.gate number1@sms.your.sms.gate -froot@yourdomain.net. И не всовывайте всех получателей в одно письмо: в конфиге почтаря может быть ограничение на количество адресатов
    • Обновление исходного xml происходит 4 раза в сутки: в 2:30, 8:30, 14:30 и 20:30 МСК по зимнему времени
      ______________________
      UPD:
    • в скрипте изначально были указаны абсолютные пути к утилитам для FreeBSD 7.1. У вас они могут лежать в другом месте! Поэтому, если у вас скрипт ещё с прописанными путями, то лучше их из скрипта убрать, а при редактировании кронтаба, в самом его начале, перед расписаниями, прописать правильный PATH для вашей ОС, например, вот такой: PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
    • ID нужного города можно узнать в настройках xml-информера
    Вот, собственно и всё. Осталось только внести выполнение скрипта в кронтаб. Надеюсь, кому-нибудь пригодится :)

    P.S. Абонентам украинского Beeline очень рекомендую почитать об услуге SMS на Email — там описано как включить приём кириллицы и возможность приёма «склеенных» sms.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 48
    • 0
      Вот бы лучше рассказали как по-нормальному смс послать, а не email2sms :) и бесплатно…
      • +10
        просто! купите себе оператора мобильной связи… =) Говорят можно будет скоро взять подешевке парочку… =)
        • 0
          • 0
            Он разве не таким же образом шлет?
            • 0
              выглядит как троян…
              даже ставить боязно…
              • +1
                а зря, отличная программулина (по крайней мере, была года 1,5 назад) :)
            • 0
              Бесплатно на свой номер можно через гуглокалендарь — настраиваите там уведомления о событиях по sms — а дальше через гуглоапи календаря шлете себе смски — вот пример моего скриптика для всяких уведомлений с сервера
              pesikot.org/static/google_sms.html
              • +1
                Звиняюсь, ссылку криво написал. Вот:
                pesikot.org/static/google_sms.html

                Кстати юзаю уже года три наверное — работает как часы.
                • +1
                  что то я туплю похоже — в предпросмотре ссылка кликабельна — а после поста уже нет…
                  pesikot.org/static/google_sms.html
                  • 0
                    Ссылки в посте не кликабельны из-за этой, как её там… На «К» ;)
                    А через гуглоапи сменить номер нельзя? Чтоб сделать отправку на несколько номеров, а не только свой. Спрашиваю, а не пробую, потому, что пока мне это только для справки, но за идею спасибо.
                    • 0
                      Номер сменяется только через подтверждение (отсылка кода на sms и ввод его в календаре) — так что на несколько номеров нельзя — хотя есть вариант — заренее забить номера — на каждый календарь можно назначить свой номер телефона — и добавлять события в разные календари.
            • 0
              Интересная идея. Можно добавить подобным образом информацию о курсе валют, последних новостей, еще парочку полезных вещей — и можно открывать свой ресурс.
              • 0
                а по чем берут за одну «настроечную» смс? по ссылке не указано… :(
                • 0
                  Берут как за обычную sms. Малость обидно конечно, но зато у них эта услуга работает, в отличие от некоторых (МТС имею в виду), которые «в интересах абонентов» её отключили вообще. У Киевстара хоть активировать можно, позвонив оператору.
                  • 0
                    ага. я уже тоже это установил опытным путем. =) с меня по 32 копейки содрали за каждую… =)
                    ну гривну ради интересу не жалко =)

                    у Билайна в этом смысле всегда было лучше всех все.) Даже когда он еще и билайном никаким не был.
                    я вообще впервые начал интернетом в телефоне пользоваться, когда купил себе ПриватМобайл. Вообще хорошая была виртуалка… =)

                    Только что-то мне после этих манипуляций с смс имейлы вообще перестали приходить… :D
                    • 0
                      Я пока экспериментировал, тоже переставали ходить, буквально на пару минут. А потом пришли все кучей. Видать сервера у них сонные сейчас. Или тех. обслуга какая — время как раз подходящее :)
                      • 0
                        ага. мне тоже начали ходить. при чем с паузами минут в 5 и в обратном порядке)
                        (те что отправил раньше пришли позже =))

                        может там модераторы их перечитывают на предмет спама? :D
                        • 0
                          Еще 2 момента.
                          Где выдрать рсс для Киева?
                          informer.gismeteo.ru/ — тут только уродский совершенно xml предлагают… :(

                          и второй как в мэйл правильно передать дополнительный заголовок? а то я там когда-то на серваке антиспам импровизированный устроил — вся исходящая почта проверяется на наличие определенного хедера — и если его нет — удаляется просто. )
                          а то блин замучили уже со своими дырявыми движками сайтов. вечно потом перед провайдером оправдывайся. =)
                          • 0
                            прошу прощения за некоторую бессвязность речи — спать охота ужас. )
                            • 0
                              не знаю, может я чего не так скопировал, но у меня этот скрипт выдает:
                              #13: , ,; , ,

                              и все :(
                              • 0
                                Код города для xml и для rss один и тот же. Добавил в примечания.
                                • 0
                                  Там еще единичка какая-то левая:
                                  informer.gismeteo.ua/xml/33345_1.xml — ХМЛ для Киева
                                  informer.gismeteo.ua/rss/33345_1.xml — rss для Москвы
                                  informer.gismeteo.ua/rss/33345.xml — rss для Киева
                                  • 0
                                    так все же — почему пустой ответ выводит?

                                    и как хэдеры дописать? а то в манах пишут mail [-a headers] а сам mail ругается, что у него не бывает такого параметра… :(
                                    • 0
                                      Насчёт левой единички — она для rss не нужна.
                                      Насчёт пустого ответа — попробуйте делать echo параметров после присвоения им значений (echo WEATHER_BETA и т.д.).
                                      Насчёт заголовков для mail — не знаю зачем они вам понадобились, без них нормально работает.
                                      • 0
                                        я там выше писал зачем. sendmail не пропускает писем без определенного заголовка.

                                        эшить попробую…
                        • 0
                          А зачем, если не секрет, у вас все стандартные линуксовые утилиты вызываются через абсолютный путь? И fetch я бы заменил wget`ом — он как то более популярен
                          • 0
                            Абсолютные пути — привычка. Уже не вспомню после чего она выработалась, но, по-моему, как раз из-за косяков при исполнении скриптов из крона — утилиты не всегда находятся. Не самые стандартные, естественно, но это как с ложками — они нашлись, но осадок остался :)
                            Насчёт wget'a — в FreeBSD его нет по умолчанию. Да и чтобы забрать такой мизер призывать Верховных — не комильфо :)
                            • +3
                              Правильнее всё же не указывать абсолютные пути, а правильно настраивать крон, или хотя бы просто прописать PATH в скрипте.

                              Просто, например, у многих iconv лежит не в /usr/local/bin а в /usr/bin и ваш скриптик с треском провалится.
                              • 0
                                Спасибо, исправил скрипт и обновил примечания.
                            • 0
                              Потому, что приложение, вызванное через крон, а не ваш баш, не будет иметь путей в переменной окружения.
                            • 0
                              http://informer.gismeteo.ru/rss/48454.xml

                              Это вы в Бангкоке погоду смотрите? 0_0
                              • +1
                                Это же просто пример, какая разница где смотреть? :)
                              • +2
                                Все очень легко есть php класс для mail.ru агента, который позволяет посылать смс на халяву, все что нужно это аккаунт на майле и php на компе.

                                Больше по теме — wl500g.info/showpost.php?p=129356&postcount=1
                                • 0
                                  А у вас нет скрипта не через гейт? а то билайносмс загнулось недавно(отправлял curl'ом через http), теперь мне отчеты не приходят… =/
                                  • 0
                                    Кажется для московских абонетов Megafon не существует услуги «e-mail to sms» или я плохо искал.
                                    А жаль…
                                    • 0
                                      О я такое писал давным давно на php, оператор был билайн. работало всё около года, потом сервачёк дома пришлось вырубить. Если кому интересно могу дать исходники.
                                      • 0
                                        Интересно. У меня вот скрипт тоже на пхп работал, но щас меня билайн посылаен на йух. Если не трудно, запастите свой скрипт куданить.
                                        • 0
                                          У билайна сначало надо разрешить отправку смс на сайте билайна это описано: www.beonline.ru/portal/comm/mem.sms?section=forw2sms далее для отправки смс надо отправлять емайл 79xxxxxxxxxxx@sms.beemail.ru и всё тока что проверил работает
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                        • 0
                                          Написать xml парсер это мегаизврат, имея xslt процессоры…
                                          в свое время (года 4-е назад (второй курс)) писали на php простенькую напоминалку «к какой паре идти и куда»… зато там был целый api на soap прикручен… ээх…
                                          • 0
                                            интересно, в каком это университете?
                                            • 0
                                              Владимирский гос универ. Делали не для пром использования, конечно же, так два студента для себя — ради изучения скорее, нежели для использования.
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                            • 0
                                              #13:, ,;,,
                                              аналогично :(
                                              FBSD 7.1
                                              • 0
                                                Выводы по результатам разбора полётов: лечится взятием с гисметео именно rss'ного xml и правильной настройкой консоли :)
                                              • 0
                                                Делал такое 4 года назад на php. Тогда можно было просто sms через e-mail посылать. А gismeteo.ru не отдавал xml, я парсил wap.gismeteo.ru.

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.