pi-scripts/fcc
2025-07-26 12:06:32 -05:00

188 lines
4.3 KiB
Bash

#!/bin/bash
#FCC Database Lookup Offline
#11JULY2025 km4ack
#26JULY2025 last edit
#script will download the FCC amateur database of call signs
#allowing to user to access the info offline
#Script can be automated using crontab to download the database
#Hint: 0 6 * * * /path/to/file/fcc download
#version 3 changes:
#add grid square lookup if data file available
#version 2 changes:
#add logging to mylog.txt
#add verbose option. usage: fcc <call sign> -v
#add logic if call not found
CALL=$1
dir=$HOME/.local/share/fcc_database/
dl=${dir}dl_date
AM=${dir}AM.dat
EN=${dir}EN.dat
today=$(date +%d-%b-%Y)
mylog=$HOME/Documents/mylog.txt
version=3.0
declare -u CALL=${CALL}
if [ -f ${dl} ]; then
source ${dl}
fi
PURGE(){
if [ -d ${dir}old ]; then
echo "purging old DB files"
rm -rf ${dir}old
echo "purge complete"
exit
else
echo "no old db files found"
exit
fi
}
DOWNLOAD(){
mkdir -p ${dir}
echo "downloading"
cd ${dir}
mkdir -p old
mv * ./old/
wget -U "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" https://data.fcc.gov/download/pub/uls/complete/l_amat.zip
echo "extracting contents from zip file"
unzip l_amat.zip
rm l_amat.zip
rm CO.dat counts HD.dat HS.dat LA.dat SC.dat SF.dat
echo last_download=${today} > ${dl}
echo `date` " FCC Download" >> ${mylog}
echo;echo
echo "usage:"
echo "fcc <call sign> #get data for <call sign>"
echo "fcc download #download latest database"
echo "fcc purge #purge old archives"
exit
}
OUTPUT(){
if [ -z "${en_result}" ] && [ -z "${am_result}" ]; then
clear;echo
echo "-------------------------------"
echo "FCC Offline Database Tool v${version}"
echo "Database downloaded ${last_download}"
echo "-------------------------------"
echo;echo "Call not found";echo
read -p "Call sign or q to quit: " CALL
if [ "${CALL}" = "q" ] || [ ${CALL} = "Q" ]; then
echo "Station QRT, 73!"
exit
fi
LOOKUP
else
clear;echo
echo "-------------------------------"
echo "FCC Offline Database Tool v${version}"
echo "Database downloaded ${last_download}"
echo "-------------------------------"
echo ${CALL}
echo "${name}"
echo "${full_class} class"
echo ${street}
echo "${city}, ${state} ${zip}"
if [ -n "${grid}" ]; then
echo "${grid}"
fi
if [ ${CALL} = "KM4ACK" ]; then
echo "https://www.youtube.com/@KM4ACK"
fi
echo
read -p "Call sign or (q)uit (v)erbose: " ans
if [ "${ans}" = "q" ] || [ ${ans} = "Q" ]; then
echo "Station QRT, 73!"
exit
fi
if [ "${ans}" = "v" ] || [ ${ans} = "V" ]; then
VERBOSE
else
CALL=${ans}
fi
LOOKUP
fi
}
LOOKUP(){
am_result=$(grep -iw ${CALL} ${AM} | tail -1)
en_result=$(grep -iw ${CALL} ${EN} | tail -1)
class=$(echo ${am_result} | awk -F "|" '{print $6}')
case ${class} in
T)
full_class=Technician;;
G)
full_class=General;;
E)
full_class=Extra;;
*)
full_class=unknown;;
esac
name=$(echo ${en_result} | awk -F "|" '{print $8}')
street=$(echo ${en_result} | awk -F "|" '{print $16}')
city=$(echo ${en_result} | awk -F "|" '{print $17}')
state=$(echo ${en_result} | awk -F "|" '{print $18}')
zip=$(echo ${en_result} | awk -F "|" '{print $19}' | cut -b1-5)
if [ -d $HOME/bin/grid-lookup ]; then
grid=$($HOME/bin/grid-lookup/grid-lookup ${zip})
fi
OUTPUT
}
VERBOSE(){
clear;echo
echo "-------------------------------"
echo "FCC Offline Database Tool v${version}"
echo "Database downloaded ${last_download}"
echo "-------------------------------"
echo "***VERBOSE RESULTS***"
echo "---------------------"
grep -iw ${CALL} ${AM}
echo "----------------------------------------"
grep -iw ${CALL} ${EN}
echo;echo "END OF RESULTS"
echo;read -n 1 -s -r -p "Press any key to continue"
LOOKUP
}
if [ -z $1 ]; then
echo "usage:"
echo "fcc <call sign> #get data for <call sign>"
echo "fcc download #download latest database"
echo "fcc purge #purge old archives"
exit 1
fi
if [ $1 = "download" ]; then
DOWNLOAD
fi
if [ $1 = "purge" ]; then
PURGE
fi
if [ -z $2 ]; then
echo "fetching data"
else
if [ $2 = "-v" ]; then
VERBOSE
fi
fi
if [ ! -d ${dir} ]; then
echo "ERROR::Database not found!"
echo "Download FCC database with:"
echo "fcc download"
exit 1
fi
LOOKUP