| |||
|
|
Бaш ответ wally #!/bin/bash # Парсер обоев с девиантарта, bingimages, goodfons, фликра, и обойного ВКонтактного паблика Paperchan. При запуске выбирает случайные обои из последних опубликованных на источниках. Есть возможность использования своего списка ссылок на обои. # Предназначен для запуска по cron, в связи с чем имя пользователя прописывал "в лоб", поэтому для использования "piyavking" следует заменить на своё имя юзера. Различные ключи запуска позволяют формировать "чёрный список", "избранное", и включать-выключать источники обоев. Есть достаточно подробные, как я считаю, комментарии. # Писался для использования на двух мониторах, лёгким движением приспосабливается под любое их количество. Используется curl и xmlstarlet. Для отрисовки обоев используется feh (при наличии другого менеджера обоев достаточно заменить соответствующую строку на свою обойную команду). # если пользователь в иксах if [ "$(who | grep 'piyavking pts')" != '' ];then # задаём директории для локальных обоев и конфигурационных файлов (в конфигурационной директории создаём список по умолчанию wallurl.default), количество обоев из каждого источника # конфиг walllist.conf имеет вид: ############### # bindimage 1 # deviantart 1 # favorities 1 # flickr 1 # goodfon 1 # local 0 # paperchan 1 ############### local_dir='/home/piyavking/Pictures/wal conf_dir='/home/piyavking/Pictures/wall vol=5 # функции отсеивания забаненных изображений и и записи 5 случайных адресов из локального списка в глобальный function check1 { banned="n" while read lineban;do if [ "$1" == "$lineban" ];then banned="y" fi done < $3 if [ "$banned" != "y" ];then echo $1 >> $2 fi } function check2 { checked=$1 while read linecheck;do checked=$(grep -v $linecheck <<< "$checked") done < $conf_dir'banned.txt' wallurl="$wallurl"$'\n'"$(echo "$checked" | shuf | head -n $vol)" } # если скрипт запущен с аргументом if [ "$1" != "" ];then # определяем монитор, на котором находится мышь, оперируем с обоиной на этом мониторе if [ $((`xdotool getmouselocation | awk -F' ' '{print $1}' | awk -F':' '{print $2}'`)) -lt 1280 ]; then wname=`cat $conf_dir'wallname' | head -n 1 | awk -F' ' '{print $1}'` else wname=`cat $conf_dir'wallname' | head -n 1 | awk -F' ' '{print $2}'` fi # разбор по случаям аргументов case "$1" in "-f" ) # отправить в избранное check1 $wname $conf_dir'favorities.txt' $conf_dir'favorities.txt' ;; "-b" ) # не загружать больше check1 $wname $conf_dir'banned.txt' $conf_dir'banned.txt' ;; "-e" ) # показать в браузере x-www-browser $wname ;; esac # если запустить скрипт с тегом в качестве аргумента, то он поменяет соответствующее тегу число в walllist.conf с 0 на 1, и наоборот if [ "$(cat $conf_dir'walllist.conf' | grep $1)" != "" ];then conftemp=$(cat $conf_dir'walllist.conf') case $(echo "$conftemp" | grep $1" " | awk -F' ' '{print $2}') in "1" ) echo "$conftemp" | sed "s/${1}\ 1/${1} 0/g" > $conf_dir'walllist.conf' ;; "0" ) echo "$conftemp" | sed "s/${1}\ 0/${1} 1/g" > $conf_dir'walllist.conf' ;; esac fi # без аргумента else # загружаем список, из которого будет выбираться обоина, и начинаем его формировать, в файле walllist.conf содержатся ключи использования источников, если напротив источника стоит 0, то он не используется wallurl='' # проверяем сеть if ( ping -c 1 "ya.ru" > /dev/null 2>&1 );then # парсим deviantart rss if [ "$(cat $conf_dir'walllist.conf' | grep deviantart | awk -F' ' '{print $2}')" != "0" ]; then deviantart=$(curl 'http://backend.deviantart.com/rss.x check2 "$deviantart" fi # парсим bindimage rss if [ "$(cat $conf_dir'walllist.conf' | grep bindimage | awk -F' ' '{print $2}')" != "0" ]; then bindimage=$(curl 'http://feeds.feedburner.com/bingima check2 "$bindimage" fi # парсим flickr rss if [ "$(cat $conf_dir'walllist.conf' | grep flickr | awk -F' ' '{print $2}')" != "0" ]; then flickr=$(curl 'http://api.flickr.com/services/feeds/p check2 "$flickr" fi # парсим goodfon rss goodfon='' if [ "$(cat $conf_dir'walllist.conf' | grep goodfon | awk -F' ' '{print $2}')" != "0" ]; then while read GF_item;do goodfon="$goodfon"$'\n'$(curl $(curl $GF_item | grep 'Скачать оригинал:' | sed -e "s/<\|>/\n/g" | grep 'a href' | awk -F'"' '{print $2}' | sed 's/^/http:\/\/www.goodfon.ru/') | grep 'top.location.href' | awk -F"\x27" '{print $2}' | awk -F"?" '{print $1}') done <<< "$(curl 'http://www.goodfon.ru/goodfon.rss' check2 "$(sed '/./,$!d' <<< "$goodfon")" fi # парсим стенку Paperchan'а (подобным образом можно парсить любой паблик) paperchan='' if [ "$(cat $conf_dir'walllist.conf' | grep paperchan | awk -F' ' '{print $2}')" != "0" ]; then while read SD_item;do while read SD_photo;do src=$(curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" $SD_photo | sed -e 's/\"id\"/\n/g' | grep $(echo $SD_photo | awk -F'_' '{print $2}') | grep 'w_src' | awk -F'"w_src"' '{print $2}' | awk -F'"' '{print $2}' | sed -e 's/\\//g') if [ "$src" == '' ];then src=$(curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" $SD_photo | sed -e 's/\"id\"/\n/g' | grep $(echo $SD_photo | awk -F'_' '{print $2}') | grep 'z_src' | awk -F'"z_src"' '{print $2}' | awk -F'"' '{print $2}' | sed -e 's/\\//g') fi paperchan="$paperchan"$'\n'$src sleep 1 done <<< "$(curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" $SD_item | sed -e "s/<\|>/\n/g" | grep 'return showPhoto' | awk -F"\x27" '{print $2}' | sed 's/^/http:\/\/vk.com\/photo/')" done <<< "$(curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" 'http://vk.com/wall-55438333?own=1' check2 "$(sed '/./,$!d' <<< "$paperchan")" fi # добавляем случайных обоин из избранного (в файле 'favorities' допускаются комментарии с '#') if [ "$(cat $conf_dir'walllist.conf' | grep favorities | awk -F' ' '{print $2}')" != "0" ]; then wallurl="$wallurl"$'\n'"$(cat $conf_dir'favorities.txt' | grep -v '#' | shuf | head -n $vol)" fi fi # добавляем локальных обоин if [ "$(cat $conf_dir'walllist.conf' | grep local | awk -F' ' '{print $2}')" != "0" ]; then wallurl="$wallurl"$'\n'"$(find $local_dir -type f -name '*.jpg' -o -name '*.png' | shuf | head -n $vol)" fi # если список не сформирован, используем дефолтный if [ "$wallurl" == '' ]; then wallurl=$(cat $conf_dir'wallurl.default') fi # убираем в списке верхнюю пустую строку, вешаем на столы случайные обоины из списка, записываем их адреса в wallname wallurl=$(sed '/./,$!d' <<< "$wallurl") wallname=$(shuf <<< "$wallurl" | head -n 2 | sed "{:q;N;s/\n/ /g;t q}") feh --bg-fill $wallname echo $wallname > $conf_dir'wallname' fi fi |
||||||||||||||