Это снова я, и у меня снова вопрос про bash. И нынешняя моя задача - получить у MOC информацию о текущем треке; найти для него картинку (обложка альбома, либо за неимением оной тематически связанная картинка) в интернете; всплыть уведомление с названием песни, картинкой и прогрессбаром (сколько прошло - сколько осталось). На данный момент имеется такой скрипт:
#!/bin/bash
icon=/usr/share/icons/gnome/48x48/status/audio-volume-high.png
title=$(mocp -i | grep ^Title | sed 's|Title: ||g;s|\[.*\]||g;s|(.*)||g;s|, заказал.*$||g;s|^[0-9]* *-* *||g;s|^ - ||g')
if [[ ! $(echo $title | grep [A-Za-zА-Яа-я]) ]]
then
title=$(mocp -i | grep ^File | sed 's|File: ||g;s|\[.*\]||g;s|(.*)||g;s|^.*\/||g;s|^[0-9]* *-* *||g;s|.mp3||g;s|^ - ||g')
fi
if [[ $(mocp -i | grep radionami) ]]
then
{
path=$(wget -O- radionami.ru/page_main.php | grep album_art | sed 's|^.*album_art/||g;s|">||g;s| ||g')
if [[ $path && ! -e ~/Изображения/.system/mocp/$path ]]
then
wget http://radionami.ru/album_art/$path -P ~/Изображения/.system/mocp/nami/
fi
if [[ $path ]]
then
icon=~/Изображения/.system/mocp/nami/$path
fi
}
else
{
rm ~/Изображения/.system/mocp/yandex/*
path=$(wget -O- "http://images.yandex.ru/yandsearch?text=$(echo $title | sed 's| |%20|g')&nl=1&rpt=image" | grep "^<img src" | sed '2,/^$/d;' | sed 's|^.*src=.||g;s|" width.*$||g')
wget $path -P ~/Изображения/.system/mocp/yandex/
path=$(echo $path | sed 's|^.*\/\/.*\/||g')
if [[ $path ]]
then
icon=~/Изображения/.system/mocp/yandex/$path
fi
}
fi
progress=$(~/Разное/.scripts/progressbar $(mocp -i | grep TotalSec | sed 's|^.*: ||g') $(mocp -i | grep CurrentSec | sed 's|^.*: ||g') 25)
if [[ $title ]]
then
notify-send -i $icon -u normal -t 3000 "$title" "$progress"
fi
exit 0
Пояснение: получили название дорожки, привели в читаемый вид. Если играет радио Нами, на сайте которого высвечивается обложка альбома для текущей песни - тащим картинку оттуда, иначе - вводим имя песни в яндексе и тащим первую попавшуюся картинку. С помощью отдельной проги рисуем псевдографикой прогрессбар. Всё это выводим на экран.
Интересует меня вот эта часть скрипта:
path=$(wget -O- "http://images.yandex.ru/yandsearch?text=$(echo $title | sed 's| |%20|g')&nl=1&rpt=image" | grep "^<img src" | sed '2,/^$/d;' | sed 's|^.*src=.||g;s|" width.*$||g')
wget $path -P ~/Изображения/.system/mocp/yandex/
path=$(echo $path | sed 's|^.*\/\/.*\/||g')
if [[ $path ]]
then
icon=~/Изображения/.system/mocp/yandex/$path
fi
Работает она прекрасно, но, как ни печально, непростительно долго (3-10 секунд). Хотелось бы найти другой способ получения, либо другой источник картинок, чтобы сократить это время хотя бы до 2-х секунд.
Также интересует меня и другой вопрос. Это действие:
progress=$(~/Разное/.scripts/progressbar $(mocp -i | grep TotalSec | sed 's|^.*: ||g') $(mocp -i | grep CurrentSec | sed 's|^.*: ||g') 25)
хотелось бы осуществить внутри скрипта, не прибегая к внешним программам. Сейчас это осуществлено таким образом:
var i,n,m,k: word; s: string;
begin
val(paramstr(1),n,i);
val(paramstr(2),m,i);
val(paramstr(3),k,i);
s:='';
for i:=1 to k do
if (i*n/k>m)
then s:=s+'▒'
else s:=s+'█';
writeln(s)
end.