-
-
Save ivan/411e75128eb22f4a278a87f98a58ef74 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash | |
# Download a podcast episode from anchor.fm | |
# | |
# Usage: | |
# grab-anchor-episode "https://anchor.fm/emerge/episodes/Robert-MacNaughton---Learnings-from-the-Life-and-Death-of-the-Integral-Center-e31val" # (m4a example) | |
# grab-anchor-episode "https://anchor.fm/free-chapel/episodes/Are-You-Still-In-Love-With-Praise--Pastor-Jentezen-Franklin-e19u4i8" # (mp3 example) | |
# | |
# anchor.fm serves a list of m4a or mp3 files that need to be concatenated with ffmpeg. | |
# | |
# For debugging, uncomment: | |
# set -o verbose | |
set -eu -o pipefail | |
url=$1 | |
json=$(curl -sL "$url" | grep -P -o 'window.__STATE__ = .*' | cut -d ' ' -f 3- | sed -r 's/;$//g') | |
ymd=$(echo -E $json | jq -r '.episodePreview.publishOn' | cut -d 'T' -f 1) | |
extension=$((echo -E $json | jq -r '.[].episodeEnclosureUrl' | grep -F --max-count=1 :// | grep -oP '\.[0-9a-z]+$' | cut -d . -f 2) || echo m4a) | |
output_basename=$ymd-$(basename -- "$url").$extension | |
if [[ -f "$output_basename" ]]; then | |
echo "$output_basename already exists; skipping download" | |
exit | |
fi | |
temp_dir="$(mktemp -d)" | |
cd "$temp_dir" | |
audio_urls=$(echo -E $json | jq -r '.station.audios|map(.audioUrl)|.[]') | |
for i in $audio_urls; do | |
output_file=$(basename -- "$i") | |
wget "$i" -O "$output_file" | |
echo "file '$output_file'" >> .copy_list | |
done | |
ffmpeg -f concat -safe 0 -i .copy_list -c copy "$output_basename" | |
cd - | |
mv "$temp_dir/$output_basename" ./ | |
rm -rf "$temp_dir" |
@Potatrix Did the script actually produce incorrect audio files? If it needs to be fixed, it would really help to have the URL for testing.
This seems to have stopped working at some point. I have the latest version, and anything I try to download, even the provided examples, just results in .copy_list: No such file or directory
.
The command I used: bash grab-anchor-episode.sh "https://anchor.fm/emerge/episodes/Robert-MacNaughton---Learnings-fr om-the-Life-and-Death-of-the-Integral-Center-e31val"
With the help of a friend, I've managed to modify the script so that it works again (at least for my purposes). I've forked it here: https://gist.github.com/viocar/a6b6a0f485b3f400b8bcb0f8334b454d
@ivan the script downloaded the audio files fine. Sometimes it didn't convert to mp3 but wasn't really an issue for me. I had a task to download all of the recordings for anchor podcast I manage and needed a quick way to download all of them which is why I made the modification
@viocar I notice a space in your URL but I assume it wasn't like this when you tried to run the script?
No, I tried several URLs that I copied directly from my browser. I'm not sure why there's a space in my post.
Please any one could suggest me script code for tracking anchor.fm podcast audio in Tag Manager tools ?
Where can I change the output location, sorry, I am new to linux
Thank you so much for this!
In my case, I'm trying to download all episodes of a certain podcast. After poking around this one for a bit, I found that the Json returned by the curl request contains Urls for other episodes. (Maybe all of them? seems like it was in my case)
For those looking to do the same, here is a helper script that works with this one
./grab-all-anchor-episodes.sh