#!/bin/bash
# A tool to download all novels on wenku8.com, the second edition. Minor BUGs fixed.
#
# - Use fallback URL to fetch the real address to ensure that all the novels are downloaded.
# - Removed '?' after the file name.
STORE_PATH=./save/
FETCH_URL='http://www.wenku8.com/modules/article/articlelist.php?page='
DOWNLOAD_TYPE="utf8"
DOWNLOAD_URL="http://dl.wenku8.com/txt$DOWNLOAD_TYPE/__K/__ID.txt"
DOWNLOAD_FALLBACK="http://dl.wenku8.com/down.php?type=$DOWNLOAD_TYPE&id="
TEMP=temp.tmp
FROM=1
TO=93
TIMESTEMP_FORMAT="%H:%M:%S"
for page in $(seq $FORM $TO)
do
echo "[$(date +$TIMESTEMP_FORMAT)] Starting page $page..."
curl $FETCH_URL$page 2> /dev/null > $TEMP
cat $TEMP | iconv -f gbk -t utf-8 | grep 'font-size:13px;' | sed -e 's/.*book\///g; s/.htm">/ /g; s/<\/a><\/b>//g;' > title$TEMP
_ids=$(cat $TEMP | iconv -f gbk -t utf-8 | grep 'font-size:13px;' | sed -e 's/.*book\///g; s/\.htm.*//g')
for novel in $_ids
do
echo "[$(date +$TIMESTEMP_FORMAT)] Downloading $(cat title$TEMP|grep $novel)"
_this_url="$(echo $DOWNLOAD_URL|sed -e "s/__K/1/; s/__ID/$novel/;")"
_this_save="$STORE_PATH/$(cat title$TEMP|grep $novel|tr ' ' '_'|dos2unix 2>/dev/null)"
curl $_this_url > $_this_save 2> /dev/null
[[ ! -z $(cat $_this_save | grep '404 Not Found') ]] && {
_this_url="http://dl.wenku8.com$(curl -I "$DOWNLOAD_FALLBACK$novel" 2> /dev/null | grep Location | awk -F:\ '{print $2}')"
curl $_this_url > $_this_save 2> /dev/null
}
done
done
Replies to wenku8_fetch_se 
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}