#!/usr/bin/env python
import urllib
import sys
import imdb
import imdb.helpers
import operator
import re
import pprint
pp = pprint.PrettyPrinter(depth=6)
ia = imdb.IMDb('http')

url = 'http://www.stewarts.org.uk/tomsweb/EssentialFilmsRaw?action=raw'
ids = []
for movie in urllib.urlopen(url).read().split('\r\n'):
        if len(movie) > 0 and int(movie) > 0:
                ids.append(movie)

#ids = [ '0119217', '0097576', '0087469' ]
movies = []
for i in ids:
        movie = ia.get_movie(i)
        title = movie['title']
        if i in [  '0064116', '0457430', '0060196', '0211915', '0058461', \
                        '0245429', '0108394', '0059578' ]:
                title = movie['akas'][0]
                title = title[0:title.find("::")]
        year = movie['year']
        rating = movie['rating']
        runtime = movie['runtime'][0]
        genres = movie['genres']
        director = movie['director'][0]
        cast = movie['cast']
        movies.append({"title": title, "id": i, "year": year, \
                "rating": rating, "runtime": runtime, "genres": genres, \
                "director": director, "cast": cast})

movies.sort(key=operator.itemgetter('title'))

decs = []
genres = []
directors = []
cast = []
print "||'''Title'''||'''Year'''||'''IMDB Rating'''||'''Runtime'''||'''Genres'''||'''Director'''||'''Cast'''||"
for movie in movies:
        decs = decs + [str(movie['year'])[0:3]]
        genres = genres + movie['genres']
        directors = directors + [movie['director']]
        cast = cast + movie['cast']
        newcast = ", ".join(map(unicode, movie['cast'][0:2]))
        newcast = re.sub("([a-zA-Z]+[A-Z]+[a-z]+)", "!\\1", newcast)

        print "||[[http://www.imdb.com/title/tt%s/|%s]]||%s||%s||%s||%s||%s||%s||" \
                % (movie['id'], movie['title'], movie['year'], movie['rating'],
                movie['runtime'], ", ".join(map(unicode, movie['genres'])),
                movie['director'], newcast)
print 

decscount = {}
for dec in set(decs):
        decscount[dec] = decs.count(dec)
decscount = decscount.items()
decscount.sort()
decscount.sort(key=operator.itemgetter(1))
decscount.reverse()

print "||'''Decade'''||'''Count'''||"
for dec in decscount:
        print "||%s0||%s||" % ( dec[0], dec[1] )
print 

genrescount = {}
for genre in set(genres):
        genrescount[genre] = genres.count(genre)
genrescount = genrescount.items()
genrescount.sort()
genrescount.sort(key=operator.itemgetter(1))
genrescount.reverse()

print "||'''Genre'''||'''Count'''||"
for genre in genrescount:
        print "||%s||%s||" % ( genre[0], genre[1] )
print 

directorscount = {}
for director in set(directors):
        directorscount[director] = directors.count(director)
directorscount = directorscount.items()
directorscount.sort()
directorscount.sort(key=operator.itemgetter(1))
directorscount.reverse()

print "||'''Director'''||'''Count'''||"
for director in directorscount:
        if director[1] > 1:
                print "||%s||%s||" % ( director[0], director[1] )
print 
        
castcount = {}
for c in set(cast):
        castcount[c] = cast.count(c)
castcount = castcount.items()
castcount.sort()
castcount.sort(key=operator.itemgetter(1))
castcount.reverse()

print "||'''Actor'''||'''Count'''||"
for cast in castcount:
        if cast[1] > 2:
                print "||%s||%s||" % ( cast[0], cast[1] )
                #print "||%s||%s||" % \
                #        ( re.sub("([a-zA-Z]+[A-Z]+[a-z]+)", "!\\1", cast[0]), \
                #        cast[1] )
print 

