jajtelan

4chan image downloader

Oct 15th, 2012
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.99 KB | None | 0 0
  1. #! /usr/bin/env bash
  2.  
  3. ## website:auto_update_delay:pictures_format
  4. FMT_REF=(
  5.   '4chan':5:'images\.4chan\.org/\w+/src/[0-9]+\.\w+'
  6.   'imagefap':0:'fap\.to/images/full/[0-9]+/[0-9]+/\w+\.\w+'
  7. )
  8.  
  9. function fatal {
  10.         echo "$@" 1>&2
  11.         exit 1
  12. }
  13.  
  14. function display_source {
  15.   curl "$@" 2>/dev/null
  16. }
  17.  
  18. function download_file {
  19.   wget -o /dev/null -O "$1" "$2"
  20. }
  21.  
  22. function loop_urls {
  23.         local URL="$1"
  24.         local FOLDER="$2"
  25.   local FMT="$3"
  26.  
  27.         echo "Building URLs index from ${URL}..."
  28.         local U=( $(display_source "$URL" | egrep -o "$FMT" | sort -u | uniq) )
  29.         local NU=${#U[@]}
  30.  
  31.         test "$NU" -lt 1 && fatal "Unable to fetch $URL (404?)"
  32.  
  33.         local n=0
  34.         for u in "${U[@]}"; do
  35.                 local F=$(basename "$u")
  36.  
  37.                 n=$((n + 1))
  38.                 echo -n "Downloading pic #${n}/${NU} (${F})..."
  39.  
  40.                 test -f "${FOLDER}/${F}" && echo " Cached" && continue
  41.  
  42.     download_file "${FOLDER}/${F}" "http://${u}" \
  43.                         || fatal "Unable to download pic (404?)"
  44.                 echo ' OK'
  45.         done
  46. }
  47.  
  48. function main {
  49.   local URL="$1"
  50.   local FOLDER="$2"
  51.  
  52.         echo "Creating folder $2..."
  53.         mkdir -p "$FOLDER" 2>/dev/null || fatal "Unable to create folder $FOLDER"
  54.  
  55.   local FMT=''
  56.   local DELAY='0'
  57.   for i in "${FMT_REF[@]}"; do
  58.     local k=$(echo "$i" | cut -d: -f1)
  59.     local d=$(echo "$i" | cut -d: -f2)
  60.     local v=$(echo "$i" | cut -d: -f3)
  61.  
  62.     echo "$URL" | grep -q "$k" \
  63.         && FMT="$v" \
  64.         && DELAY="$d" \
  65.         && break
  66.   done
  67.  
  68.   test -z "$FMT" && fatal "Unsupported website"
  69.   echo "$DELAY" | egrep -q '[0-9]+' || fatal "Delay isn't a number"
  70.  
  71.   echo "Detected URL format: $FMT (delay: ${DELAY})"
  72.  
  73.   while true; do
  74.     loop_urls "$URL" "$FOLDER" "$FMT"
  75.  
  76.     if [ "$DELAY" -gt 0 ]; then
  77.       sleep "$DELAY"
  78.     else
  79.       break
  80.     fi
  81.   done
  82. }
  83.  
  84. if [ $# -eq 2 ]; then
  85.   main "$1" "$2"
  86. else
  87.   fatal "Usage: $0 <url> <folder>"
  88. fi
Add Comment
Please, Sign In to add comment