#!/bin/bash
#< Fetch latest Dilbert strip and email it to me
BASENAME="/usr/bin/basename"
CURL="/usr/bin/curl"
DATE="/usr/bin/date"
ECHO="/usr/bin/echo"
GREP="/bin/grep"
MAILX="/bin/mailx"
RM="/bin/rm"
SED="/usr/bin/sed"
UUENCODE="/usr/bin/uuencode"
OUTPUT_FILE="dilbert.html"
OUTPUT_IMG="dilbert.gif"
THIS_PROG="$( ${BASENAME} $0 )"
DILBERT_URL="http://www.dilbert.com"
TO_ADDR="kevin@zazzybob.com"
function print_error {
${ECHO} "Error: $@" >&2
}
function print_usage {
{
${ECHO} "Usage: ${THIS_PROG} [-hy]"
${ECHO} " -h Display this usage message"
} >&2
}
function cleanup {
${RM} -f ${OUTPUT_FILE} ${OUTPUT_IMG}
}
trap 'cleanup; exit 1' 1 2 3 15
function check_url {
HTTP_CODE=$( ${CURL} -s -o /dev/null -w%{http_code} ${DILBERT_URL} )
if [ "${HTTP_CODE}" -ne "200" ]; then
print_error "Unable to access ${DILBERT_URL}"
fi
}
function get_url {
${CURL} ${DILBERT_URL} >${OUTPUT_FILE} 2>/dev/null
}
function get_img {
${CURL} ${DILBERT_URL}/${TODAYS_COMIC} >${OUTPUT_IMG} 2>/dev/null || { print_error "Could not get image" && exit 1; }
}
function mail_img {
${UUENCODE} ${OUTPUT_IMG} ${OUTPUT_IMG} | ${MAILX} -s "Dilbert for $( ${DATE} +%d/%m/%Y )" ${TO_ADDR}
}
function parse_html {
${GREP} "Today's Comic" ${OUTPUT_FILE} >/dev/null 2>&1 || { print_error "Could not parse HTML" && exit 1; }
TODAYS_COMIC=$( ${GREP} "Today's Comic" ${OUTPUT_FILE} | ${SED} -n 's/^.*IMG SRC="\([^"]*\)" ALT="Today.*$/\1/p' )
}
while getopts ":h" OPTION; do
case ${OPTION} in
"h") print_usage && exit 0 ;;
* ) print_usage && exit 1 ;;
esac
done
shift $(( ${OPTIND} - 1 ))
if [ "$#" -ne "0" ]; then
print_usage && exit 1
fi
check_url
get_url
parse_html
get_img
mail_img
cleanup
exit 0