Захотелось мне получать прогноз погоды на завтра по смс. Бесплатно, конечно :) Причём захотелось давно, был написан скрипт, который успешно работал, но некоторое время назад перестал (сменился формат на сайте). Решил переписать скрипт заново, заодно и сменить «поставщика прогнозов» на всем известного Gismeteo. Заранее оговорюсь, что скрипт, может, и не само совершенство, зато в некотором роде универсальный (предусмотрен вариант отправки транслитом) и, что самое главное, рабочий :)
#!sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH 4. 5. fetch -a -q -w 5 -o /tmp/weather.xml http://informer.gismeteo.ru/rss/48454.xml 6. iconv -c -f windows-1251 -t koi8-r /tmp/weather.xml > /tmp/weather-koi8.xml 7. TODAY=`date -v+1d "+%d:"` 8. 9. # -= Night =- 10. WEATHER_BETA=`cat /tmp/weather-koi8.xml | grep -A 2 "Бангкок: Ночь" | tail -n 1` 11. CLOUDINESS=`echo $WEATHER_BETA | awk -F"<|>|," '{print $3}'` 12. PRECIPITATION=`echo $WEATHER_BETA | awk -F"<|>|," '{print $4}'` 13. TEMPERATURE=`echo $WEATHER_BETA | awk -F"<|>|," '{print $5}' | awk '{print $2}'` 14. WIND=`echo $WEATHER_BETA | awk -F"<|>|," '{print $7 $8}' | awk '{print $2 " " $3 $4}'` 15. if [ "$PRECIPITATION" != "без осадков" ] 16. then 17. WEATHERN=`echo $TEMPERATURE", "$CLOUDINESS", "$WIND` 18. else 19. WEATHERN=`echo $TEMPERATURE", "$PRECIPITATION", "$WIND` 20. fi 21. 22. 23. # -= Day =- 24. WEATHER_BETA=`cat /tmp/weather-koi8.xml | grep -A 2 "Бангкок: День" | tail -n 1` 25. CLOUDINESS=`echo $WEATHER_BETA | awk -F"<|>|," '{print $3}'` 26. PRECIPITATION=`echo $WEATHER_BETA | awk -F"<|>|," '{print $4}'` 27. TEMPERATURE=`echo $WEATHER_BETA | awk -F"<|>|," '{print $5}' | awk '{print $2}'` 28. WIND=`echo $WEATHER_BETA | awk -F"<|>|," '{print $7 $8}' | awk '{print $2 " " $3 $4}'` 29. if [ "$PRECIPITATION" != "без осадков" ]Weather forecast SMS 30. then 31. WEATHERD=`echo $TEMPERATURE", "$CLOUDINESS", "$WIND` 32. else 33. WEATHERD=`echo $TEMPERATURE", "$PRECIPITATION", "$WIND` 34. fi 35. 36. 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;'` 37. 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;'` 38. echo $TODAY $WEATHERN_TR"; "$WEATHERD_TR 39. 40. 41. # Translit 42. #echo $TODAY $WEATHERN_TR $WEATHERD_TR | mail -s "" number@sms.your.sms.gate -froot@yourdomain.net 43. 44. # Cyrillic 45. echo $TODAY $WEATHERN"; "$WEATHERD | iconv -c -f koi8-r -t CP1251 | mail -s "" number@sms.your.sms.gate -froot@yourdomain.net 46. 47. rm -f /tmp/weather.xml 48. 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.