261 lines
9.1 KiB
Bash
261 lines
9.1 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
# Copyright Ken Fallon - Released into the public domain. http://creativecommons.org/publicdomain/
|
||
|
#============================================================
|
||
|
source /home/ken/tmp/pip3.9/bin/activate
|
||
|
PATH=$PATH:/home/ken/sourcecode/hpr/hpr_hub/bin/
|
||
|
|
||
|
processing_dir="/home/ken/tmp/hpr/processing"
|
||
|
git_image_dir="/home/ken/sourcecode/hpr/HPR_Public_Code/www/images/hosts"
|
||
|
echo "Processing the next HPR Show in the queue"
|
||
|
|
||
|
###################
|
||
|
# Get the show
|
||
|
#
|
||
|
#
|
||
|
response=$( curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" | \
|
||
|
grep 'METADATA_PROCESSED' | \
|
||
|
head -1 | \
|
||
|
sed 's/,/ /g' )
|
||
|
|
||
|
if [ -z "${response}" ]
|
||
|
then
|
||
|
echo "INFO: There appear to be no more shows with the status \"METADATA_PROCESSED\"."
|
||
|
echo "Getting a list of all the reservations."
|
||
|
curl --silent --netrc-file ${HOME}/.netrc "https://hub.hackerpublicradio.org/cms/status.php" | sort -n
|
||
|
exit 3
|
||
|
fi
|
||
|
|
||
|
timestamp_epoc="$( echo ${response} | awk '{print $1}' )"
|
||
|
ep_num="$( echo ${response} | awk '{print $2}' )"
|
||
|
ep_date="$( echo ${response} | awk '{print $3}' )"
|
||
|
key="$( echo ${response} | awk '{print $4}' )"
|
||
|
status="$( echo ${response} | awk '{print $5}' )"
|
||
|
email="$( echo ${response} | awk '{print $6}' )"
|
||
|
email_unpadded="$( echo $email | sed 's/.nospam@nospam./@/g' )"
|
||
|
|
||
|
upload_dir="/home/hpr/upload/${timestamp_epoc}_${ep_num}_${ep_date}_${key}"
|
||
|
source_dir="hpr:${upload_dir}"
|
||
|
dest_dir="${timestamp_epoc}_${ep_num}_${ep_date}_${key}"
|
||
|
|
||
|
ssh hpr -t "detox -v ${upload_dir}/"
|
||
|
|
||
|
echo "INFO: Downloading hpr${ep_num} from ${email_unpadded}"
|
||
|
echo ""
|
||
|
echo rsync -ave ssh --partial --progress ${source_dir}/ ${processing_dir}/${dest_dir}/
|
||
|
rsync -ave ssh --partial --progress ${source_dir}/ ${processing_dir}/${dest_dir}/
|
||
|
echo ""
|
||
|
echo "INFO: Working directory is \"${processing_dir}/${dest_dir}/\""
|
||
|
echo ""
|
||
|
|
||
|
shownotes_json="${processing_dir}/${dest_dir}/shownotes.json"
|
||
|
|
||
|
if [ ! -s "${shownotes_json}" ]
|
||
|
then
|
||
|
echo "ERROR: \"${shownotes_json}\" is missing"
|
||
|
exit 2
|
||
|
fi
|
||
|
|
||
|
if [ "$( file "${shownotes_json}" | grep -ic "text" )" -eq 0 ]
|
||
|
then
|
||
|
echo "ERROR: \"${shownotes_json}\" is not a text file"
|
||
|
exit 3
|
||
|
fi
|
||
|
|
||
|
|
||
|
jq '.' "${shownotes_json}" | sponge "${shownotes_json}"
|
||
|
|
||
|
###################
|
||
|
# Get the media
|
||
|
#
|
||
|
|
||
|
remote_media="$( jq --raw-output '.metadata.POST.url' "${processing_dir}/${dest_dir}/shownotes.json" )"
|
||
|
|
||
|
if [ -n "${remote_media}" ]
|
||
|
then
|
||
|
echo "INFO: Fetching remote media from \"${remote_media}\""
|
||
|
wget --timestamping --directory-prefix="${processing_dir}/${dest_dir}/" "${remote_media}"
|
||
|
if [ $? -ne 0 ]
|
||
|
then
|
||
|
echo "ERROR: Could not get the remote media"
|
||
|
exit 5
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
shownotes_html="${processing_dir}/${dest_dir}/shownotes.html"
|
||
|
if [ ! -s "${shownotes_html}" ]
|
||
|
then
|
||
|
echo "ERROR: \"${shownotes_html}\" is missing"
|
||
|
exit 4
|
||
|
fi
|
||
|
|
||
|
shownotes_txt="${processing_dir}/${dest_dir}/shownotes.txt"
|
||
|
if [ ! -s "${shownotes_txt}" ]
|
||
|
then
|
||
|
echo "ERROR: \"${shownotes_txt}\" is missing"
|
||
|
exit 7
|
||
|
fi
|
||
|
xdg-open "${shownotes_txt}" >/dev/null 2>&1 &
|
||
|
xdg-open "${shownotes_json}" >/dev/null 2>&1 &
|
||
|
xdg-open "${shownotes_html}" >/dev/null 2>&1 &
|
||
|
|
||
|
read -p "Does the metadata 'look ok ? (N|y) ? " -n 1 -r
|
||
|
echo # (optional) move to a new line
|
||
|
if [[ ! $REPLY =~ ^[yY]$ ]]
|
||
|
then
|
||
|
echo "skipping...."
|
||
|
exit 22
|
||
|
fi
|
||
|
|
||
|
media=$( find "${processing_dir}/${dest_dir}/" -type f -exec file {} \; | grep -Ei 'audio|mpeg|video|MP4' | awk -F ': ' '{print $1}' )
|
||
|
if [ -z "${media}" ]
|
||
|
then
|
||
|
echo "ERROR: Can't find any media in \"${processing_dir}/${dest_dir}/\""
|
||
|
find "${processing_dir}/${dest_dir}/" -type f
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
the_show_media=""
|
||
|
|
||
|
if [ "$( echo "${media}" | wc -l )" -ne 1 ]
|
||
|
then
|
||
|
echo "Multiple files found. Which one do you want to use ?"
|
||
|
select this_media in $( echo "${media}" )
|
||
|
do
|
||
|
echo "INFO: You selected \"${this_media}\"."
|
||
|
ls -al "${this_media}"
|
||
|
the_show_media="${this_media}"
|
||
|
break
|
||
|
done
|
||
|
else
|
||
|
echo "INFO: Selecting media as \"${media}\"."
|
||
|
the_show_media="${media}"
|
||
|
fi
|
||
|
|
||
|
duration=$( \date -ud "1970-01-01 $( ffprobe -i "${the_show_media}" 2>&1| awk -F ': |, ' '/Duration:/ { print $2 }' )" +%s )
|
||
|
|
||
|
###################
|
||
|
# Gather episode information
|
||
|
#
|
||
|
|
||
|
if [ "$( curl --silent --write-out '%{http_code}' http://hackerpublicradio.org/say.php?id=${ep_num} --output /dev/null )" == 200 ]
|
||
|
then
|
||
|
echo "ERROR: The Episode hpr${ep_num} has already been posted"
|
||
|
exit 6
|
||
|
fi
|
||
|
|
||
|
if [ "$( jq --raw-output '.metadata.Episode_Number' ${shownotes_json} )" != "${ep_num}" ]
|
||
|
then
|
||
|
echo "ERROR: The Episode_Number: \"${ep_num}\" was not found in \"${shownotes_json}\""
|
||
|
exit 10
|
||
|
fi
|
||
|
|
||
|
if [ "$( jq --raw-output '.metadata.Episode_Date' ${shownotes_json} )" != "${ep_date}" ]
|
||
|
then
|
||
|
echo "ERROR: The Episode_Date: \"${ep_date}\" was not found in \"${shownotes_json}\""
|
||
|
exit 8
|
||
|
fi
|
||
|
|
||
|
if [ "$( jq --raw-output '.host.Host_Email' ${shownotes_json} )" != "${email_unpadded}" ]
|
||
|
then
|
||
|
echo "ERROR: The Host_Email: \"${email_unpadded}\" was not found in \"${shownotes_json}\""
|
||
|
exit 9
|
||
|
fi
|
||
|
|
||
|
###################
|
||
|
# Assemble the components
|
||
|
#
|
||
|
# https://newbedev.com/how-to-urlencode-data-for-curl-command/
|
||
|
hostid="$( jq --raw-output '.host.Host_ID' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
host_name="$( jq --raw-output '.host.Host_Name' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
title=$( jq --raw-output '.episode.Title' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )
|
||
|
summary="$( jq --raw-output '.episode.Summary' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
series="$( jq --raw-output '.episode.Series' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
series_name="$( jq --raw-output '.episode.Series_Name' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
explicit="$( jq --raw-output '.episode.Explicit' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
episode_license="$( jq --raw-output '.episode.Show_License' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
tags="$( jq --raw-output '.episode.Tags' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
host_license=$( jq --raw-output '.host.Host_License' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )
|
||
|
host_profile=$( jq --raw-output '.host.Host_Profile' ${shownotes_json} | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )
|
||
|
|
||
|
# notes="$( grep -P ":\t" ${shownotes_txt} | awk -F "\t" '{print $2}' )"
|
||
|
notes="$( cat "${shownotes_html}" | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
|
||
|
if [ $# -gt 0 ]
|
||
|
then
|
||
|
declare -A hash
|
||
|
for argument
|
||
|
do
|
||
|
if [[ $argument =~ ^[^=]+=.*$ ]]
|
||
|
then
|
||
|
this_key="${argument%=*}" # "${} Kate format hack
|
||
|
this_value="${argument#*=}" # "${} Kate format hack
|
||
|
this_value="$( echo "${this_value}" | jq --slurp --raw-input @uri | sed -e 's/%0A"$//g' -e 's/^"//g' )"
|
||
|
eval "${this_key}=${this_value}"
|
||
|
echo "INFO: Replacing \"${this_key}\" with \"${this_value}\"."
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
if [ "${hostid}" == '0' ]
|
||
|
then
|
||
|
echo "ERROR: The hostid is 0. Create the host and use \"hostid=???\" to override"
|
||
|
exit 11
|
||
|
fi
|
||
|
|
||
|
# # # # has to be done here as we need to know the hostid
|
||
|
# # # host_photo="$( jq --raw-output '.metadata.FILES.host_photo.name' ${shownotes_json} )"
|
||
|
# # # if [ -n "${host_photo}" ]
|
||
|
# # # then
|
||
|
# # # host_photo="${processing_dir}/${dest_dir}/photo"
|
||
|
# # # host_avatar="${git_image_dir}/${hostid}.png"
|
||
|
# # # echo "INFO: Found host photo \"${host_photo}\""
|
||
|
# # # gm convert "${host_photo}" -resize x80 "${host_avatar}"
|
||
|
# # # xdg-open "${host_avatar}"
|
||
|
# # # read -p "Does the avatar 'look ok ? (N|y) ? " -n 1 -r
|
||
|
# # # echo # (optional) move to a new line
|
||
|
# # # if [[ ! $REPLY =~ ^[yY]$ ]]
|
||
|
# # # then
|
||
|
# # # echo "ERROR: Problem with avatar...."
|
||
|
# # # exit 12
|
||
|
# # # else
|
||
|
# # # echo "INFO: Copying avatar to the server."
|
||
|
# # # scp "${host_avatar}" hpr:www/images/hosts/
|
||
|
# # # fi
|
||
|
# # # fi
|
||
|
|
||
|
|
||
|
###################
|
||
|
# Post show to HPR
|
||
|
#
|
||
|
|
||
|
post_show="${processing_dir}/${dest_dir}/post_show.txt"
|
||
|
post_show_response="${processing_dir}/${dest_dir}/post_show_response.txt"
|
||
|
|
||
|
echo "key=${key}&ep_num=${ep_num}&ep_date=${ep_date}&email=${email}&title=${title}&duration=${duration}&summary=${summary}&series=${series}&series_name=${series_name}&explicit=${explicit}&episode_license=${episode_license}&tags=${tags}&hostid=${hostid}&host_name=${host_name}&host_license=${host_license}&host_profile=${host_profile}¬es=${notes}" > ${post_show}
|
||
|
|
||
|
echo "Sending:"
|
||
|
cat "${post_show}"
|
||
|
echo "key=${key}
|
||
|
ep_num=${ep_num}
|
||
|
ep_date=${ep_date}
|
||
|
email=${email}
|
||
|
title=${title}
|
||
|
duration=${duration}
|
||
|
summary=${summary}
|
||
|
series=${series}
|
||
|
series_name=${series_name}
|
||
|
explicit=${explicit}
|
||
|
episode_license=${episode_license}
|
||
|
tags=${tags}
|
||
|
hostid=${hostid}
|
||
|
host_name=${host_name}
|
||
|
host_license=${host_license}
|
||
|
host_profile=${host_profile}
|
||
|
notes=${notes}"
|
||
|
|
||
|
wget --post-file="${post_show}" "https://hub.hackerpublicradio.org/cms/add_show.php" -O - #"${post_show_response}"
|
||
|
|
||
|
# /home/ken/sourcecode/personal/bin/hpr-publish.bash
|
||
|
#
|
||
|
# xdg-open "https://hackerpublicradio.org/eps/hpr${ep_num}/index.html" >/dev/null 2>&1 &
|