#!/bin/sh
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
echo "Lib.ru Downloader"
SITE=http://lib.ru
FILE=search.html
BOOKS=books.html
DIR=Книги
FILES="$FILE $BOOKS"
if [ -d $DIR ]
then true
else mkdir $DIR
fi
cd $DIR/
echo $pwd
for i in $FILES; do
if [ -e $i ]
then rm $i
fi
done
############################################
#Основные функции
############################################
function search {
#Получает ссылку на страничку с выполненным поиском
WORD=$1\
www=$(echo $WORD|\
iconv -f utf-8 -t koi8-r|\
hexdump -e '/1 "%02X"'|\
sed s/../%\\0/g|\
sed s/%0A//g;\
echo)
SEARCH=$SITE/koi/GrepSearch?Search=$www
echo $SEARCH
}
function get_links {
#Получает с поиска ссылки на страницы с книгами и их названия
LINKS=$(cat $1|\
iconv -f koi8-r -t utf-8|\
grep \\\[dir\\\]|\
grep -o /koi/[^\>]*)
for i in $LINKS
do
NAME=$(cat $1|\
iconv -f koi8-r -t utf8|\
grep $i|\
grep -om1 '\[dir].*[^<>]*'|\
sed -e 's/.*\(.*\)<\/b>.*/\1/g'|\
sed s/\ /_/g|\
tr -d "\n")
echo $(echo "$NAME"\|\|\|"$i")
done
}
function get_books {
#Получает со страницы ссылки на книги и их названия
FILE=$1
BOOKSITE=$2
BOOKLINK=$(cat $FILE|\
iconv -f koi8-r -t utf-8 -c|\
grep -oi \[^=]*.txt\>|
sed -e 's/>//g')
for i in $BOOKLINK
do
BOOKNAME=$(cat $FILE|\
iconv -f koi8-r -t utf-8 -c|\
grep -m1 $i|\
sed -e 's/.*t>\(.*\)<\/b><\/A>.*/\1/g'|\
sed -e s/\ /_/g)
echo "$BOOKNAME"\|\|\|"$i"
done
}
function convert_links {
############################################
#Переделывает ссылки в нужный формат
############################################
FILES="$1"
FORMAT=$2
case $2 in
"ascii" ) echo $FILES|sed s/.txt/.txt_Ascii.txt/g;echo;;
"printed") echo $FILES|sed s/.txt/.txt_with-big-pictures.html/g;echo;;
*) echo $FILES;echo;;
esac
}
function recode_files {
#Перекодировать файл в выбранную кодировку
FILE="$1"
ENCODING="$2"
if [ $ENCODING = "koi8-r" ];
then
RIGHTFILE=$FILE
else
RIGHTFILE=$(cat $FILE|iconv -f koi8-r -t utf-8|iconv -cf utf-8 -t $ENCODING;echo)
echo $RIGHTFILE > $FILE
fi
}
function rename_files {
############################################
#Переименовывает файл в название_книги.txt
############################################
FILE=$1
ENCODING=$2
LAST_FILENAME=$(cat $FILE|\
iconv -f $ENCODING -t utf-8|\
tr "\r" "\n"|\
tr "\r\n" "\n"|\
sed -e '/^$/d'|\
grep -o -m1 '[^\\]*'|\
sed -e 's/.*\(.*\)<.*title>.*/\1/g'|\
sed -e 's/^\ //1'|\
tr -d "\n\r")
end=$(echo $FILE|grep -o .txt.*;echo)
mv $FILE "$LAST_FILENAME$end"
}
#############################################
#Начало работы
#############################################
while [ $# -gt 0 ]; do
case "$1" in
--help) shift;echo -e "\tПомощь\t\nДля указания поискового запроса используйте --search <термин>\nДля указания страницы загрузки используйте --page <страница>\nДля указания формата используйте --format ,для указания кодировки используйте --enc ";exit ;;
--page|-p) shift;PAGE="$1";shift ;;
--format|-f) shift;FORMAT="$1";shift;;
--search|-s) shift;SEARCHTERM="$1";shift;;
--enc|-e) shift;ENCODE="$1";shift;;
*) shift;break ;;
esac
done
if [ -z "$SEARCHTERM" -a -z "$PAGE" ]
then
echo "Введите название книги или имя автора:"
read READSEARCH
SEARCHTERM=$(echo $READSEARCH|
sed -e s/\ /\\\ /g;echo)
else
true
fi
if [ -z "$PAGE" ];then
wget -O $FILE $(search "$SEARCHTERM")
else
true
fi
PS3="Книги? "
if [ -z "$PAGE" ]
then
select opt in $(get_links "$FILE")
do
PAGE=$(echo $opt|grep -o '/koi/.*/'|sed -e "s|.*|$SITE\\0|g")
break
done
else
true
fi
wget -O $BOOKS $PAGE
SELECTBOOKS=$(echo "Всё" $(get_books "$BOOKS" "$PAGE"))
select opt in $SELECTBOOKS
do
if [ $opt = "Всё" ];then
LINK=$(for i in $SELECTBOOKS;do
LINK1=$(echo $i|grep -o "|||.*"|sed -e 's/|||//g'|sed -e "s|.*|$PAGE\\0|g")
echo $LINK1
done)
break
else LINK=$(echo $opt|grep -o "|||.*"|sed -e 's/|||//g'|sed -e "s|.*|$PAGE\\0|g")
break
fi
done
if [ -z $FORMAT ];
then FORMAT="html ascii printed"
select opt in $FORMAT
do
RIGHTLINK=$(convert_links "$LINK" $opt)
break
done
else RIGHTLINK=$(convert_links "$LINK" $FORMAT)
fi
wget $RIGHTLINK -nc
RFILE=$(for i in $RIGHTLINK; do
RFILE1=$(echo $i|grep -o '/[^/]*$'|sed -e 's|/||g')
echo $RFILE1
done)
###
if [ -z $ENCODE ];then
ENCODE="windows-1251 koi8-r iso-8859-5 mac-cyrillic cp866 utf-8"
select opt in $ENCODE
do
for i in $RFILE; do
ENCODE=$opt
recode_files $i $opt
done
break
done
else
for i in $RFILE; do
recode_files $i $ENCODE
done
fi
for i in $RFILE; do
rename_files $i $ENCODE
done
###
for i in $FILES; do
if [ -e $i ]
then rm $i
fi
done