Apple Trailer Downloader

I wanted all the movie trailers from Apple in the highest resolution available (1080p for most of them), so I wrote this script in python to fetch them all.

Usage

Update: I wasn’t very clear about this before. ATD keeps a database of what it’s already downloaded, so each time you run it, it will just download everything you haven’t downloaded yet.

This works through the command line in a very simple manner.

I’ll start out with some examples and then provide a full option list.

The following example will download 500 megabytes worth of trailers and save them to C:\Trailers.

atd -l 500 -d "C:\Trailers"

The next example will do the same and also append “-trailer” to the filename and change the extension to “.hdmov”.

atd -l 500 -d "C:\Trailers" -a "-trailer" -e "hdmov"

If there is a certain trailer you would like atd to download again (say you deleted the trailer on accident), you can call it as follows. The one downside to this method is that all this does is tell ATD to not skip this trailer when processing the trailer list. If it doesn’t make it to the movie because you’ve used the download limit option it won’t download it again. Changing this behavior is on my todo list.

atd --redown "Iron Man 2"

If you want the maximum resolution it downloads to be 480p you do it like so:

atd --respref "480p"

To get help you do this:

atd -h

Which will ouput:

Usage: atd [options]
 
If no options passed, it will download all not already downloaded trailers to a
subdir called Trailers.
 
Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -l MB, --downlimit=MB
                        Approxmiate megabytes to download per session
                        (default: 0)
  -d DIR, --dest=DIR    Destination directory. (default: Trailers)
  -a TEXT, --append=TEXT
                        Appends the specified text to the filename. (default:
                        -trailer)
  -r, --rename          Rename trailer with movies name.
  -e EXTENSION, --ext=EXTENSION
                        Changes file extension to what is specified
  --redown=movie name   Redownloads the trailer for the specified movie.  Ex:
                        --redown Iron Man 2
  --flush               WARNING: This option deletes your download history
                        which means that all trailers will be downloaded again
  --respref=RESPREF     Get specified resolution or less.  Options are
                        ['1080p', '720p', '480p', '640w', '480']
  --reslimit=RESLIMIT   Get specified resolution or dont get trailer at all
  --mdate=DATE          Only get trailers for movies with a release date after
                        this. (format: YYYY-MM-DD)
  --tdate=DATE          Only get trailers released after this date. (format:
                        YYYY-MM-DD)
  --fake                Don't download, just print list of movies it would
                        download trailers for with the specified commandline.
                        (Ignores download limit)
  --htenfo              Writes an nfo file for use with the Home Theater
                        Experience XBMC script.
  --imdb                Fetches missing information like MPAA rating from
                        IMDB.  (Slows down parsing)

Please report any bugs or feature requests you may have. This script is dependent upon how Apple presents it’s trailers on the web. If they change the correct (or incorrect depending on how you look at it) things this script will break. I’ll do my best to keep up with such changes.

Newest Version

Version 0.2.2 is here.

Source

ATD is now on github.

Older versions

Version 0.2.1 is here.

Version 0.2 for Windows users is here.
Version 0.2 for Linux users or users interested in the source can get it here.

Version 0.1 for Windows users is here.
Version 0.1 for Linux users or users interested in the source can get the source code here.

Planned Features

Rolling updates

With this feature, ATD will be able to keep a folder full of only trailers for movies past a certain date (for example, only trailers for movies that haven’t been released yet).  It will remove trailers for movies before the date and add/dl trailers for movies with new trailers.

Known Bugs

  • With --imdb, ATD fetches info for all trailers even if because of other options like --downlimit we’ve limited the number of trailers that will download.
  • Funkiness with --redown.
  • Unicode handling is currently a hackjob.

Tags: , ,

Related posts

27 Comments

Ilya Vassilevsky  on December 27th, 2009

This script is absolutely amazing! Man. how you managed to circumvent all their defense measures?!

Ilya Vassilevsky  on December 27th, 2009

I invoked it with this command:

atd -r –respref=480p –mdate=2009-12-20

It worked fine and downloaded 23 of 66 trailers until my ADSL modem reconnected. Then I invoked it again with the same command and expected it to continue with just the “missing” titles.

However, the program started downloading from the first title again. Looks like it did not look if the file already exists in ./Trailers folder. Is the -r option causing this?

Dustin  on December 27th, 2009

@Ilya: That would be a bug. I’ll get it fixed in the next few days.

Ilya Vassilevsky  on December 28th, 2009

Without the -mdate parameter, it got only the missing ones :)

Contriving » Apple Trailer Downloader .2  on January 8th, 2010

[...] the original post for more info and the download [...]

Jim  on January 11th, 2010

This seems really cool, and hopefully I’m missing an obvious step … but all I get is this:

———————————-
D:\AppleTrailerDL> atd –fake
Fetching trailer list from Apple.
Traceback (most recent call last):
File “atd.py”, line 560, in
File “atd.py”, line 290, in download_trailers
File “atd.py”, line 105, in _get_current_trailer_info
File “xml\etree\ElementTree.pyc”, line 546, in __init__
File “xml\etree\ElementTree.pyc”, line 587, in parse
File “xml\etree\ElementTree.pyc”, line 1254, in close
xml.parsers.expat.ExpatError: no element found: line 1, column 0

D:\AppleTrailerDL>
———————————-

I have tried it on Windows 7 and Windows 2008 and I get the same error(s).

Dustin  on January 11th, 2010

@Jim:

I’ll be sure and put in a more useful error message in the next version.

It looks like something is broken on Apple’s end right now since the XML file they provide is currently empty instead of full of information about the trailers.

Hopefully they fix it soon.

Dustin  on January 12th, 2010

@Jim: Apple fixed their stuff. It should work fine now.

Contriving » Apple Trailer Downloader .2.1  on January 12th, 2010

[...] Original post with more info here. [...]

GJones  on January 14th, 2010

The file seems not to run on Ubuntu 8.04. It specifically complains about imdb not being able to import. Is there an archive including all of the files required for this to run on Hardy?

Dustin  on January 14th, 2010

@GJones: You need to install imdbpy. Looks like 8.04 has an imdbpy package:

http://packages.ubuntu.com/hardy/python-imdbpy

You’ll need to apt-get this or use Synaptic.

Let me know if this works out for you.

kiboy6  on January 15th, 2010

I have the same problem as Ilya above…..with mdate or tdate parameter set atd.exe will redownload all trailers….

remove -mdate / -tdate and it behaves as expected…

Is this a knonw bug?

Thanks for any suggestions… and thinks in general for this amazing script! :)

kiboy6  on January 15th, 2010

Also, the script seems to be quitting before completion…..seemingly each time it gets to the trailer for “The Wolfman” ???

kiboy6  on January 16th, 2010

That second problem seems to have been fixed by removing the –htenfo parameter.

Does HTE only need the nfo if we want it to show trailers that match the genre and rating of the feature presentation?

Dustin  on January 16th, 2010

@kilboy6: -mdate/-tdate bug will be fixed soon.

I’m not sure why it would be quitting. I’ll run a full download in a few minutes and see if I get the same problem.

You’re correct about the –htenfo paramter. It’s only needed for HTE to filter by various things like trailer resolution/genre/rating. Actually, I don’t think it’s needed for anything just yet. I don’t think the current version of HTE even supports the .nfo files. I would assume it will be the next released version of HTE before support for these .nfo files is added.

Anyway, I’ll see if I can figure out what the deal with your bug reports is. Thanks.

Dustin  on January 16th, 2010

@kilboy6: I’ve fixed the bug that was causing ATD to freak out on “The Wolfman”. New version available above.

Michael  on January 20th, 2010

Working perfect for me on Ubuntu 9.10! Thanks, now I’ll be extending drop the movie in the correct location in my directory of movies.

Wish there was a way to get download older trailers from years past.

Dustin  on January 21st, 2010

@Michael: Glad it’s working out for you.

ATD is now on github if you want access to the latest source. (Updated post with link)

Pat  on January 28th, 2010

Looks like an awesome script, however doesn’t seem to be working for me in Debian 5 or Ubuntu 9.10 – the script appears to run just fine, but all I’m left with are 0-byte .mov files when it’s done.

Seems like it was working for people since the last release, apple issue maybe?

Dustin  on January 29th, 2010

@Pat: It seems to be working for me this morning. What options are you running ATD with?

Pat  on January 29th, 2010

Doesn’t seem to matter what options I specify..

I’ve been running it as:

#> python /usr/local/bin/atd-2.2/atd.py –dest=”/media/trailers”

The /media/trailers is world r/w, the trailer_dl.db file is created properly, it appears to want to download but no data ever comes down;

#> ls -lh /media/trailers
total 436K
-rw-r–r– 1 pat pat 0 2010-01-29 12:38 copout-tlr1_h1080p-trailer.mov
-rw-r–r– 1 pat pat 432K 2010-01-29 12:38 trailer_dl.db

Stumped :)

Greg  on March 2nd, 2010

When does the database of what’s already been downloaded get created? I have 6 trailers downloaded before having to stop the process. Started again and all my downloads are being repeated.

Dustin  on March 2nd, 2010

It currently only writes the database when it completes running in a normal manner. If you terminate it, the database never gets written.

I’ll look in to changing this behavior in the next version.

olympia  on March 3rd, 2010

Hey Dustin,

first of all, thank you for this excellent script.
Let me also ask a question.
I ran the script on 28 Feb for the first time, it downloaded somewhat 96 trailers.
I ran it again today and it downloaded two new trailers:
– The Young Victoria
– Leaves of Grass
Checking apple’s website the first one was posted on 3 Dec 2009 and the second one on 8 Feb.

My question is why they are only downloaded today?
And also, new trailers from 2 March haven’t been downloaded (Defendor, After.Life, The Runaway, etc.)

I invoked the script both times with:
atd.exe” –respref “720p” -d “z:\Trailers2″ -r -a “”

Am I doing something wrong which resulting the new ones are not going to be downloaded?

Thank you for your feedback in advance!

Dustin  on March 3rd, 2010

@olympia: I suspect those are trailers it had trouble downloading because of connection issues or some such thing. I’m running a test with your commandline now (except I removed the extra quote marks you have).

olympia  on March 3rd, 2010

Hi Dustin,

thanks for the feedback. Two comments:
– I ran again the script in the afternoon and two of the 4 new trailers from yesterday has been downloaded (The Runaway and After.Life), but two is still remaining. Based on this most probably they will be downloaded as well at some future run…

I needed the extra quotemarks, because I found no other way to save the trailers without the “-trailer” string addition.

olympia  on March 6th, 2010

Hi Dustin,

update:
atd.exe –respref “720p” –tdate=2010-03-01 –fake
Fetching trailer list from Apple.
downloading because of trailer date: Karate Kid
downloading because of trailer date: The Runaways
downloading because of trailer date: Killers
downloading because of trailer date: The Good Heart
downloading because of trailer date: A Nightmare On Elm Street
downloading because of trailer date: After.Life
6 trailers to fetch. (Limiting dl to 0 MB)

While there are 14 trailers after 1st of March. If the param should include the trailers from 1st of March too, then there are even more.

To make it clear. This is really not a complaint, thank you for the wonderful script, I am just wondering if you can do anything about this?

Thank you!

Leave a Comment