Ogłoszenie |
Forum archiwalne, nie można zakładać nowych kont.
|
Onemanga i bash |
Wersja do druku |
Hammer
Master of disaster
Dołączył: 28 Kwi 2009 Status: offline
|
Wysłany: 12-05-2009, 13:12 Onemanga i bash
|
|
|
Nie wiedziałem gdzie to dać, więc pomyślałem że tutaj się nada, jeśli ktoś uważa inaczej niech przeniesie temat -byłbym wdzięczny za info o tym. Jeśli temat łamie jakiś regulamin trudno, skasujcie
W każdym razie do rzeczy, jakiś czas temu szperałem po necie za skryptem basha i trafiłem na coś bardzo ciekawego. Otóż ktoś napisał skrypt basha do pobierania rozdziałów mangi z onemanga... Zauważyłem że na tym forum jest sporo użytkowników linuxa, więc postanowiłem zapodać skrypt, może się komuś przydać.
Więc po kolej, jak to działa, skrypt zapisuje sobie lokalnie stronę potem wyciąga z niej obrazek jak pobierze cały rozdział pakuje go rarem do pliku cbr. Jeśli ktoś nie wie jak oglądać plik cbr, niech po prostu rozpakuje archiwum unrarem. Działa to na wget, curl i rar
Ważne żeby mieć pakiety rar i curl, debian i pochodne typu ubuntu:
Kod: | sudo apt-get install rar unrar curl |
Potem kopiujemy tekst (ze spoilera) do np gedita i zapisujemy np w katalogu ~/manga jako onemanga.sh teraz otwieramy konsole (terminal w gnome to się nazywa) zmieniamy katalog i dajemy skryptowi prawo do wykonywania się.
Kod: |
cd ~/manga
chmod +x onemanga.sh
|
no i w tym momencie mamy gotowy do działania skrypt.
Teraz możemy zacząć ściągać:
Kod: | maciek@maciek:~/manga$ ./onemanga.sh Fate-Stay_Night 1 17 |
pierwszy parametr to tytuł pod którym figuruje, np:Fate-Stay_Night drugi to pierwszy rozdział do pobrania a trzeci ostatni rozdział.
Teraz idziemy na herbatę i jak wracamy mamy piękne paczki z tomami mangi...
skrypt (spoiler żeby się zwijał i nie zajmował tyle miejsca):
- Spoiler: pokaż / ukryj
- #!/bin/bash
base_url="http://www.onemanga.com"
base_dir="."
if [[ "$1" == "-d" ]]; then
shift
if [[ ! -d $1 ]]; then
echo "Directory $1 does not exist. Created."
mkdir $1
fi
base_dir=$1
fi
cd ${base_dir}
manga_name=$1
chapter=$2
last_chapter=$3
display_name=`echo ${manga_name} | sed "s/_/ /g"`
word_count=`echo ${display_name} | wc -w`
sort_key=`echo "${word_count} + 1" | bc`
if [[ "${chapter#${chapter%?}}" == "+" ]]; then
chapter=${chapter%?}
echo "Start downloading at chapter ${chapter}."
latest_chapter=`curl -s --range 58000-60000 ${base_url}/${manga_name}/ | grep -i "ch-subject" | grep -v -i "chapter name" | head -1 | awk -F\/ '{print $3}'`
if [[ "${latest_chapter}" == "" ]]; then
echo "Cannot get the latest chapter of ${display_name} from onemanga.com. Aborted."
exit
else
echo "Latest chapter of ${display_name} on onemanga.com is ${latest_chapter}."
fi
if [[ `echo "${chapter} <= ${latest_chapter}" | bc` -eq 1 ]]; then
last_chapter=${latest_chapter}
if [[ `echo "(${latest_chapter} - ${chapter}) > 1" | bc` -eq 1 ]]; then
echo "The script will download ${display_name} chapter ${chapter}-${last_chapter}."
fi
else
echo "Whoops, something's wrong! The chapter you specified is greater than the latest chapter on onemanga.com!?"
exit
fi
fi
if [[ "${chapter}" == "" ]]; then
current_chapter=`ls *${manga_name}_*.cbr 2> /dev/null | sort -r -n -k ${sort_key} -t_ | head -1`
current_chapter=`echo ${current_chapter##*_} | cut -f1 -d\.`
if [[ "${current_chapter}" == "" ]]; then
echo "Cannot find any chapter of ${display_name} on local disk. Starting at chapter 1."
current_chapter=0
else
echo "Latest chapter of ${display_name} on local disk is ${current_chapter}."
fi
latest_chapter=`curl -s --range 58000-60000 ${base_url}/${manga_name}/ | grep -i "ch-subject" | grep -v -i "chapter name" | head -1 | awk -F\/ '{print $3}'`
if [[ "${latest_chapter}" == "" ]]; then
echo "Cannot get the latest chapter of ${display_name} from onemanga.com. Aborted."
exit
else
echo "Latest chapter of ${display_name} on onemanga.com is ${latest_chapter}."
fi
if [[ `echo "${current_chapter} == ${latest_chapter}" | bc` -eq 1 ]]; then
echo "You already have the latest chapter of ${manga_name}."
exit
elif [[ `echo "${current_chapter} < ${latest_chapter}" | bc` -eq 1 ]]; then
chapter=`echo "$current_chapter + 1" | bc`
last_chapter=${latest_chapter}
if [[ `echo "(${latest_chapter} - ${current_chapter}) > 1" | bc` -eq 1 ]]; then
echo "The script will download ${display_name} chapter ${chapter}-${last_chapter}."
fi
else
echo "Whoops, something's wrong! The latest chapter on local disk is greater than the latest chapter on onemanga.com!?"
exit
fi
fi
if [[ "${last_chapter}" == "" ]]; then
last_chapter=${chapter}
fi
while [[ `echo "${chapter} <= ${last_chapter}" | bc` -eq 1 ]]
do
printf "Downloading ${display_name} chapter ${chapter}\n[>"
next_page_chapter=${chapter}
page_location=`curl -s --range -1500 ${base_url}/${manga_name}/${chapter}/ | grep -i "begin reading" | awk -F\" '{print $2}'`
while [[ `echo "$next_page_chapter == $chapter" | bc` -eq 1 ]]
do
curl -s --range -2000 ${base_url}${page_location} > tmp_page
image_location=`grep "class=\"manga-page\"" < tmp_page | awk -F\" '{print $4}'`
if [[ "$image_location" != "" ]]; then
printf "\b=>"
wget -q $image_location
fi
page_location=`grep "value=\"next page\"" < tmp_page | awk -F\' '{print $2}'`
next_page_chapter=`echo ${page_location} | cut -d\/ -f3`
done
cbr_file_name="${manga_name}_${chapter}.cbr"
printf "\b]\nCreating ${cbr_file_name}... "
rar a -inul ${cbr_file_name} *.jpg
echo "DONE."
rm *.jpg
chapter=$next_page_chapter
done
rm tmp_page
if [[ "${base_dir}" != "." ]]; then
cd ..
fi
Ostatnia uwaga, to nie ma prawa działać na fabrycznym windowsie, ale jeśli kogoś to interesuje da się namówić windowsa żeby uruchamiał skrypty basha. |
_________________ Boże czemuś nas pokarał ciepłym alkoholem i zimnymi kobietami? |
|
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików Możesz ściągać załączniki
|
Dodaj temat do Ulubionych
|
|
|