You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.5 KiB
192 lines
5.5 KiB
#!/bin/bash
|
|
|
|
# MSRP:
|
|
# Pi 4B 8GB - $75
|
|
# Pi 4B 4GB - $55
|
|
# Pi 4B 2GB - $35
|
|
# Pi 4B 1GB - $35
|
|
# Pi 3B+ - $35
|
|
# Pi ZeroW - $10
|
|
# Pi ZeroWH - $16
|
|
# Pi Zero - $5
|
|
|
|
# CRON:
|
|
# m h dom mon dow command
|
|
#*/2 * * * * /home/cave/scripts/picheck-sms --show-cm --hide zebra
|
|
# The --hide zebra is only there to show all results since this is really hacked together
|
|
|
|
url="https://rpilocator.com"
|
|
|
|
sms_account="YOUR_TWILIO_ACCOUNT_ID"
|
|
sms_key="YOUR_TWILIO_API_KEY"
|
|
sms_userauth="${sms_account}:${sms_key}"
|
|
|
|
sms_to="YOUR_PHONE_NUMBER"
|
|
sms_from="YOUR_TWILIO_NUMBER"
|
|
sms_body=""
|
|
|
|
|
|
|
|
if [[ "$@" == *"--help"* ]]; then
|
|
echo "halp"
|
|
exit 0
|
|
elif [[ "$@" == *"--url"* ]]; then
|
|
echo $url && exit 0
|
|
fi
|
|
|
|
|
|
antispam=~/pichecksms-sent
|
|
minute=`date +%M`
|
|
[[ $minute -eq 0 && -f $antispam ]] && echo "removing $antispam" >> ~/pisms.log && rm $antispam
|
|
[ -f $antispam ] && _minute=`cat $antispam`
|
|
let mindiff=minute-_minute
|
|
[[ $mindiff -le 5 && -f $antispam ]] || rm $antispam
|
|
echo "Checking [`date`]" >> ~/pisms.log
|
|
|
|
tdir=`mktemp -d`
|
|
tfile=pidata.txt
|
|
# Hide all CM4 results (1) or show (0)
|
|
hidecm=1 # Default behavior
|
|
region="US"
|
|
[[ "$@" == *"--hide-cm"* ]] && hidecm=1
|
|
[[ "$@" == *"--show-cm"* ]] && hidecm=0
|
|
|
|
[ $hidecm -eq 1 ] && hidestr="cm" || hidestr=""
|
|
if [[ "$@" == *"--hide"* ]]; then
|
|
findme="--hide";gotit=0
|
|
for i in $@; do
|
|
if [ $gotit -eq 1 ]; then
|
|
[[ $i == "--"* ]] && echo "${bld}${red}Invalid value for --hide: ${rst}${red}${i}${rst}" && exit 1
|
|
[ -z $hidestr ] && hidestr=$i || hidestr="${hidestr}|${i}"
|
|
gotit=0
|
|
fi
|
|
[[ $i == "$findme" ]] && gotit=1
|
|
done
|
|
[ $gotit -eq 1 ] && echo "${bld}${red}Missing value for ${rst}${red}--hide${rst}" && exit 1
|
|
fi
|
|
|
|
delim='|'
|
|
num=1
|
|
pseudoarray=()
|
|
edata=''
|
|
today=`date +%d-%b-%y`
|
|
nonday=0
|
|
nondayoffset=2
|
|
|
|
function extract() {
|
|
edata=''
|
|
offset=${4:-0}
|
|
let f2=${offset}+2
|
|
edata=`echo "$1" | cut -d${2} -f${f2} | cut -d${3} -f1`
|
|
}
|
|
|
|
function goodprice () {
|
|
_cprice=`echo $cprice | cut -d. -f1`
|
|
[[ `echo $cmodel | grep "4B 1GB"` && $_cprice -gt 35 ]] && gprice=0
|
|
[[ `echo $cmodel | grep "4B 2GB"` && $_cprice -gt 35 ]] && gprice=0
|
|
[[ `echo $cmodel | grep "4B 4GB"` && $_cprice -gt 55 ]] && gprice=0
|
|
[[ `echo $cmodel | grep "4B 8GB"` && $_cprice -gt 75 ]] && gprice=0
|
|
[[ `echo $cmodel | grep "Zero2W"` && $_cprice -gt 15 ]] && gprice=0
|
|
# [[ `echo $cmodel | grep "4B 4GB"` && $_cprice -gt 55 ]] && gprice=0
|
|
[[ `echo $cmodel | grep "CM4"` ]] && gprice=2
|
|
}
|
|
|
|
# Lines:
|
|
# 1: "table success" lol
|
|
# 2: SKU
|
|
# 3: Description
|
|
# 4: Link
|
|
# 5: Last updated
|
|
# 6: Retailer
|
|
# 7: In stock
|
|
# 8: Last Stock
|
|
# 9: Price
|
|
# Array: (2,3,5,6,8,9)
|
|
|
|
waitingmsg="Retrieving data..."
|
|
[ $hidecm -eq 1 ] && waitingmsg="$waitingmsg (Hiding `echo $hidestr` results)"
|
|
echo -n "$waitingmsg"
|
|
curl $url 2>/dev/null| grep -A8 -i "table-success" > $tdir/$tfile
|
|
tput el1
|
|
tput cub ${#waitingmsg}
|
|
|
|
array=''
|
|
while read -r line; do
|
|
if [[ $line == "--" ]]; then
|
|
num=1
|
|
array=`echo "$array" | cut -c2-`
|
|
# https://linuxhint.com/bash_append_array/
|
|
pseudoarray[${#pseudoarray[@]}]=$array
|
|
array=''
|
|
continue
|
|
fi
|
|
[[ $num -eq 1 || $num -eq 4 || $num -eq 7 ]] && let num=num+1 && continue
|
|
[ $num -eq 9 ] && extract "$line" '>' '<' 1 || extract "$line" '>' '<'
|
|
edata=`echo $edata | sed "s/ RAM//g;s/Raspberry Pi/RPi/g;s/Zero /Zero/g;s/ W/W/g;s/ Model //g;s/ -//g;s/ MMC/MMC/g;s/, / /g;s/min\./min/g;s/WithWifi/w\/wifi/g;s/RPi/Pi/g;s/Pi CM4/CM4/g"`
|
|
array="${array}${delim}${edata}"
|
|
if [[ $num -eq 8 && "$edata" != "$today" ]]; then
|
|
nonday=1
|
|
fi
|
|
let num=num+1
|
|
done <$tdir/$tfile
|
|
|
|
array=`echo "$array" | cut -c2-`
|
|
# https://linuxhint.com/bash_append_array/
|
|
pseudoarray[${#pseudoarray[@]}]=$array
|
|
|
|
rm -rf $tdir
|
|
|
|
checkval=0
|
|
for checkdata in "${pseudoarray[@]}"; do
|
|
# https://stackoverflow.com/a/44109240/18499418
|
|
[[ "${checkdata,,}" != *"(${region,,})"* ]] && continue
|
|
[[ "${checkdata,,}" =~ ${hidestr,,} ]] || checkval=1
|
|
done
|
|
[ $checkval -eq 0 ] && echo "No results found for the given filters (ex: $hidestr) in the given region (${region})." >> ~/pisms.log && exit 2
|
|
|
|
#head=('SKU' 'Description' 'Last Checked' 'Retailer' 'Last Checked' 'Price')
|
|
cmodel=''
|
|
cprice=''
|
|
sms_string=""
|
|
for adata in "${pseudoarray[@]}"; do
|
|
[[ "${adata,,}" != *"(${region,,})"* ]] && continue
|
|
[[ "${adata,,}" =~ ${hidestr,,} ]] && continue
|
|
gprice=1
|
|
for i in `seq 1 ${#widths[@]}`; do
|
|
[ $i -ge ${#widths[@]} ] && continue
|
|
[[ $i -eq 4 && $nonday -eq 0 ]] && continue
|
|
let j=i+1
|
|
mdata=`echo -en "$adata" | cut -d"$delim" -f$j`
|
|
[ $i -eq 1 ] && cmodel=$mdata
|
|
[ $i -eq 5 ] && cprice=$mdata && goodprice
|
|
done
|
|
if [ $gprice -eq 1 ]; then
|
|
if [ -z "$sms_string" ]; then
|
|
sms_string="`echo $adata | awk -F'|' '{print $2,"at",$4,"for",$6}'`"
|
|
else
|
|
sms_string="${sms_string} / `echo $adata | awk -F'|' '{print $2,"at",$4,"for",$6}'`"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
minute=`date +%M`
|
|
[ $minute -eq 0 ] && rm $antispam
|
|
|
|
[ -f $antispam ] && _minute=`cat $antispam`
|
|
let mindiff=minute-_minute
|
|
[[ $mindiff -le 5 && -f $antispam ]] && echo "antispam-exit" >> ~/pisms.log && exit 3
|
|
|
|
smsdate=`TZ='America/New_York' date +%I:%M%_P`
|
|
|
|
echo $minute > $antispam
|
|
|
|
echo -e $sms_string
|
|
sms_body="[${smsdate}] ${sms_string}"
|
|
sms_response=`curl -X POST https://api.twilio.com/2010-04-01/Accounts/${sms_account}/Messages.json --data-urlencode "Body=${sms_body}" --data-urlencode "From=${sms_from}" --data-urlencode "To=${sms_to}" -u ${sms_userauth} 2>/dev/null`
|
|
|
|
|
|
echo -e "___________________________________________________________\n" >> ~/pisms.log
|
|
echo "$sms_body" >> ~/pisms.log
|
|
echo "$sms_response" >> ~/pisms.log
|
|
echo -e "___________________________________________________________\n" >> ~/pisms.log
|