NOTE: I'm not hosting these. This is just a workaround to get them from the streaming servers.
Then, use this link to download the eps... You can change the url to that page to change the first and last episodes.
http://www.dirtygreek.org/stuff/tal.php?min=314&max=321, for instance, will show you eps 314 - 321.
If you want to be a real nerd about it (and hey, who doesn't?!), you can download and install curl.
Then, you can use this batch file I wrote to download the files you want. You'll have to know what you're doing, though.
I got these by decompiling the flash player on the TAL site.
http://audio.thisamericanlife.org/jomamashouse/ismymamashouse/SHOWNUMBER.mp3
Just replace SHOWNUMBER with the number.
Of course, the easiest way to get new episodes of TAL is to subscribe to their podcast.
UPDATE: If you're tired of randomly deciding which episode to listen to, I hacked out a script to rename them based on a list of episode names I found on Wikipedia and formatted to suit my purpose. If any of you other TAL obsessed folks want to use it, feel free. You'll have to do this on a windows computer, unless macs can run visual basic scripts...
There are two files you need,
Rename TAL Episodes.vbs
episodelist.txt
Download a zip of the files here.
All you have to do is drop these two files wherever you have the This American Life mp3s, then go into Rename TAL Episodes.vbs and change g:\mp3\tal\ to wherever you want the renamed files to go (c:\mp3\ or whatever). Save it, then double click Rename TAL Episodes.vbs. This is going to make copies of each file, so send it somewhere that has the space. Did that so I didn't screw up my or your mp3s just in case something went awry. You can always delete the old ones once you're satisfied they were copied correctly.
Also, this assumes that your files are named tal-number.mp3, like tal-1.mp3, tal-2.mp3, etc, because that's how they're named when you get them from the server.
You'll have to add any new episodes by hand to the file, or you can always rename them one by one once you have the bulk of your files renamed using this script. If you add them to the file, just put them in chronological order in episodelist.txt in the format episodenumber-episodetitle. Ex: 1-New Beginning
This worked great for me. I didn't edit the ID3 tags, but if you care, you can always get a program that changes the tags based on the filename.
UPDATE: A helpful commenter below points out that this bash shell will do what you need to download the eps in Linux, etc.
#!/bin/bash
for i in `seq 1 330`; do
echo "http://audio.thisamericanlife.org/jomamashouse/ismymamashouse/$i.mp3" | xargs wget
done
And Travis points out an easier way to do it, in one line
for i in $(seq 1 330); do wget http://audio.thisamericanlife.org/jomamashouse/ismymamashouse/$i.mp3;done
Replace 330 with the last episode aired, in this case 377
Special thanks to Robert Kennedy for an updated episodelist.txt file. Also, it looks like they've finally tagged all of the podcast MP3s, so you may not find this useful any more if you have the files on an iPod or in iTunes etc, but it still is nice for browsing them on your hard drive.
UPDATE: Reader Benny sent a C# program that does the downloading:A very crude csharp console app that'll just download all of the episodes from today and previously to C:\ (you can modify as you see fit)... Here's the code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static bool Next = true;
static ConsoleProgress consoleProgress;
static void Main(string[] args)
{
consoleProgress = new ConsoleProgress();
using (System.Net.WebClient client = new System.Net.WebClient())
{
client.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
for (int i = 395; i > 0; i--)
{
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine(String.Format("New Episode {0}", i));
string url = String.Format("http://audio.thisamericanlife.org/jomamashouse/ismymamashouse/{0}.mp3", i);
string filename = String.Format(@"C:\{0}.mp3\", i);
if (!System.IO.File.Exists(filename))
{
Console.WriteLine(String.Format("Attempting to download episode {0}", i));
try
{
client.DownloadFileAsync(new System.Uri(url), filename);
Next = false;
while (Next == false)
{
Thread.Sleep(1000);
}
//client.DownloadFile(url, filename);
}
catch (System.Net.WebException ex)
{
Console.WriteLine("");
Console.WriteLine("Exception");
Console.WriteLine(ex.Response);
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine(String.Format("Skipping episode {0}", i));
}
}
}
}
static void client_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
{
consoleProgress.Update(String.Format("{0}%", e.ProgressPercentage));
}
static void client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Next = true;
consoleProgress.ZeroOut();
}
}
public class ConsoleProgress
{
int oldLength;
public ConsoleProgress()
{
oldLength = 0;
}
public void ZeroOut()
{
oldLength = 0;
}
public void Update(string text)
{
if (text.Length < 4)
{
text.PadLeft(4, '0');
}
int pos = (Console.CursorLeft - 4);
if (pos <= 0)
pos = 0;
Console.Write(text);
Console.SetCursorPosition(0, Console.CursorTop);
oldLength = text.Length;
}
}
}
|