Exemple #1
0
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
        })
Exemple #2
0
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)
Exemple #3
0
                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
Exemple #5
0
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
Exemple #6
0
            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 = ''