I love podcasts. I don’t get to listen to all the ones I like all of the time, but I love knowing that interesting content – from polished news programs to amateur computing tips – are there at my command when I do have time. However, a trend has grown slightly greater on the web of late – the foregoing of an RSS feed link in favor of iTunes or Google Podcasts links. In this post, I show you how to free the RSS feed from behind one of these closed or proprietary services and bring them from the shadows into the light of your favorite podcast player.
RSS and the Open Web
Podcasts were born out of a beautiful mix of human creativity, the world-wide web, access to inexpensive recording equipment, and a “syndication” data format called RSS (which presently stands for “Really Simple Syndication”). RSS was an XML-rooted data format for making a media file available through a “feed,” such that when new episodes were available one merely updated the RSS file and programs designed to read the feed would automatically pick up the new material. RSS had a key feature, apart from its simplicity: it was open. Anyone could learn to write it, anyone could make a file, and anyone could share with anyone else using this format.
Proprietary music players like iTunes are tied to an equally proprietary ecosystem of protocols that are NOT open. For instance, when you see a “Subscribe via iTunes” link on a podcast, it’s nearly impossible to figure out what the underlying RSS feed is. Most programs don’t speak iTunes. All programs speak RSS, because it’s open and simple.
So when journalistic entities like the Washington Post or the New York Times produce podcasts, but only provide access to them via big proprietary systems like Apple iTunes or the more recent Google Podcasts, two things happen: a press institution sloightly abandons its core commitment to the openness of information, and I get annoyed.
Liberating RSS from iTunes
Liberating the RSS feed from iTunes is “easy” when you’ve already bought into the Apple ecosystem – you either don’t care (because you use iTunes) or you can open the podcast in iTunes and copy the RSS feed location from there. But I run an open-source operating system, GNU/Linux, and Apple doesn’t produce iTunes for GNU/Linux. This recipe is for you if you are in a similar predicament.
Here is a simple recipe for liberating the open RSS feed from behind the shadow of iTunes. Thanks to “Gino” (see the references) for the recipe, which I explain slightly better here than was explained in the original forum post.
- When you find a “Subscribe Using iTunes” link/button or similar on a web page, don’t left-click on it – right-click on it to bring up your web browser’s options menu for that content. On Chrome, I am given the option to “Copy Link Location“. Do that (or similar action in your browser).
- Paste that link into a text editor or word processor. For instance, for the Washington Post’s “Post Reports” podcast, the iTunes link is: https://itunes.apple.com/us/podcast/id1444873564?mt=2
- Note the number after the letters “id” and before the question mark. That is the podcast ID, from which we can get the original RSS feed. Note that ID down (for the above example, it is 1444873564.
- Use the following template to construct a new URL, one that will get us a file from iTunes that contains the actual RSS feed. The template is: https://itunes.apple.com/lookup?id=XXXXXXXX&entity=podcast where you replace the characters “XXXXXXXX” with the ID from the previous step. For this example podcast, the URL is https://itunes.apple.com/lookup?id=1444873564&entity=podcast
- Paste this link into to the location bar of your browser, so that you can visit this website. Rather than bringing up a website, visiting this link downloads a file. The file is in a format called “JSON,” and it contains the real RSS feed.
- Open the downloaded file. Look for the field named “feedUrl”. The value assigned to this field is the ACTUAL podcast RSS feed location on the web, which has (until now) been hidden behind iTunes. In the case of the above example, the feedUrl is https://podcast.posttv.com/itunes/post-reports.xml
I was able to subscribe to this podcast using my private instance of the excellent open-source web-based RSS feed reader, TT-RSS. Now I can enjoy “Post Reports” or “The Daily” in the comfort of one of my favorite simple but elegant RSS feed readers.
The Washington Post’s motto is “Democracy Dies in Darkness.” Making your journalism, which subscribers have already paid for, available only through other privately operated services, unfortunately, extends the shadow over the kind of openness they are espousing. This recipe will help insure the quality podcasts produced by this and other journalistic entities don’t die in darkness. But, of course, the right think is for journalists to just list the damned RSS feed.
2 thoughts on “Don’t Let Podcasts Die in Darkness”
Now if only there was a bookmarklet to automate this. Thank you very much for highlighting this!
I had been thinking something similar, though my go-to solution is always… a Python script! So I wrote one (just finished it). It’s not bulletproof, but it will get the job done.
#!/usr/bin/env python3
import subprocess
import re
import sys
import json
re_iTunes = re.compile('http.*id([0-9]+)')
url_iTunes = sys.argv[1]
print("Converting iTunes URL (%s) to JSON retrieval link for podcast" % (url_iTunes))
podcast_id = 0
match_result = re_iTunes.match(url_iTunes)
if match_result != None:
podcast_id = match_result.group(1)
pass
if podcast_id == 0:
sys.exit()
pass
url_json = 'https://itunes.apple.com/lookup?id=%d&entity=podcast' % (int(podcast_id))
print("JSON URL: %s" % url_json)
# Retrieve the JSON file
subprocess.check_output('curl -s -o podcast.json %s' % (url_json), shell=True)
try:
podcast_file = open('podcast.json','r')
podcast_data = json.loads(podcast_file.read())
print("================= Actual RSS Feed URL =================")
print(podcast_data['results'][0]['feedUrl'])
print("=======================================================")
except:
print("Unable to open the JSON file")
sys.exit()
That did not format well, so here is a Gist in Github: https://gist.github.com/stephensekula/47820ab98ae44ae322325bf9df8b2162