#!/bin/bash
#< Script to grab word of the day from dictionary.com
# Schedule daily from cron and pipe to mailx for daily word-of-the-day
BASENAME="/usr/bin/basename"
CURL="/usr/bin/curl"
DATE="/usr/bin/date"
ECHO="/usr/bin/echo"
RM="/bin/rm"
SED="/usr/bin/sed"
OUTPUT_FILE="${HOME}/wotd.html"
THIS_PROG="$( ${BASENAME} $0 )"
WOTD_URL="http://dictionary.reference.com/wordoftheday/"
YESTERDAY=0
function print_error {
${ECHO} "Error: $@" >&2
}
function print_usage {
{
${ECHO} "Usage: ${THIS_PROG} [-hy]"
${ECHO} " -h Display this usage message"
${ECHO} " -y Get yesterdays word of the day"
} >&2
}
function cleanup {
${RM} -f ${OUTPUT_FILE}
}
trap 'cleanup; exit 1' 1 2 3 15
function check_url {
HTTP_CODE=$( ${CURL} -s -o /dev/null -w%{http_code} ${WOTD_URL} )
if [ "${HTTP_CODE}" -ne "200" ]; then
print_error "Unable to access ${WOTD_URL}"
fi
}
function get_url {
${CURL} ${WOTD_URL} >${OUTPUT_FILE} 2>/dev/null
}
function parse_html {
WOTD_SECTION=$( ${SED} -n '/span class=\"hw/,/SECBR -->/ p' ${OUTPUT_FILE} )
WOTD_WOTD=$( ${ECHO} "${WOTD_SECTION}" | ${SED} -n '/span class=\"hw/ s/^<span class=\"hw\">\([^>]*\)<.span>.*$/\1/p' )
WOTD_PRONOUNCE=$( ${ECHO} "${WOTD_SECTION}" | ${SED} -n '/span class=\"hw/ s#.*</span> \([^,]*\),.*$#\1#p' )
WOTD_TYPE=$( ${ECHO} "${WOTD_SECTION}" | ${SED} -n '/span class=\"hw/ s#^.*<i>\([^<]*\)</i>.*$#\1#p' )
WOTD_MEANINGS=$( ${ECHO} "${WOTD_SECTION}" | ${SED} -n -e '/^<!-- wotd=/,/<\/p>/ p' | ${SED} -e '1d' -e '$d' -e 's/<[^>]*>//g' )
}
function display_wotd {
${ECHO} "Word of the day: ${WOTD_WOTD}"
${ECHO} "Pronunciation: ${WOTD_PRONOUNCE}"
${ECHO} "Word type: ${WOTD_TYPE}"
${ECHO}
${ECHO} "This word means:"
${ECHO} "${WOTD_MEANINGS}"
}
while getopts ":hy" OPTION; do
case ${OPTION} in
"h") print_usage && exit 0 ;;
"y") YESTERDAY=1 ;;
* ) print_usage && exit 1 ;;
esac
done
shift $(( ${OPTIND} - 1 ))
if [ "$#" -ne "0" ]; then
print_usage && exit 1
fi
if [ "${YESTERDAY}" -gt "0" ]; then
TIMESTAMP=$( export TZ="America/New_York"; ${DATE} -d "yesterday" +"%Y/%m/%d" )
WOTD_URL="http://dictionary.reference.com/wordoftheday/archive/${TIMESTAMP}.html"
fi
check_url
get_url
parse_html
display_wotd
cleanup
exit 0