Get under surveillance script: Difference between revisions
Jump to navigation
Jump to search
m (David moved page Available too to Get under surveillance script without leaving a redirect) |
m (Changed show length) |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
<pre> | <pre> | ||
#!/bin/ksh | #!/bin/ksh | ||
# | |||
# Quick-and-dirty Script to fetch the KXCI radio show Under Surveillance from | |||
# last Friday (available that Saturday). | |||
# | |||
# Works in ksh, bash, and probably others. | |||
# | |||
# Dependencies: awk, pv, figlet, wget, ffmpeg, mid3v2 | |||
# | |||
# by david, david@sidiprojects.us (0x5AFF330ADEFD0AE2C59E9C3DD7362C75283B6B3D) | |||
# 12 Mar 2022 | |||
# Licensed under WTFPL | |||
function do_exit_tasks { | |||
rm "${SAVEDIR}/${ORIGINAL_MANIFEST_NAME}" 2>/dev/null | |||
rm "${SAVEDIR}/${NEW_MANIFEST_NAME}" 2>/dev/null | |||
} | |||
trap do_exit_tasks EXIT | |||
function do_interrupt_tasks { | |||
read answer?"Erase the directory for this week's Under Surveillance (${SAVEDIR}) [y/N]?" | |||
[[ "${answer}" = "y" ]] && rm -rf "${SAVEDIR}" | |||
} | |||
trap do_interrupt_tasks SIGINT | |||
function write_line { | function write_line { | ||
TERMINAL_WIDTH=$(stty size | cut -d' ' -f2) | TERMINAL_WIDTH=$(stty size | cut -d' ' -f2) | ||
for ((j=0; j<$TERMINAL_WIDTH; j++)); do | for ((j=0; j<$TERMINAL_WIDTH; j++)); do | ||
echo -n "-" | echo -n "-" >&2 | ||
done | done | ||
echo | echo >&2 | ||
} | } | ||
function display_banner { | function display_banner { | ||
write_line; write_line | write_line; write_line | ||
echo Getting | echo Getting >&2 | ||
figlet -t "UNDER SURVEILLANCE" | figlet -t "UNDER SURVEILLANCE" >&2 | ||
echo for $(date -d "${DATE_TO_GET}" +%F) | echo for $(date -d "${DATE_TO_GET}" +%F) >&2 | ||
write_line; write_line | write_line; write_line | ||
} | } | ||
| Line 28: | Line 47: | ||
# MAIN FUNCTION | # MAIN FUNCTION | ||
[[ $(date +%A) = "Saturday" ]] && DATE_TO_GET="now" || DATE_TO_GET="last saturday" | |||
YEAR=$(date -d "${DATE_TO_GET}" +%Y) # full year (e.g., 2015) | YEAR=$(date -d "${DATE_TO_GET}" +%Y) # full year (e.g., 2015) | ||
MONTHNAME=$(date -d "${DATE_TO_GET}" +%b) # month abbrev. name (e.g., Oct) | MONTHNAME=$(date -d "${DATE_TO_GET}" +%b) # month abbrev. name (e.g., Oct) | ||
| Line 38: | Line 53: | ||
DAY=$(date -d "${DATE_TO_GET}" +%d) # day, with 2 digits (e.g., 31) | DAY=$(date -d "${DATE_TO_GET}" +%d) # day, with 2 digits (e.g., 31) | ||
SAVEDIR="${HOME}/Music/under_surveillance/${MONTHNAME}_${DAY}_${YEAR}" | SAVEDIR="${HOME}/Music/under_surveillance/${MONTHNAME}_${DAY}_${YEAR}" | ||
ORIGINAL_MANIFEST_NAME="index.m3u8" | |||
NEW_MANIFEST_NAME="newindex.m3u8" | |||
SHOW_LENGTH=336 | |||
if mkdir ${SAVEDIR} 2> /dev/null; then | if mkdir ${SAVEDIR} 2> /dev/null; then | ||
| Line 44: | Line 61: | ||
display_banner | display_banner | ||
else | else | ||
echo "Directory $SAVEDIR already exists. Exiting..." | echo "Directory $SAVEDIR already exists. Exiting..." >&2 | ||
exit 1 | exit 1 | ||
fi | fi | ||
remote_dirname="KXCI-${YEAR}${MONTH}${DAY}T050000Z" | |||
local_filename="Under-Surveillance_${DAY}-${MONTHNAME}-${YEAR}.mp3" | |||
echo -n "Getting manifest, cutting it down to size..." >&2 | |||
wget "https://ark2.spinitron.com/ark2/${remote_dirname}/index.m3u8" -O ${ORIGINAL_MANIFEST_NAME} >/dev/null 2>&1 | |||
awk ' | |||
/seg-'${SHOW_LENGTH}'-a1\.ts/ { | |||
done | print($0) | ||
FLAG=1 | |||
} | |||
FLAG { | |||
next | |||
} | |||
# fall-through case | |||
{ | |||
print($0) | |||
} | |||
END { | |||
print("#EXT-X-ENDLIST") | |||
}' \ | |||
./index.m3u8 > "${NEW_MANIFEST_NAME}" | |||
echo "done." | |||
# turn off buffering in ffmpeg and track progress | |||
ffmpeg -protocol_whitelist "file,tcp,tls,https" \ | |||
-i "${NEW_MANIFEST_NAME}" \ | |||
"${local_filename}" 2>&1 \ | |||
| stdbuf -i0 -o0 -e0 egrep -o 'seg-[[:digit:]].+\.ts' \ | |||
| stdbuf -i0 -o0 -e0 -- pv -eta --progress --name "Reading fragments" -l -s ${SHOW_LENGTH} - \ | |||
| cat >/dev/null | |||
mid3v2 \ | |||
--artist="Dave Wright, Falcotronik" \ | |||
--album="Under Surveillance" \ | |||
--genre="IDM Square-Dance and Atmospherics" \ | |||
--date=${YEAR}-${MONTH}-${DAY} \ | |||
--comment="Shout out as always to Armchair Lou and the Bimbos" \ | |||
${local_filename} | |||
echo "Enjoy /Under Surveillance/!" >&2 | |||
exit 0 | |||
</pre> | </pre> | ||
Latest revision as of 13:52, 11 March 2022
#!/bin/ksh
#
# Quick-and-dirty Script to fetch the KXCI radio show Under Surveillance from
# last Friday (available that Saturday).
#
# Works in ksh, bash, and probably others.
#
# Dependencies: awk, pv, figlet, wget, ffmpeg, mid3v2
#
# by david, david@sidiprojects.us (0x5AFF330ADEFD0AE2C59E9C3DD7362C75283B6B3D)
# 12 Mar 2022
# Licensed under WTFPL
function do_exit_tasks {
rm "${SAVEDIR}/${ORIGINAL_MANIFEST_NAME}" 2>/dev/null
rm "${SAVEDIR}/${NEW_MANIFEST_NAME}" 2>/dev/null
}
trap do_exit_tasks EXIT
function do_interrupt_tasks {
read answer?"Erase the directory for this week's Under Surveillance (${SAVEDIR}) [y/N]?"
[[ "${answer}" = "y" ]] && rm -rf "${SAVEDIR}"
}
trap do_interrupt_tasks SIGINT
function write_line {
TERMINAL_WIDTH=$(stty size | cut -d' ' -f2)
for ((j=0; j<$TERMINAL_WIDTH; j++)); do
echo -n "-" >&2
done
echo >&2
}
function display_banner {
write_line; write_line
echo Getting >&2
figlet -t "UNDER SURVEILLANCE" >&2
echo for $(date -d "${DATE_TO_GET}" +%F) >&2
write_line; write_line
}
# MAIN FUNCTION
[[ $(date +%A) = "Saturday" ]] && DATE_TO_GET="now" || DATE_TO_GET="last saturday"
YEAR=$(date -d "${DATE_TO_GET}" +%Y) # full year (e.g., 2015)
MONTHNAME=$(date -d "${DATE_TO_GET}" +%b) # month abbrev. name (e.g., Oct)
MONTH=$(date -d "${DATE_TO_GET}" +%m) # month number (e.g., 10)
DAY=$(date -d "${DATE_TO_GET}" +%d) # day, with 2 digits (e.g., 31)
SAVEDIR="${HOME}/Music/under_surveillance/${MONTHNAME}_${DAY}_${YEAR}"
ORIGINAL_MANIFEST_NAME="index.m3u8"
NEW_MANIFEST_NAME="newindex.m3u8"
SHOW_LENGTH=336
if mkdir ${SAVEDIR} 2> /dev/null; then
cd $SAVEDIR
display_banner
else
echo "Directory $SAVEDIR already exists. Exiting..." >&2
exit 1
fi
remote_dirname="KXCI-${YEAR}${MONTH}${DAY}T050000Z"
local_filename="Under-Surveillance_${DAY}-${MONTHNAME}-${YEAR}.mp3"
echo -n "Getting manifest, cutting it down to size..." >&2
wget "https://ark2.spinitron.com/ark2/${remote_dirname}/index.m3u8" -O ${ORIGINAL_MANIFEST_NAME} >/dev/null 2>&1
awk '
/seg-'${SHOW_LENGTH}'-a1\.ts/ {
print($0)
FLAG=1
}
FLAG {
next
}
# fall-through case
{
print($0)
}
END {
print("#EXT-X-ENDLIST")
}' \
./index.m3u8 > "${NEW_MANIFEST_NAME}"
echo "done."
# turn off buffering in ffmpeg and track progress
ffmpeg -protocol_whitelist "file,tcp,tls,https" \
-i "${NEW_MANIFEST_NAME}" \
"${local_filename}" 2>&1 \
| stdbuf -i0 -o0 -e0 egrep -o 'seg-[[:digit:]].+\.ts' \
| stdbuf -i0 -o0 -e0 -- pv -eta --progress --name "Reading fragments" -l -s ${SHOW_LENGTH} - \
| cat >/dev/null
mid3v2 \
--artist="Dave Wright, Falcotronik" \
--album="Under Surveillance" \
--genre="IDM Square-Dance and Atmospherics" \
--date=${YEAR}-${MONTH}-${DAY} \
--comment="Shout out as always to Armchair Lou and the Bimbos" \
${local_filename}
echo "Enjoy /Under Surveillance/!" >&2
exit 0