Bash Site about Linux


Вернуться к оглавлению

25.01.2013

Курсы валют Центробанка в conky



В предыдущей статье я рассказал как вывести в conky курсы валют и металлов Сбербанка (курсы покупки и курсы продаж). Кому не нужна такая детальная информация, но кто следит за общим курсом валют, предлагаю описание, как получить курсы Центробанка.


Файл с котировками в формате XML получаем по ссылке http://www.cbr.ru/scripts/XML_daily.asp

wget "http://www.cbr.ru/scripts/XML_daily.asp" -O quotes.xml
и забираем из него необходимые данные.

Я написал скрипт, который скачивает и обрабатывает этот файл и подготавливает котировки за последние три дня для вывода в conky.


Скрипт cb.sh помещаем в папку $HOME/.conki/cb, делаем исполняемым и прописываем в автозагрузку. XML-файл выходит раз в сутки, поэтому скрипт отрабатывает только один раз при входе в систему. Если в данный момент нет соединения с интернетом, то соединение проверяется каждые 10 минут. Думаю, что скрипт достаточно прокомментирован, что бы легче разобраться в нём и при желании что-то подправить под себя.


Файл cb.sh:
#! /bin/bash

P=`dirname "$0"`	# директория скрипта

# Ввожу некоторые условности для упрощения обозначения переменных:
# "0" - Today (Сегодня) 
# "1" - Yesterday (Вчера)
# "2" - 1_day_ago (Позавчера)

DATE_0=`date +%d-%m`                      # сегодня
DATE_1=`date --date="yesterday" +%d-%m`   # вчера
DATE_2=`date --date="2 days ago" +%d-%m`  # позавчера

F_0=$P/${DATE_0}.tmp    # файл с сегодняшними котироаками
F_1=$P/${DATE_1}.tmp    # файл с вчерашними котироаками
F_2=$P/${DATE_2}.tmp    # файл с позавчерашними котироаками

TEMPFILE=$P/tmp.tmp     # временный файл

# О файле quot_for_conky:
# Это конечный файл преобразований
# и данные conky берёт из него
# Файл имеет 9 строк:
# 1 и 5 название валюты, 9 - пустая
# 2-я строка котировки USD сегодня
# 3-я  -"-      -"-    USD вчера
# 4-я  -"-      -"-    USD позавчера
# 6-я  -"-      -"-    EUR сегодня
# 7-я  -"-      -"-    EUR вчера
# 8-я  -"-      -"-    EUR позавчера

# 1. Проверяю наличие файла quot_for_conky
# и если он отсутствует, то создаю:
if [ ! -e "${P}/quot_for_conky" ]
then
    touch "${P}/quot_for_conky"
	echo $'USD\n\n\n\nEUR\n\n\n\n' > ${P}/quot_for_conky
fi

# 2. Проверяю наличие файла с сегодняшними
# котировками. Если он существует, то 
# заканчиваю работу скрипта:
if [ -e "$F_0" ]
then
    exit
fi

# 3. Удаляю все *.tmp файлы старше позавчерашних:
for i in $P/*.tmp; do
    if \
	[ $i == ${F_0} ] || \
	[ $i == ${F_1} ] || \
	[ $i == ${F_2} ]; then continue; fi
    rm -f $i 
done 

# 4. Качаю XML файл:
wget -q "http://www.cbr.ru/scripts/XML_daily.asp" -O "$P/src.asp"
VAR0=$?
while [ $VAR0 -ne 0 ]; do
     wget -q "http://www.cbr.ru/scripts/XML_daily.asp" -O "$P/src.asp"
     VAR0=$?
     sleep 300
done

# 5. Преобразую формат окончания строк из DOS (CR/LF) в Unix (LF):
sed 's/\r//g' $P/src.asp > ${TEMPFILE}

# 6. Удаляю все теги
sed -e :a -e 's/<[^>]*>//g;/ ${F_0}

# 7. Меняю кодировку:
iconv -f WINDOWS-1251 -t UTF-8 ${F_0} -o ${TEMPFILE}

# 8. убираю табудяции в начале строки:
sed 's/^[ \t]*//' ${TEMPFILE} > ${F_0}

# 9. Получаю котировки EUR 
EUR_0=`sed -n '78 s/..$//; 78p' ${F_0}`

if [ -e "${F_1}" ]
  then
    EUR_1=`sed -n '78 s/..$//; 78p' ${F_1}`
  else
    EUR_1="-----" # при отсутствии файла заполняю прочерками
fi

if [ -e "${F_2}" ]
  then
    EUR_2=`sed -n '78 s/..$//; 78p' ${F_2}`
  else
    EUR_2="-----" # при отсутствии файла заполняю прочерками
fi

# 10. Получаю котировки  USD
USD_0=`sed -n '71 s/..$//; 71p' ${F_0}`

if [ -e "${F_1}" ]
  then
    USD_1=`sed -n '71 s/..$//; 71p' ${F_1}`
  else
    USD_1="-----" # при отсутствии файла заполняю прочерками
fi

if [ -e "${F_2}" ]
  then
    USD_2=`sed -n '71 s/..$//; 71p' ${F_2}`
  else
    USD_2="-----" # при отсутствии файла заполняю прочерками
fi

echo ${F_1} $USD_1

# 11. Заполняю файл quot_for_conky
sed "\
	2 s/^.*/$USD_0/i; \
	3 s/^.*/$USD_1/i; \
	4 s/^.*/$USD_2/i; \
	6 s/^.*/$EUR_0/i; \
	7 s/^.*/$EUR_1/i; \
	8 s/^.*/$EUR_2/i; \
	" ${P}/quot_for_conky > ${TEMPFILE}
mv ${TEMPFILE} ${P}/quot_for_conky

exit

Скачать скрипт или посмотреть в соседнем окне (при просмотре кодировка UTF-8).

Нужно отметить, что котировки USD расположены в 71-ой строке в файле src.asp или в перекодированных <дата>.tmp. Котировки EUR - 78-я строка. Если нужны другие валюты, то выбрать не составит труда, просто открыв файл (для удобства в текстовом редакторе нужно включить подсветку строк).


Кусок кода для conky, который я использовал:
${tab 90}USD${tab 49}EUR
позавчера${tab 45}\
${texeci 600 sed -n '4p' $HOME/.conky/cb/quot_for_conky}\
${tab 30}\${texeci 600 sed -n '8p' $HOME/.conky/cb/quot_for_conky}
вчера${tab 45}\
${texeci 600 sed -n '3p' $HOME/.conky/cb/quot_for_conky}\
${tab 30}${texeci 600 sed -n '7p' $HOME/.conky/cb/quot_for_conky}
сегодня${tab 45}\
${texeci 600 sed -n '2p' $HOME/.conky/cb/quot_for_conky}\
${tab 30}${texeci 600 sed -n '6p' $HOME/.conky/cb/quot_for_conky}


и в заключении иллюстация:




Вернуться к оглавлению







Яндекс.Метрика
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS