Csandriel

getsound

Dec 8th, 2018 (edited)
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.42 KB | None | 0 0
  1. #!/bin/bash
  2. #Csandriel 20[16-18]
  3. #у меня этот скрипт называется getsound
  4.     #путь для кешированных слов
  5. CACHE_DIR="/home/mp3/words"
  6.     #принимаем только один параметр:
  7.     #произносимое слово
  8. WORD=$1
  9.     #командная строка плеера.
  10.         #Пробовал mpg123 и mplayer
  11. PLAYER="mpg123 -o alsa"
  12.  
  13.  
  14. #===================================================================
  15. speak () {
  16.     `$PLAYER "$1" 2>/dev/null`
  17.     }
  18.    
  19. pop_cache () {
  20.     C_FILES=$(ls $CACHE_DIR|grep -e "$WORD[0-9].mp3")
  21.     if [ ! -z "$C_FILES" ] ; then  
  22.         for FILE in $C_FILES ;
  23.         do
  24.             speak $CACHE_DIR\/$FILE
  25.         done
  26.         #если отработали до этого момента
  27.         #выходим
  28.         exit 0 
  29.     fi
  30.     }
  31.  
  32.     #перво наперво проверяем кеш
  33.     #если кеш есть на этом и кончим
  34. pop_cache
  35.  
  36. get_page () {
  37.     #получаем текст страницы, из него будем выдирать ссылку
  38. curl "https://www.merriam-webster.com/dictionary/$WORD"
  39.     }
  40.  
  41. push_cache() {
  42.     #COUNT предполагает что при
  43.     #использовании push_cache() в цикле
  44.     #ему будет передан номер итерации
  45.     #каждый вызов, вторым параметром.
  46.     #Эта нумерация используется для имен файлов
  47.     #в кеше, перечисляя варианты по каждому запросу
  48.     local COUNT=$2
  49.  
  50.     local INPUT_LINE=$1
  51.  
  52.     wget --no-check-certificate $INPUT_LINE -O $CACHE_DIR\/$WORD$COUNT.mp3 2>/dev/null
  53.     }
  54.  
  55. # s_.*http\([^"]*\)\.mp3.*_http\1\.mp3_
  56.     #Типа main
  57.     #в два каскада фильтруем текст страницы: сначала вычленяем строку по названию кнопки,
  58.     #и уже из этого результата выдираем непосредственно ссылку на нужный файл
  59. ADDRESS=$(get_page|sed -n '/"contentURL"/ {
  60. s_.*https\([^"]*\)\.mp3.*_https\1\.mp3_
  61. p
  62. }')
  63.  
  64.  
  65. if [ -z "$ADDRESS" ] ; then echo "the word has not been found at the pronounce base"; exit 1; fi
  66.  
  67.     #далеко не всегда мы будем получать в ответ одну ссылку,
  68.     #поэтому в цикле
  69. COUNT=0
  70. for INPUT_LINE in $ADDRESS
  71.     do
  72.         push_cache $INPUT_LINE $COUNT
  73.         ((COUNT++))
  74.     done
  75. pop_cache
  76.  
Add Comment
Please, Sign In to add comment