#!/bin/csh
# See nb.txt for documentation
# "nb" -- ver.1.6 (February 10, 2009)
# CUSTOMIZE THIS PART
set NB_PATH="/home/notify/nb/" # The full path where nb is located
set NB_MAIL="/usr/bin/mailx" # Email program for sending email
set NB_EMAIL="stephen@localhost" # Email address for alerts
set WGET="/usr/bin/wget" # /usr/bin - change path as needed
set GREP="/usr/bin/grep"
set AWK="/usr/bin/awk"
set UNIQ="/usr/bin/uniq"
set DIFF="/usr/bin/diff"
set WC="/usr/bin/wc"
set SORT="/bin/sort -dis" # /bin - change path as needed
set TOUCH="/bin/touch"
set CAT="/bin/cat"
set SED="/bin/sed"
# Email warnings/errors (1=on, 0=off)
set email_errors = 1 # Recommend always on
set email_warnings = 1 # Recommend on at first, turn off later. If getting
# too many warnings, change time of day script runs
# END CUSTOMIZE
setenv LANG en_US.UTF-8
setenv LC_COLLATE en_US.UTF-8
#Is there no argument?
if ($#argv != 1) then
echo ""
echo "Usage: /home/user/nb/nb /home/user/nb/nb.cfg"
echo ""
exit(1)
endif
#Does the cfg file exist?
if (! -f $argv[1]) then
echo ""
echo "Usage: /home/user/nb/nb /home/user/nb/nb.cfg"
echo ""
exit(1)
endif
set emailbody = $NB_PATH"emailbody.txt"
echo "LibraryThing New Books" > $emailbody
echo "" >> $emailbody
set newworksflag = 0
foreach authorname (`$CAT $argv[1]`)
set baseurl = `echo -n "http://www.librarything.com/author/" $authorname | $AWK '{printf("%s%s",$1,$2)}'`
set fullurl = `echo -n "http://www.librarything.com/author/" $authorname "&all=books" | $AWK '{printf("%s%s%s",$1,$2,$3)}'`
set newfilename = $NB_PATH`echo -n $authorname ".new" | $AWK '{printf("%s%s",$1,$2)}'`
set oldfilename = $NB_PATH`echo -n $authorname ".old" | $AWK '{printf("%s%s",$1,$2)}'`
set workfilename = $NB_PATH`echo -n $authorname ".htm" | $AWK '{printf("%s%s",$1,$2)}'`
# Get the HTML data and check for any error conditions
$WGET -q -O- $fullurl > $workfilename # get the source HTML from LT
set authornamefull = `$SED -n 's/.*
\(.*\)<\/title>.*/\1/ip;T;q' $workfilename | $AWK -F"|" '{print $1}'`
set numberofworks = `$GREP "/work/" $workfilename | $GREP "sectionContent" | $SED 's||\n|g' | $GREP "title=" | $WC -l`
# set numberofworks = `$GREP -c "/work/" $workfilename` # check HTML is ok
set highload = `$GREP -c "highload" $workfilename` # see if LT is under a "highload" condition
set tempdown = `$GREP -ic "Temporarily down" $workfilename` # see if LT is temporarily down"
set downtime = `$GREP -ic "downtime" $workfilename` # see if LT is temporarily down"
set failconn = `$GREP -ic "Failure to connect" $workfilename` # see if LT db is not responding
if ($numberofworks > 0 && $highload == 0 && $tempdown == 0 && $downtime == 0 && $failconn == 0) then # no error conditions
if(-f $newfilename) then # author already being tracked
mv $newfilename $oldfilename
else # author is new
$TOUCH $oldfilename
endif
# Create a sorted list of all works by author
$GREP "/work/" $workfilename | $GREP "sectionContent" | $SED 's||\n|g' | $GREP "title=" | $AWK -F"title=" '{printf "%s\n",$2}' | $AWK -F'[\"]' '{printf "%s\n",$2}' | $GREP '[^$]' | $SORT | $UNIQ | $SORT > $newfilename
# $GREP "/work/" $workfilename | $AWK -F"title=" '{printf "%s\n",$2}' | $AWK -F'[\"]' '{printf "%s\n",$2}' | $GREP '[^$]' | $SORT | $UNIQ | $SORT > $newfilename
# See how many new works have been added since last check
set numberofchanges = `$DIFF -bB $oldfilename $newfilename | $GREP ">" | $AWK -F">" '{print $2}' | $WC -l`
if ($numberofchanges > 0) then # format the email
set newworksflag = 1
echo "" >> $emailbody
echo `echo -n $numberofchanges "new work(s) for " $authornamefull \($authorname\) " "` >> $emailbody
$DIFF -bB $oldfilename $newfilename | $GREP ">" | $AWK -F">" '{printf ("%s\n",$2) }' | $SED 's/^[ \t]*//;s/[ \t]*$//' | $GREP '[^$]' | $AWK '{printf (" * %s\n",$0)}' >> $emailbody
echo $baseurl >> $emailbody
echo "" >> $emailbody
echo "" >> $emailbody
endif
else # HTML data is bad, or "highload" or "tempdown" or "failconn" condition
if ($numberofworks == 0 && $highload == 0 && $tempdown == 0 && $downtime == 0 && $failconn == 0 && $email_errors == 1) then # HTML is bad
set newworksflag = 1
echo "" >> $emailbody
echo "ERROR: Bad/unknown HTML ($workfilename) retrieved from $fullurl" >> $emailbody
else if ($highload > 0 && $email_warnings == 1) then # highload
set newworksflag = 1
echo "" >> $emailbody
echo "WARNING: LT reports High Load for $authorname - skipping for now $fullurl " >> $emailbody
else if ($tempdown > 0 && $email_warnings == 1) then # tempdown
set newworksflag = 1
echo "" >> $emailbody
echo "WARNING: LT reports Temp Down for $authorname - skipping for now $fullurl " >> $emailbody
else if ($downtime > 0 && $email_warnings == 1) then # downtime
set newworksflag = 1
echo "" >> $emailbody
echo "WARNING: LT reports Down Time for $authorname - skipping for now $fullurl " >> $emailbody
else if ($failconn > 0 && $email_warnings == 1) then # failconn
set newworksflag = 1
echo "" >> $emailbody
echo "WARNING: LT reports Failure to connect for $authorname - skipping for now $fullurl " >> $emailbody
endif
endif
end
# Email the results
if ($newworksflag == 1) then
$NB_MAIL -s "New Books at LibraryThing" -a $emailbody $NB_EMAIL < /dev/null
endif