Парсинг и озвучка погоды на raspbian raspberry pi

Давно появилась идея с утра получать погоду во время завтрака. Для этого я решил использовать raspberry pi 2 с raspbian на борту. В качестве программного обеспечения послужили festival и lynx. Более подробно, как происходит парсинг погоды и её озвучка в статье далее.
1) должна быть установлена локаль ru_RU.UTF-8
2) Устанавливаем необходимое ПО:
sudo apt-get install festival festvox-ru lynx
sudo nano /etc/festival.scm
вписываем в конце:
Parameter.set 'Audio_Method 'esdaudio
(Parameter.set 'Audio_Command "aplay -D plug:dmix -q -c 1 -t raw -f s16 -r $SR $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Format 'snd)

При этом заблокируем там же строки:
;(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
;(Parameter.set 'Audio_Method 'Audio_Command)

скриптом можно проверить работает или нет:
#!/bin/bash
echo "priveeet" | festival --tts

Озвучка файла. В файл get2.txt нужно написать русские слова, которые в последствии будут озвучены:
festival -b --tts --language russian "get2.txt"

sudo mkdir -p /doc/pogoda/
sudo chmod -R 0777 /doc

Скрипт для получения погоды pogoda.sh сохраняет погоду в /doc/pogoda/get.txt:
#!/bin/bash
lynx -width=10000 -dump http://www.meteonova.ru/rss/23226.xml? | sed -e 's/^.*htm//' | sed -e 's/^[0-9?]*\s//' | sed -e 's/Погода.*$//' | head -n 1 | fold -s -w 30 > /doc/pogoda/get.txt

Не забываем сделать его исполняемым:
sudo chmod +x pogoda.sh
выполняем скрипт для получения погоды:
bash pogoda.sh > get.txt

Убираем из файла get.txt все символы кроме а-я .(точка) 0-9 и сохраняем результатьт в get2.txt в одну строку:
sed "s,[^а-я.\ ()0-9],,gi" get2.txt

Вместо точек во всём файле get2.txt делаем пробелы и сохраняем результат в get3.txt:
sed -e 's/[.]/\ /g' get2.txt > get3.txt

Можно теперь озвучить файл get3.txt:
festival -b --tts --language russian "get3.txt"

Закинем это всё в один файл pogoda.sh с небольшими дополнениями:
#!/bin/bash
lynx -width=10000 -dump http://www.meteonova.ru/rss/23226.xml? | sed -e 's/^.*htm//' | sed -e 's/^[0-9?]*\s//' | sed -e 's/Погода.*$//' | head -n 1 | fold -s -w 30 > /doc/pogoda/get.txt

#Убираем из файла get.txt все символы кроме а-я . 0-9 и сохраняем результатьт в get2.txt в одну строку:
sed "s,[^а-я.\ ()0-9],,gi" /doc/pogoda/get2.txt

#вместо точек во всём файле делаем пробелы и сохраняем результать в get3.txt:
sed -e 's/[.]/\ /g' /doc/pogoda/get2.txt > /doc/pogoda/get3.txt

#удалить последние 5 символа в каждой строке файла /doc/pogoda/get3.txt и сохранить в get4.txt (в конце получается пробел)
rev /doc/pogoda/get3.txt | cut -c 3- | rev >/doc/pogoda/get4.txt

#добавляем в конце строки "етров в секунду", чтобы получилось "метров в секунду" и сохраняем в get5.txt
sed 's/$/\етров\ в\ секунду/g' get4.txt > get5.txt

#озвучиваем:
festival -b --tts --language russian "/doc/pogoda/get5.txt"

# удаляем лишние созданные файлы
rm get.txt get2.txt get3.txt get4.txt

Здесь скрипт заканчивается.

Теперь редактируем cron:
crontab -e
Этот скрипт /doc/pogoda/pogoda.sh закидываем на выполнение утром в 7:15 и вечер 19:30 каждый день кропе субб и воскр
В выходные будет выполнять его в 12:00. Вписываем в конце:
15 7 * * 0-4 /doc/pogoda/pogoda.sh
30 19 * * 0-4 /doc/pogoda/pogoda.sh
00 12 * * 5-6 /doc/pogoda/pogoda.sh

Каждое буднее утро и вечер будем озвучена информация о погоде. А что касается выходных дней, то хочется поспать, поэтому festival расскажет о погоде в обед в 12:00.
Не уверен, что скрипт в листинге выше не будет испорчен форматированием движка сайта, поэтому скачать итоговый файл можно здесь. Только потом надо будет изменить расширение с txt на sh и сделать его исполняемым.
На этом всё.

Добавить комментарий