As mentioned in previous posts, the free podcast feeds site offered by comrade @jumble@hexbear.net at https://jumble.top/ has been pretty unreliable in the past weeks, and Jumble has been unreachable for a while now. In the throngs of slop withdrawal syndrome, during the days the site was down, I hacked together a replacement for that site:
For now this is simply meant as a backup, since it will take a while to collect as many feeds and build the same features that Jumble offers (I can’t proxy media files for the time being, sorry to comrades in the PRC or other countries that block Patreon). With time though, I hope this can become a viable alternative. I’m at least going to try to be online here regularly and keep downtimes to a minimum. I’m also happy to involve other contributors if anyone is down to help. To be clear, both Jumble's site and mine are basically exploiting a vulnerability in how Patreon private feeds work, there is no guarantee that they will not patch this exploit in the future.
I'm adding a technical description of the project below for the nerds who are interested. Contributions and feed donations are more than welcome! For now, out of concern for my anonymity, I'm only accepting cash donations in Monero (the wallet address is on the site). If anybody has suggestions for other way to accept donations anonymously I'm all ears.
Feel free to PM me for any of the following:
- feed donations
- cash donations
- technical suggestions to improve feed anonymization, site accessibility, security, reliability, etc.
@jumble@hexbear.net if/when you come back online please reach out! I'd love to ask you for tips about your experience hosting jumble.top and possibly to collaborate on a single replacement, if you're still willing to work on this.
nerd stuff
The whole project is extremely basic and just consists of two components: a script that downloads and caches feed XML files, and a file server to serve them.
This is the script:
import csv
import sys
import xml.etree.ElementTree as ElementTree
import requests
if __name__ == "__main__":
feeds_file = sys.argv[1]
output_dir = sys.argv[2]
print("\n#### Fetching feeds...")
with open(feeds_file, newline='') as file:
feeds = csv.reader(file)
print("Loaded feeds file")
for (name, url, description) in feeds:
print(f"## Processing {name}...")
try:
headers = {'User-Agent': 'AntennaPod/3.7.0'}
response = requests.get(url, headers=headers)
print(f"Fetched {name}")
except Exception as e:
print(f"Failed to fetch feed {name}:", e)
try:
root = ElementTree.fromstring(response.content)
# Replace the description since it often contains PII
root[0].find('description').text = description
ElementTree.ElementTree(root).write(f"{output_dir}/{name}.xml")
print(f"Processed and saved {name}")
except Exception as e:
print(f"Failed to process feed {name}:", e)
I then use Caddy as a static file server to publish an index page and the feed files. I'm hosting it on a small VPS on Njalla, registered anonymously and paid in Monero, with the CloudFlare free plan on top for caching and basic protection.
This is so awesome, thank you. I was wondering if anyone would step up with an alternative considering all the jumble.top down time without explanation, and here you are to save the day.
A nit to pick, but I can't help but be a bit wary of the use of cloudflare, though I get it that its easy free basic protection.
Whatever the case, I am always grateful and appreciative of those who help the masses get our free slop.
Yeah I know using CloudFlare is risky, but until they block me it's just worth it. Not having any protection is too risky, and it's safer to have a cache as well since the VPS has limited data. I'm gonna look into Fastly's free tier, though, since they seem to be slightly better.