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

#!/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