├── README.md ├── packt.cfg └── packt.sh /README.md: -------------------------------------------------------------------------------- 1 | # packt 2 | Packt Publishing daily free e-book claim & download 3 | 4 | BASH script for claim and download daily free e-book from Packt Pucblishing 5 | 6 | Usage: 7 | - enter your user data in packt.cfg 8 | - fire packt.sh from cron 9 | 10 | TODO: 11 | - mail info about downloaded e-book 12 | - srever/personal setups 13 | - formats choosing 14 | -------------------------------------------------------------------------------- /packt.cfg: -------------------------------------------------------------------------------- 1 | # Packt claims configuration file 2 | 3 | userid=your.email@domain.com # Packt userid 4 | pwd=yourpassword # Packt password 5 | slp=1 # sleep time in seconds between URL requests 6 | tout=5 # timeout for curl waiting for response 7 | rtry=5 # number of retries 8 | log="packt.log" # log file 9 | dldir="$HOME/Downloads" # download directory 10 | cookie="cookie.txt" # cookie file 11 | agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0" # browser ID 12 | -------------------------------------------------------------------------------- /packt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Packt daily free e-book claim & download 4 | 5 | source "packt.cfg" 6 | 7 | function log { 8 | echo "$(date '+%Y-%m-%d %H:%M:%S ') $1" >> "$log" 9 | echo "$1" 10 | } 11 | 12 | function getBook { 13 | mkdir -p "$dldir/$title" 14 | curl -s -L --retry $rtry -A "$agent" -b "$cookie" -c "$cookie" "https://www.packtpub.com/ebook_download/$book/$1" > "$dldir/$title/$title.$1" 15 | cex=$?; test "$cex" -ne "0" && { log "curl exit error code: $cex"; exit; } 16 | log "$1 downloaded" 17 | } 18 | 19 | # initial clean up 20 | log "*** Packt started ***" 21 | rm -f $cookie packt*.html 22 | 23 | # login 24 | log "Packt web login" 25 | 26 | # web login 27 | curl -s --retry $rtry -m $tout -A "$agent" -b "$cookie" -c "$cookie" --data-urlencode "email=$userid" -d "password=$pwd" -d "op=Login" -d "form_build_id=form-73ba86bbfb2a50719049129632c84810 " -d "form_token=2f1d586bf7df196b77d0761709d03199" -d "form_id=packt_user_login_form" https://www.packtpub.com 28 | cex=$?; test "$cex" -ne "0" && { log "curl exit error code: $cex"; exit; } 29 | 30 | # daily free e-book 31 | curl -s --retry $rtry -m $tout -A "$agent" -b "$cookie" -c "$cookie" https://www.packtpub.com/packt/offers/free-learning > packt_daily.html 32 | cex=$?; test "$cex" -ne "0" && { log "curl exit error code: $cex"; exit; } 33 | 34 | title=$(grep "dotd-title" -A 2 packt_daily.html | tail -1 | sed 's/^[^0-9A-Za-z]*//;s/[\t ]*<\/h2>$//' | awk '{$1=$1};1') 35 | log "Today's free e-book: $title" 36 | 37 | # claim 38 | claim=$(grep -oE "freelearning-claim/[0-9]+/[0-9]+" packt_daily.html) 39 | curl -s --retry $rtry -m $tout -A "$agent" -b "$cookie" -c "$cookie" -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.5' -H 'Connection: keep-alive' -H 'Host: www.packtpub.com' -H 'Referer: https://www.packtpub.com/packt/offers/free-learning' "https://www.packtpub.com/$claim" 40 | cex=$?; test "$cex" -ne "0" && { log "curl exit error code: $cex"; exit; } 41 | log "e-Book claimed" 42 | 43 | # download link 44 | book=$(echo $claim | sed 's/.*\/\([0-9]*\)\/.*/\1/') 45 | 46 | getBook mobi 47 | getBook epub 48 | getBook pdf 49 | 50 | # Packt logout 51 | curl -s --retry $rtry -m $tout -A "$agent" -b "$cookie" -c "$cookie" https://www.packtpub.com/logout > packt_logout.html 52 | cex=$?; test "$cex" -ne "0" && { log "curl exit error code: $cex"; exit; } 53 | log "Packt logout" 54 | 55 | rm -f $cookie packt*.html 56 | 57 | # end 58 | --------------------------------------------------------------------------------