capricorn2001

Bash-скрипт для RHVoice: дата, день недели, погода

Feb 3rd, 2020
54
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. # Дата, время, погода (pogoda.yandex.ru)
  3.  
  4. TMP_FILE="/tmp/date_time_weather"
  5.  
  6. if [ -f $TMP_FILE ]
  7.  then notify-send --icon=dialog-information ЯНДЕКС-ПОГОДА "Скрипт уже запущен"
  8.  exit 0
  9. fi
  10.  
  11. curl -s -L -o $TMP_FILE --url pogoda.yandex.ru/moscow
  12. # wget --user-agent="Mozilla/5.0" -q -O - https://pogoda.yandex.ru/moscow/ > $TMP_FILE
  13.  
  14. if [ ! -s $TMP_FILE ]
  15.  then notify-send --icon=dialog-information "Данные о погоде недоступны."
  16.  rm $TMP_FILE
  17.  exit 0
  18. fi
  19.  
  20. sed 's/<\/span>//g;s/<\/[^>]*>/&\n/g' -i $TMP_FILE
  21.  
  22. # sed '1,39d;60,$d' -i $TMP_FILE
  23.  
  24. # Температура
  25.  
  26. TEMP=$(cat $TMP_FILE |  grep -m 1 'temp fact__temp' | sed 's/<[^>]*>//g;s/°//')
  27.  
  28. case $TEMP in
  29. +*) TEMP_SIGN="плюс" ; DEGREE=$(echo $TEMP | colrm 1 1) ;;
  30. *) TEMP_SIGN="минус" ; DEGREE=$(echo $TEMP | colrm 1 1) ;;
  31. *) TEMP_SIGN="" ; DEGREE=$TEMP ;;
  32. esac
  33.  
  34. case $DEGREE in
  35. 1 | [2-9]1) UNIT_D="градус" ;;
  36. [234] | [02-9][234]) UNIT_D="градуса" ;;
  37. *) UNIT_D="градусов" ;;
  38. esac
  39.  
  40. # Погодные условия
  41.  
  42. WEATH=$(cat $TMP_FILE | grep -m 1 'link__condition day-anchor i-bem' |  sed 's/<[^>]*>//g')
  43.  
  44. # Ветер
  45.  
  46. if [[ $(cat $TMP_FILE | grep -m 1 'Штиль') = "" ]] ; then
  47. WIND_DIR=$(cat $TMP_FILE | grep '"wind-speed"' | awk '{ print $9 }' | sed 's/".*$//g')
  48. WIND=$(cat $TMP_FILE | grep '"wind-speed"' | sed 's/<[^>]*>//g' | awk '{ print $1 }')
  49. WIND=$(echo $WIND | sed 's/\([0-9]\),0/\1/;s/\([0-9],\)1/\1 и одна десятая/;s/\([0-9],\)\([3-9]\)/\1 и \2 десятых/;s/\([0-9],\)2/\1 и две десятых/')
  50. else
  51. WIND_DIR="штиль"
  52. WIND=0
  53. fi
  54. echo $WIND_DIR
  55. case $WIND in
  56. 1 | [2-9]1) UNIT_W="метр" ;;
  57. [05-9] | [02-9][05-9]) UNIT_W="метров" ;;
  58. *) UNIT_W="метра" ;;
  59. esac
  60.  
  61. # Атмосферное давление
  62.  
  63. PRESS=$(cat $TMP_FILE | grep -m 1 'мм рт. ст.' | sed 's/<[^>]*>//g;s/ мм рт. ст.//')
  64.  
  65. case $PRESS in
  66. ?[02-9]1) UNIT_P="миллиметр" ;;
  67. ?[02-9][234]) UNIT_P="миллиметра" ;;
  68. *) UNIT_P="миллиметров" ;;
  69. esac
  70.  
  71. # Влажность
  72.  
  73. #HUMID=$(cat $TMP_FILE | grep '%</dd>' | sed 's/<[^>]*>//g;s/%//')
  74. HUMID=$(cat $TMP_FILE | grep 'Влажность:' | awk '{ print $4 }' | sed 's/%"//g')
  75.  
  76. case $HUMID in
  77. 1 | [2-9]1) UNIT_HUM="процент" ;;
  78. [234] | [02-9][234]) UNIT_HUM="процента" ;;
  79. *) UNIT_HUM="процентов" ;;
  80. esac
  81.  
  82. MAGNET=$(cat $TMP_FILE | grep -o 'Магнитная буря')
  83. if [ $MAGNET="" ]
  84. then
  85. MAGNET=$(cat $TMP_FILE | sed 's/<[^>]*>//g' | grep -m 3 ' поле')
  86. fi
  87.  
  88. # Дата и время
  89.  
  90. NUM=$(date +%-d)
  91.  
  92. case $NUM in
  93. 1) DAY="первое" ;;
  94. 2) DAY="второе" ;;
  95. 3) DAY="третье" ;;
  96. 4) DAY="четвёртое" ;;
  97. 5) DAY="пятое" ;;
  98. 6) DAY="шестое" ;;
  99. 7) DAY="седьмое" ;;
  100. 8) DAY="восьмое" ;;
  101. 9) DAY="девятое" ;;
  102. 10) DAY="десятое" ;;
  103. 11) DAY="одиннадцатое" ;;
  104. 12) DAY="двенадцатое" ;;
  105. 13) DAY="тринадцатое" ;;
  106. 14) DAY="четырнадцатое" ;;
  107. 15) DAY="пятнадцатое" ;;
  108. 16) DAY="шестнадцатое" ;;
  109. 17) DAY="семнадцатое" ;;
  110. 18) DAY="восемнадцатое" ;;
  111. 19) DAY="девятнадцатое" ;;
  112. 20) DAY="двадцатое" ;;
  113. 21) DAY="двадцать первое" ;;
  114. 22) DAY="двадцать второе" ;;
  115. 23) DAY="двадцать третье" ;;
  116. 24) DAY="двадцать четвёртое" ;;
  117. 25) DAY="двадцать пятое" ;;
  118. 26) DAY="двадцать шестое" ;;
  119. 27) DAY="двадцать седьмое" ;;
  120. 28) DAY="двадцать восьмое" ;;
  121. 29) DAY="двадцать девятое" ;;
  122. 30) DAY="тридцатое" ;;
  123. 31) DAY="тридцать первое" ;;
  124. esac
  125.  
  126. MON=$(date +%-m)
  127.  
  128. case $MON in
  129. 1) MONTH="января" ;;
  130. 2) MONTH="февраля" ;;
  131. 3) MONTH="марта" ;;
  132. 4) MONTH="апреля" ;;
  133. 5) MONTH="мая" ;;
  134. 6) MONTH="июня" ;;
  135. 7) MONTH="июля" ;;
  136. 8) MONTH="августа" ;;
  137. 9) MONTH="сентября" ;;
  138. 10) MONTH="октября" ;;
  139. 11) MONTH="ноября" ;;
  140. 12) MONTH="декабря" ;;
  141. esac
  142.  
  143. HOUR=$(date +%-H)
  144.  
  145. case $HOUR in
  146. 1 | 21) UNIT_H="час" ;;
  147. [234] | 2[234]) UNIT_H="часа" ;;
  148. *) UNIT_H="часов" ;;
  149. esac
  150.  
  151. TMP_MIN=$(date +%-M)
  152.  
  153. case $TMP_MIN in
  154. 0) MIN="ровно" ;;
  155. 1) MIN="однa минута" ;;
  156. 2) MIN="две минуты" ;;
  157. [34]) MIN="$TMP_MIN минуты" ;;
  158. [2-5]1) MIN="$(($TMP_MIN-1)) однa минута" ;;
  159. [2-5]2) MIN="$(($TMP_MIN-2)) две минуты" ;;
  160. [2-5][34]) MIN="$TMP_MIN минуты" ;;
  161. *) MIN="$TMP_MIN минут" ;;
  162. esac
  163.  
  164. # Чтение
  165.  
  166. echo "Сегодня $(date +%A), $DAY $MONTH. Время $HOUR $UNIT_H $MIN. Температура за окном $TEMP_SIGN $DEGREE $UNIT_D. Ветер $WIND_DIR, $WIND $UNIT_W в секунду. Атмосферное давление $PRESS $UNIT_P ртутного столба. Относительная влажность воздуха $HUMID $UNIT_HUM. $WEATH. $MAGNET." | spd-say -w -e -o rhvoice #-y Anna -i 20 -r -10
  167.  
  168. rm $TMP_FILE
  169.  
  170. exit 0
RAW Paste Data