def detail(request, movie_id): if not request.user.is_authenticated(): return render(request, 'movies/base.html') else: user = request.user imdb = Imdb() titledetails = imdb.get_title(movie_id) dlist = [] detlist = [] try: dlist.append(titledetails['base']['image']['url']) except: # insert a null image dlist.append(' ') detlist.append(titledetails['base']['title']) title = titledetails['base']['title'] detlist.append(titledetails['base']['year']) try: min = int(titledetails['base']['runningTimeInMinutes']) hrs = int(min / 60) minutes = min - 60 * hrs time = str(hrs) + 'hr ' + str(minutes) + 'min' detlist.append(time) except: detlist.append('-') detlist.append(imdb.get_title_genres(movie_id)['genres']) try: detlist.append(titledetails['plot']['summaries'][0]['text']) except: detlist.append('-') try: #print('hello') castandcrew = imdb.get_title_credits(movie_id) castlist = [] detdict = {} detdict['director'] = castandcrew['credits']['director'][0]['name'] detdict['producer'] = castandcrew['credits']['producer'][0]['name'] writers = [] for i in castandcrew['credits']['writer']: writers.append(i['name']) writerset = set(writers) detdict['writers'] = list(writerset) detlist.append(detdict) for i in range(0, 6): castdict = {} castdict[castandcrew['credits']['cast'][i][ 'name']] = castandcrew['credits']['cast'][i]['characters'] castlist.append(castdict) detlist.append(castlist) except: detlist.append('-') dlist.append(detlist) return render(request, 'movies/moviedetails.html', { 'dlist': dlist, 'title': title })
class IMDbToAnki(QDialog): def __init__(self): super().__init__() try: from imdbpie import Imdb except ImportError: showInfo('Please install the imdbpie module.') return self.imdb = Imdb() self.mainLayout = QGridLayout(self) self.queryInput = QLineEdit() self.searchResults = QListWidget() self.createButton = QPushButton("Create") self.createButton.setAutoDefault(False) self.sidebar = QWidget() self.sidebarLayout = QVBoxLayout(self.sidebar) # All valid tokens for imdbpie Person objects. self.departments = [ 'director', 'writer', 'cast', 'producer', 'cinematographer', 'editor', 'casting_director', 'production_designer', 'art_director', 'set_decorator', 'costume_designer', 'make_up_department', 'assistant_director', 'art_department', 'sound_department', 'visual_effects', 'music_department', 'miscellaneous' ] self.depBoxes = [QCheckBox(token) for token in self.departments] for box in self.depBoxes: self.sidebarLayout.addWidget(box) self.queryInput.returnPressed.connect(self.search) self.createButton.clicked.connect(self.createNotes) self.mainLayout.addWidget(self.queryInput, 0, 0, 1, 1) self.mainLayout.addWidget(self.searchResults, 1, 0, 1, 1) self.mainLayout.addWidget(self.createButton, 2, 0, 1, 1) self.mainLayout.addWidget(self.sidebar, 0, 1, 3, 1) self.exec_() def search(self): self.searchResults.clear() for result in self.imdb.search_for_title(self.queryInput.text()): item = QListWidgetItem(f'{result["title"]} ({result["year"]})', self.searchResults) item.setData(Qt.UserRole, result['imdb_id']) self.searchResults.setCurrentRow(0) def credits(self): title = self.searchResults.currentItem().data(Qt.UserRole) departments = self.imdb.get_title_credits(title)['credits'] enabledDeps = [box.text() for box in self.depBoxes if box.checkState()] nestedCredits = [departments[dep] for dep in enabledDeps] return list(chain.from_iterable(nestedCredits)) def createNotes(self): mw.progress.start(immediate=True) titleYear = self.searchResults.currentItem().text() data = [ ';'.join([titleYear, Person(p).fields]) for p in self.credits() ] mw.progress.finish() ImportDialog(mw, ['Film Title', 'Name', 'Role', 'Image', 'Tags'], data)
title['base']['year'], title['base']['runningTimeInMinutes'], movie_genres[movie_id], title['ratings']['rating'], single_quote(title['base']['image']['url']), single_quote(str(title['plot']['outline']['text'])), single_quote(str(imdb.get_title_videos(movie_id)['videos'][0]['encodings'][0]['play'])) )) execute_sql(sql) movie_count += 1 print("Insert movie: " + movie_id, movie_count) except Exception as e: print('Movie Insert Failure: ' + movie_id, e) continue actors = imdb.get_title_credits(movie_id) actor_length = len(actors['credits']['cast']) print('Add Actors: ', end='') for actor in actors['credits']['cast'][:5 if actor_length > 5 else actor_length]: actor_id = actor['id'].split('/')[2] try: if actor_id not in actor_set: sql = ('INSERT INTO movie_actor VALUES (\'{}\',\'{}\',\'{}\')'.format( actor_id, single_quote(str(actor['name'])), single_quote(str(actor['image']['url'])))) execute_sql(sql) actor_set[actor_id] = '' print(actor_id + ' success; ', end='') else: print(actor_id + ' existed; ', end='')
def moviedetails(sresult, seasonnum): imdbp = Imdb() tv_result = ia.search_movie(sresult) print("sresult", sresult, tv_result) for item in tv_result: print("--------MOVIE DETAILS IMDB---------------") #print(type(item)) i.update(item) #print(item) print(item['long imdb title'], item.movieID) #print(ia.get_movie[item.movieID]) print(sresult) print((item['long imdb title'])) #ia.update(item) try: m = imdbp.get_title_episodes(str("tt" + item.movieID)) except: continue #m=(i.get_movie(item.movieID)) print("ID FOR TV and SEASON", m, seasonnum) if m == None or math.isnan(seasonnum): continue print("Updating episodes") seasonnum = int(seasonnum) - 1 g.write(str(sresult) + ";" + str(seasonnum + 1)) g.write("\n") try: #print(item['long imdb title']) print("______________EPISODES_______________\n") #print(m['episodes']) #for t in m['seasons'][seasonnum]: if 'seasons' in m.keys(): if 'episodes' in m['seasons'][seasonnum].keys(): for u in range(0, len(m['seasons'][seasonnum]['episodes'])): e = m['seasons'][seasonnum]['episodes'][u]['title'] g.write("\n") g.write(str(e) + "%") g.write("\n") print(str(e)) match = re.search( '/title/(.*)/', m['seasons'][seasonnum]['episodes'][u]['id']) titleid = match.group(1) #i.update(e) #details = i.get_movie(e.movieID) #i.update(details,'all') #print("DETAILS KEYS",details.keys()) #x = i.get_movie_infoset() #print("INFOSET",x) #print("MOVIE WRITER",details['writer']) #print("MOVIE DIRECTOR",details['director']) print("MOVIE ID", titleid) persondetail = imdbp.get_title_credits(str(titleid)) if 'writer' in persondetail['credits'].keys(): for index, item in enumerate( persondetail['credits']['writer']): #if persondetail['credits']['writer'][index]['job']=='written by': if 'job' in persondetail['credits']['writer'][ index].keys(): g.write( str(persondetail['credits']['writer'] [index]['name']) + ";" + str(persondetail['credits']['writer'] [index]['job'])) else: g.write( str(persondetail['credits']['writer'] [index]['name']) + ";" + "writer") match = re.search( '/name/nm(.*)/', persondetail['credits'] ['writer'][index]['id']) idofactor = match.group(1) persondetails( str(persondetail['credits']['writer'] [index]['name']), idofactor, 'crew') g.write("\n") if 'director' in persondetail['credits'].keys(): for index, item in enumerate( persondetail['credits']['director']): if persondetail['credits']['director'][index][ 'category'] == 'director': g.write( str(persondetail['credits']['director'] [index]['name']) + ";" + "director") match = re.search( '/name/nm(.*)/', persondetail['credits']['director'] [index]['id']) idofactor = match.group(1) persondetails( str(persondetail['credits']['director'] [index]['name']), idofactor, 'crew') g.write("\n") if 'producer' in persondetail['credits'].keys(): for index, item in enumerate( persondetail['credits']['producer']): #if persondetail['credits']['producer'][index]['job']=='producer' or persondetail['credits']['producer'][index]['job']=='executive producer': if 'job' in persondetail['credits'][ 'producer'][index].keys(): g.write( str(persondetail['credits']['producer'] [index]['name']) + ";" + str(persondetail['credits']['producer'] [index]['job'])) else: g.write( str(persondetail['credits']['producer'] [index]['name']) + ";" + "producer") match = re.search( '/name/nm(.*)/', persondetail['credits'] ['producer'][index]['id']) idofactor = match.group(1) persondetails( str(persondetail['credits']['producer'] [index]['name']), idofactor, 'crew') g.write("\n") #break print("_______END EPISODES___________\n") except UnicodeEncodeError as ude: continue
class Movie: def __init__(self): self.imdb = Imdb() self.reviews = None self.chartdata = None self.director = None self.commentbasedrating = 0 self.title = None self.poster = None self.durationMin = None self.rating = 0 self.id = None self.summary = None self.outline = None self.cast = None self.directors = None def SetAfterInit(self, dict): self.dict = dict self.id = dict['base']['id'].split('/')[2] if 'base' in self.dict: if 'title' in self.dict['base']: self.title = self.dict['base']['title'] if 'runningTimeInMinutes' in self.dict['base']: self.durationMin = self.dict['base']['runningTimeInMinutes'] if 'image' in self.dict['base']: if 'url' in self.dict['base']['image']: self.poster = self.dict['base']['image']['url'] if 'ratings' in self.dict: if 'rating' in self.dict['ratings']: self.rating = float(self.dict['ratings']['rating']) if 'plot' in self.dict: if 'outline' in self.dict['plot']: if 'text' in self.dict['plot']['outline']: self.outline = self.dict['plot']['outline']['text'] if 'summaries' in self.dict['plot']: if len(self.dict['plot']['summaries']) > 0: self.summary = self.dict['plot']['summaries'][0]['text'] def SetAfterSearch(self, dict): self.id = dict['id'] self.title = dict['title'] self.poster = dict['poster'] self.durationMin = dict['durationMin'] self.rating = dict['rating'] self.outline = dict['outline'] self.summary = dict['summary'] def AnalyzeReviews(self): self.GetReviews() if self.reviews != None: self.SetCommentbasedrating() self.GenerateChartData() def GetReviews(self): reviews_temp_load = self.imdb.get_title_user_reviews(self.id) if 'reviews' in reviews_temp_load: reviews_temp = reviews_temp_load['reviews'] self.reviews = [] for review in reviews_temp: review_temp = UserReview(review['helpfulnessScore'], review['reviewText']) self.reviews.append(review_temp) def SetCommentbasedrating(self): scoreSum = 0 for review in self.reviews: scoreSum += review.commentbasedrating self.commentbasedrating = scoreSum / len(self.reviews) def GenerateChartData(self): cd = ChartData(self.reviews) cd.SetDataHelpfulness(self.reviews) cd.SetDataCommentbasedrating(self.reviews) self.chartdata = cd def SetCast(self): dict = self.imdb.get_title_credits(self.id) if 'credits' in dict: if 'cast' in dict['credits']: self.cast = dict['credits']['cast'] if 'director' in dict['credits']: self.directors = dict['credits']['director'] def GetJSONSearch(self): listReviews = [] if self.reviews != None: for review in self.reviews: listReviews.append(review.GetJSON()) cd = {} if self.chartdata != None: cd = self.chartdata.GetJSON() dict = { "id": self.id, "title": self.title, "poster": self.poster, "durationMin": self.durationMin, "rating": self.rating, "outline": self.outline, "summary": self.summary, "cast": self.cast, "directors": self.directors, "reviews": listReviews, "commentbasedrating": self.commentbasedrating, "chartdata": cd } return dict
movie.rate = imdbmovie['ratings']['rating'] movie.plot = single_quote(movie.plot) movie.trailer = single_quote( str( imdb.get_title_videos(movie_id)['videos'][0]['encodings'] [0]['play'])) movie.poster = single_quote(imdbmovie['base']['image']['url']) movie.title = single_quote(movie.title) movie.movieid = movie_id print('Add Movie id ', movie_id) if mngDb.add_movie(movie): moviesnames.append(movie.title) except Exception as ex1: print('Exception at 51', ex1) actors_imdb = imdb.get_title_credits(movie_id) actor_length = len(actors_imdb['credits']['cast']) print('Add Actors: ', end='') actors = str(movie.actors).split(',') for actor in actors_imdb['credits'][ 'cast'][:5 if actor_length > 5 else actor_length]: name = str(single_quote(str(actor['name']))) if name in actorsnames: continue print('Manage Actor', actor) actor_id = str(actor['id'].split('/')[2]) try: url = str(single_quote(str(actor['image']['url']))) except: url = ''