class TMDBManager(object): def __init__(self): self.tmdb = TMDB('xml', 'en') def __searchmovie__(self, movie): return self.tmdb.searchResults(movie.replace(" ", "%20")) def __parse_tmdbid__(self, data): soup = BeautifulStoneSoup(data) return soup.movies.movie.id.contents[0] def __person_info_result__(self, data_dict): personlist = [] for cast in data_dict['cast']: try: person_dict = {} personid = cast['id'] person_info = self.tmdb.person_getInfo(personid) soup = BeautifulStoneSoup(person_info) person_tag = soup.people.person person_dict['tmdb_id'] = personid person_dict['popularity'] = person_tag.popularity.string person_dict['name'] = soup.find('name').string person_dict['also_known_as'] = person_tag.also_known_as.string person_dict['biography'] = person_tag.biography.string person_dict['known_movies'] = person_tag.known_movies.string person_dict['birthday'] = person_tag.birthday.string person_dict['birthplace'] = person_tag.birthplace.string person_dict['url'] = person_tag.url.string person_dict['known_movies'] = person_tag.known_movies.string person_dict['filmography'] = [ {'name':movie['name'], 'job':movie['job'], 'department':movie['department'], 'character':movie['character'], 'url':movie['url'], 'cast_id':movie['cast_id'], 'poster':movie['poster'], 'adult':movie['adult'], 'release':movie['release']} for movie in person_tag.filmography.contents if movie!='\n' ] person_dict['images'] = [ { 'type':image['type'], 'url':image['url'], 'size':image['size'], 'width':image['width'], 'height':image['height'], 'id':image['id'] } for image in person_tag.images.contents if image!='\n' ] person_dict['version'] = person_tag.version.string person_dict['last_modified_at'] = person_tag.last_modified_at.string personlist.append(person_dict) except Exception as e: print "Unexpected error:", sys.exc_info()[0] return personlist def __movie_info_result__(self, tmdb_id): movie_dict = {} movie_info = self.tmdb.getInfo(tmdb_id) soup = BeautifulStoneSoup(movie_info) movie_tag = soup.movies.movie movie_dict['tmdb_id'] = tmdb_id movie_dict['popularity'] = movie_tag.popularity.string movie_dict['translated'] = movie_tag.translated.string movie_dict['adult'] = movie_tag.adult.string movie_dict['language'] = movie_tag.language.string movie_dict['original_name'] = movie_tag.original_name.string movie_dict['name'] = soup.find('name').string movie_dict['alternative_name'] = movie_tag.alternative_name.string if movie_tag.alternative_name.contents else '' movie_dict['imdb_id'] = movie_tag.imdb_id.string movie_dict['overview'] = movie_tag.overview.string movie_dict['votes'] = movie_tag.votes.string movie_dict['rating'] = movie_tag.votes.string movie_dict['tagline'] = movie_tag.tagline.string if movie_tag.tagline.contents else '' movie_dict['released'] = movie_tag.released.string movie_dict['runtime'] = movie_tag.runtime.string if movie_tag.runtime.contents else '' movie_dict['budget'] = movie_tag.budget.string if movie_tag.budget.string else '' movie_dict['revenue'] = movie_tag.revenue.string if movie_tag.revenue.string else '' movie_dict['homepage'] = movie_tag.homepage.string if movie_tag.homepage.string else '' movie_dict['trailer'] = movie_tag.trailer.string if movie_tag.trailer.string else '' movie_dict['version'] = movie_tag.version.string movie_dict['studios'] = [ { 'name': studio['name'] } for studio in movie_tag.studios.contents if studio!='\n' ] movie_dict['images'] = [ { 'url': image['url'], 'type': image['type'], 'size': image['size'], 'width': image['width'], 'height': image['height'], 'id': image['id'] } for image in movie_tag.images.contents if image!='\n'] movie_dict['keywords'] = [ { 'name': keyword['name'] } for keyword in movie_tag.keywords.contents if keyword!='\n'] movie_dict['countries'] = [ { 'country': country['name'] } for country in movie_tag.countries.contents if country!='\n'] movie_dict['categories'] = [ { 'type': category['type'], 'name': category['name'], 'url': category['url'], 'id': category['id'] } for category in movie_tag.categories.contents if category!='\n' ] movie_dict['cast'] = [ { 'name': (person['name']).encode('utf-8'), 'character': (person['character']).encode('utf-8'), 'job': person['job'], 'id': person['id'], 'thumb': person['thumb'], 'department': person['department'], 'url': person['url'], 'order': person['order'], 'cast_id': person['cast_id'] } for person in movie_tag.cast.contents if person!='\n' ] movie_dict['last_modified_at'] = movie_tag.last_modified_at.string return movie_dict def movie_info(self, movie): try: search_result =self.__searchmovie__(movie) tmdb_id = self.__parse_tmdbid__(search_result) return self.__movie_info_result__(tmdb_id) except Exception as e: #error = "%s %s: \n%s\n" % (datetime.datetime.now(), movie, sys.exc_info()) #print error with open(LOG_FILE, 'a') as f: f.write(error) raise e return None def person_info(self, data_dict): try: return self.__person_info_result__(data_dict) except Exception: error = "%s %s: \n%s\n" % (datetime.datetime.now(), movie, sys.exc_info()) print error with open(LOG_FILE, 'a') as f: f.write(error) return None