Onto the recent Korn Shell Spreadsheet Hyperlink Listener Tutorial‘s …
- talent to read Spreadsheet files and extract hyperlink data … today, we add to the talents, the …
- talent to read PDF files and extract hyperlink data
… being as a lot of us are downloading PDF files on a pretty regular basis.
We figure there’s not enough, of complexity, to worry about here that we can’t incorporate the new “talents” into the previous lookforhyperlinks.ksh Korn Shell code suited to macOS users …
#!/bin/ksh
# lookforhyperlinks.ksh
# RJM Programming
# February, 2023
# Look for hyperlinks in downloaded Spreadsheets
# crontab usage supply an additional argument (onto a first emailee argument, perhaps) ... or to do as a one off execution usage
# Thanks to ...
# https://www.unix.com/unix-for-dummies-questions-and-answers/123644-converting-binary-file-readable-format-ksh.html
# https://stackoverflow.com/questions/26968159/list-of-files-modified-1-hour-before
# https://www.unix.com/shell-programming-and-scripting/247464-awk-combined-if.html
# https://stackoverflow.com/questions/296536/how-to-urlencode-data-for-curl-command
modeopencurl="open";
one="1";
two="2";
qt="\"";
emailto="";
if [ ! -z "$1" ]; then
if [ "`echo $1`" == "curl" ]; then
modeopencurl="curl";
shift;
fi
fi
if [ ! -z "$1" ]; then
if [ "`echo $1 | tr '@' 'x'`" != "`echo $1`" ]; then
emailto="$1";
shift;
fi
fi
while test "$one" -ne "$two" ; do
axls=`find $HOME/Downloads -name "*.[xXpP][lLdD][sSfF]*" -type f -mmin 1`;
if [ ! -z "$axls" ]; then
if [ "`echo $axls | sed -e 's/f$//g' | sed -e 's/F$//g'`" = "`echo $axls`" ]; then
res=`hexdump -C "${axls}" | sed '/[.][|][.]/s//.!@!./g' | cut -f2 -d '|' | sed '/[.][!][@][!][.]/s//.|./g' | tr -d '\n' | sed -e 's/=.s.a.y./=.S.a.Y./g' | tr -d "'" | cut -d':' -f 2- | grep '.h.t.t.p.' | sed '/[.][.][.][.]/s//>/g' | sed '/[%][.]2[.]0/s//"/g' | awk -F'.h.t.t.p.' '{for(i=2;i<=NF;i++){if($i){split($i,a,">");print "http" a[1] "@";}}}' | sed '/[.][.]/s//.>/g' | sed '/[.]/s///g' | sed '/[>]/s//./g' | sed '/\_record\.php\?docronwork\=\@/s//SaY/g' | sed '/[@]/s//";\n/g'`
else
res=`hexdump -C "${axls}" | sed '/[.][|][.]/s//.!@!./g' | cut -f2 -d '|' | sed '/[.][!][@][!][.]/s//.|./g' | tr -d '\n' | sed -e 's/=.s.a.y./=.S.a.Y./g' | tr -d "'" | cut -d':' -f 2- | grep '.http' | sed '/[.][.][.][.]/s//>/g' | sed '/[%][.]2[.]0/s//"/g' | awk -F'.http' '{for(i=2;i<=NF;i++){if($i){split($i,a,">");print "http" a[1] "@";}}}' | sed '/[.][.]/s//.>/g' | sed '/[.]/s///g' | sed '/[>]/s//./g' | sed '/\_record\.php\?docronwork\=\@/s//SaY/g' | sed '/[@]/s//";\n/g'`
fi
if [ ! -z "$res" ]; then
if [ -z "$1" -a -z "$emailto" ]; then
if [ "$modeopencurl" = "curl" ]; then
echo $res | sed -e 's/ http/"; \ncurl "http/g' | awk 'NR==1,/http/{sub(/http/, "curl \"http")} 1' | sed -e 's/";";"/";/g' | sed -e 's/";";"/";/g' | sed -e 's/"";/";/g' | sed -e 's/";";/";/g' > /tmp/ideatwo.ksh
else
echo $res | sed -e 's/ http/"; \nopen "http/g' | awk 'NR==1,/http/{sub(/http/, "open \"http")} 1' | sed -e 's/";";"/";/g' | sed -e 's/";";"/";/g' | sed -e 's/"";/";/g' | sed -e 's/";";/";/g' > /tmp/ideatwo.ksh
fi
ksh /tmp/ideatwo.ksh &
else
if [ ! -z "$emailto" ]; then # no -e 's/=/%3d/g' below
echo $res | sed -e 's/";";\n/\n/g' | sed -e 's/";\n/\n/g' | sed -e 's/</%3c/g' -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b%0a%0a/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' > /tmp/ideatwo.ksh
bxls=`echo "$axls" | sed -e 's/</%3c/g' -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b%0a%0a/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' | tr -d '$'`
# restwo=`echo $res | sed '/"/s//@/g' | sed "/@/s//'/g"`
#cat /tmp/idea.ksh | mailx -s "Proposed macos say audio ideas ..." $1;
open "mailto:${emailto}?subject=Proposed%20hyperlinks%20in%20downloaded%20spreadsheet%20`echo ${bxls}`%20...&body=`cat /tmp/ideatwo.ksh`"
if [ "$modeopencurl" = "curl" ]; then
echo $res | sed -e 's/ http/"; \ncurl "http/g' | awk 'NR==1,/http/{sub(/http/, "curl \"http")} 1' | sed -e 's/";";"/";/g' | sed -e 's/";";"/";/g' | sed -e 's/"";/";/g' | sed -e 's/";";/";/g' > /tmp/ideatwo.ksh
else
echo $res | sed -e 's/ http/"; \nopen "http/g' | awk 'NR==1,/http/{sub(/http/, "open \"http")} 1' | sed -e 's/";";"/";/g' | sed -e 's/";";"/";/g' | sed -e 's/"";/";/g' | sed -e 's/";";/";/g' > /tmp/ideatwo.ksh
fi
else
if [ "$modeopencurl" = "curl" ]; then
echo $res | sed -e 's/ http/"; \ncurl "http/g' | awk 'NR==1,/http/{sub(/http/, "curl \"http")} 1' | sed -e 's/";";"/";/g' > /tmp/ideatwo.ksh
else
echo $res | sed -e 's/ http/"; \nopen "http/g' | awk 'NR==1,/http/{sub(/http/, "open \"http")} 1' | sed -e 's/";";"/";/g' > /tmp/ideatwo.ksh
fi
ksh /tmp/ideatwo.ksh &
fi
fi
fi
fi
if [ -z "$1" ]; then
sleep 60
else
two=$one
fi
done
exit
Previous relevant Korn Shell Spreadsheet Hyperlink Listener Tutorial is shown below.
We want to build on the “listener” thoughts of yesterday’s Perl CGI Spreadsheet Download Detector Tutorial‘s …
- Korn Shell based “listener” of macOS Spreadsheet download “say” audio hyperlinks … to genericize, today, with …
- Korn Shell based “listener” of macOS Spreadsheet download with any hyperlink URL for any downloaded Spreadsheet
… as a product feeling more like a tool.
Yesterday’s work, with all the help, thanks, gave us a good framework to tweak, further, a scheduled and interactive combination of modes of use, used in Korn Shell lookforhyperlinks.ksh …
#!/bin/ksh
# lookforhyperlinks.ksh
# RJM Programming
# February, 2023
# Look for hyperlinks in downloaded Spreadsheets
# crontab usage supply an additional argument (onto a first emailee argument, perhaps) ... or to do as a one off execution usage
# Thanks to ...
# https://www.unix.com/unix-for-dummies-questions-and-answers/123644-converting-binary-file-readable-format-ksh.html
# https://stackoverflow.com/questions/26968159/list-of-files-modified-1-hour-before
# https://www.unix.com/shell-programming-and-scripting/247464-awk-combined-if.html
# https://stackoverflow.com/questions/296536/how-to-urlencode-data-for-curl-command
modeopencurl="open";
one="1";
two="2";
qt="\"";
emailto="";
if [ ! -z "$1" ]; then
if [ "`echo $1`" == "curl" ]; then
modeopencurl="curl";
shift;
fi
fi
if [ ! -z "$1" ]; then
if [ "`echo $1 | tr '@' 'x'`" != "`echo $1`" ]; then
emailto="$1";
shift;
fi
fi
while test "$one" -ne "$two" ; do
axls=`find $HOME/Downloads -name "*.xls*" -type f -mmin 1`;
if [ ! -z "$axls" ]; then
res=`hexdump -C "${axls}" | sed '/[.][|][.]/s//.!@!./g' | cut -f2 -d '|' | sed '/[.][!][@][!][.]/s//.|./g' | tr -d '\n' | sed -e 's/=.s.a.y./=.S.a.Y./g' | tr -d "'" | cut -d':' -f 2- | grep '.h.t.t.p.' | sed '/[.][.][.][.]/s//~/g' | sed '/[%][.]2[.]0/s//"/g' | awk -F'.h.t.t.p.' '{for(i=2;i<=NF;i++){if($i){split($i,a,"~");print "http" a[1] "@";}}}' | sed '/[.][.]/s//.~/g' | sed '/[.]/s///g' | sed '/[~]/s//./g' | sed '/\_record\.php\?docronwork\=\@/s//SaY/g' | sed '/[@]/s//";\n/g'`
if [ ! -z "$res" ]; then
if [ -z "$1" -a -z "$emailto" ]; then
if [ "$modeopencurl" = "curl" ]; then
echo $res | sed -e 's/ http/"; \ncurl "http/g' | awk 'NR==1,/http/{sub(/http/, "curl \"http")} 1' | sed -e 's/";";"/;"/g' > /tmp/ideatwo.ksh
else
echo $res | sed -e 's/ http/"; \nopen "http/g' | awk 'NR==1,/http/{sub(/http/, "open \"http")} 1' | sed -e 's/";";"/;"/g' > /tmp/ideatwo.ksh
fi
ksh /tmp/ideatwo.ksh &
else
if [ ! -z "$emailto" ]; then # no -e 's/=/%3d/g' below
echo $res | sed -e 's/";";\n/\n/g' | sed -e 's/";\n/\n/g' | sed -e 's/</%3c/g' -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b%0a%0a/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' > /tmp/ideatwo.ksh
bxls=`echo "$axls" | sed -e 's/</%3c/g' -e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' -e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' -e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' -e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b%0a%0a/g' -e 's//%3e/g' -e 's/?/%3f/g' -e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' -e 's/_/%5f/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g' | tr -d '$'`
# restwo=`echo $res | sed '/"/s//@/g' | sed "/@/s//'/g"`
#cat /tmp/idea.ksh | mailx -s "Proposed macos say audio ideas ..." $1;
open "mailto:${emailto}?subject=Proposed%20hyperlinks%20in%20downloaded%20spreadsheet%20`echo ${bxls}`%20...&body=`cat /tmp/ideatwo.ksh`"
if [ "$modeopencurl" = "curl" ]; then
echo $res | sed -e 's/ http/"; \ncurl "http/g' | awk 'NR==1,/http/{sub(/http/, "curl \"http")} 1' | sed -e 's/";";"/;"/g' > /tmp/ideatwo.ksh
else
echo $res | sed -e 's/ http/"; \nopen "http/g' | awk 'NR==1,/http/{sub(/http/, "open \"http")} 1' | sed -e 's/";";"/;"/g' > /tmp/ideatwo.ksh
fi
else
if [ "$modeopencurl" = "curl" ]; then
echo $res | sed -e 's/ http/"; \ncurl "http/g' | awk 'NR==1,/http/{sub(/http/, "curl \"http")} 1' | sed -e 's/";";"/;"/g' > /tmp/ideatwo.ksh
else
echo $res | sed -e 's/ http/"; \nopen "http/g' | awk 'NR==1,/http/{sub(/http/, "open \"http")} 1' | sed -e 's/";";"/;"/g' > /tmp/ideatwo.ksh
fi
ksh /tmp/ideatwo.ksh &
fi
fi
fi
fi
if [ -z "$1" ]; then
sleep 60
else
two=$one
fi
done
exit
… usable for macOS command “verbs” open or curl …
Interactive continuous open URL |
Interactive continuous in background curl URL |
Interactive continuous emailing in background open URL |
Scheduled audio curl URL |
Scheduled audio open URL |
---|---|---|---|---|
ksh ./lookforhyperlinks.ksh | ksh ./lookforhyperlinks.ksh curl & | ksh ./lookforhyperlinks.ksh rmetcalfe15@gmail.com & | * * * * * ksh ./lookforhyperlinks.ksh curl | * * * * * ksh ./lookforhyperlinks.ksh rmetcalfe15@gmail.com |
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.