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--downlimitwe’ve limited the number of trailers that will download. - Funkiness with
--redown. - Unicode handling is currently a hackjob.
Related posts
34 Comments
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!
Bruce on May 19th, 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
Dustin on May 19th, 2010
@Bruce: This is due for a rewrite soon.
Al on June 3rd, 2010
I (and my kids) love this script however I would like to make a feature request. Is it possible to add a switch/parameter to filter on MPAA rating? Because HTE currently does not support the NFO file and because I use HTE mainly for the kids, it would be nice to only download PG or under rated movies. This prevents the likes of Saw IV trailer being shown before Princess & The Pea starts
So a switch that supports multiple ratings and filters on them like –rating=PG|12 etc. I think would be great!
Great job!
Al on June 23rd, 2010
Dustin – I’m having a problem with the –imdb switch. Getting the following error:
Fetching trailer list from Apple.
Attempting to fetch rating for Adjustment Bureau from imdb.
2010-06-22 20:46:16,500 CRITICAL [imdbpy] imdb\_exceptions.pyc:35: IMDbDataAcces
sError exception raised; args: ({‘url’: ‘http://akas.imdb.com/find?s=tt;mx=20;q=
adjustment+bureau+%282010%29′, ‘error type’: ‘http_error_default’, ‘errcode’: 40
3, ‘headers’: , ‘proxy’: ”, ‘errmsg
‘: ‘Forbidden’},); kwds: {}
None
Traceback (most recent call last):
File “atd.py”, line 570, in
File “atd.py”, line 284, in download_trailers
File “atd.py”, line 214, in _get_current_trailer_info
File “imdb\__init__.pyc”, line 381, in search_movie
File “imdb\parser\http\__init__.pyc”, line 431, in _search_movie
File “imdb\parser\http\__init__.pyc”, line 414, in _get_search_content
File “imdb\parser\http\__init__.pyc”, line 400, in _retrieve
File “imdb\parser\http\__init__.pyc”, line 167, in retrieve_unicode
File “urllib.pyc”, line 206, in open
File “urllib.pyc”, line 361, in open_http
File “urllib.pyc”, line 378, in http_error
File “imdb\parser\http\__init__.pyc”, line 221, in http_error_default
imdb._exceptions.IMDbDataAccessError: {‘url’: ‘http://akas.imdb.com/find?s=tt;mx
=20;q=adjustment+bureau+%282010%29′, ‘error type’: ‘http_error_default’, ‘errcod
e’: 403, ‘headers’: , ‘proxy’: ”, ‘
errmsg’: ‘Forbidden’}
I’d like to run this feature because often the trailers are “Not yet rated”. If this does what I think it does then it goes to imdb to get the correct MPAA rating instead of using the one on Apple’s website. Very useful for me as I’m using this with HTE and trying to make a mod to that script so trailers play by rating.
Cheers.
Al on June 23rd, 2010
Dustin, one more request. Currently the description tag in the NFO file contains special characters which means the NFO cannot be parsed by an XML reader. Can these be parsed out or converted prior to writing to the NFO file? As an example ampersand is found in a lot of the descriptions, this should be &.
Cheers.
revned on July 10th, 2010
I’ve been using this application for a while, but since the begin of july it stopped downloading trailers. I’m not getting any errors. The application just quits.
Dustin on July 10th, 2010
Yeah, Apple had made some changes…
I’m working on a new version now that should be out very soon.
Ilya Vassilevsky on December 27th, 2009
This script is absolutely amazing! Man. how you managed to circumvent all their defense measures?!