Exemple #1
0
    def get(self, request, *arg, **kwargs):

        ia = Imdb()

        #pass int argument between 1-100 to get a list
        #of the top movies right now
        numtop = 50
        top100 = ia.get_popular_movies()
        tosend = []

        index = 0

        for m in top100['ranks']:
            index = index + 1
            if index > int(numtop):
                break
            m_dict = {}
            imdbId =  m['id'][7:16]
            m_dict['imdbId'] = str(imdbId)
            m_dict['title'] = str(m['title'])
            m_dict['posterUrl'] = str(m['image']['url'])
            m_dict['year'] = str(m['year'])
            tosend.append(m_dict)

        try:
            return HttpResponse(json.dumps(tosend))
        except ValueError:
            return HttpResponse("ValueError, int between 1-100 plz", status = 400)
Exemple #2
0
    def post(self, request, *arg, **kwargs ):
        content = request.data
        ia = Imdb()

        try:
            #pass in imdb movie id to get movie details
            data = content['movieId']
            try:
                movie = ia.get_title(data)
                return HttpResponse(json.dumps(movie))
            except ValueError:
                return HttpResponse("Invalid IMDB id", status = 400)
        except KeyError:
            pass




        try:
            #pass int argument between 1-100 to get a list
            #of the top movies right now
            numtop = content['top']
            top100 = ia.get_popular_movies()
            tosend = []

            index = 0

            for m in top100['ranks']:
                index = index + 1
                if index > int(numtop):
                    break
                m_dict = {}
                imdbId =  m['id'][7:16]
                m_dict['imdbId'] = str(imdbId)
                m_dict['title'] = str(m['title'])
                m_dict['posterUrl'] = str(m['image']['url'])
                m_dict['year'] = str(m['year'])
                tosend.append(m_dict)
    
            try:
                return HttpResponse(json.dumps(tosend))
            except ValueError:
                return HttpResponse("ValueError, int between 1-100 plz", status = 400)
        except KeyError:
            pass


        try:
            #pass imdb id to get a list of similar titles
            data = content['similar']
            try:
                similarTitles = ia.get_title_similarities(data)
                return HttpResponse(json.dumps(similarTitles))
            except ValueError:
                return HttpResponse("Invalid IMDB id", status = 400)
        except KeyError:
            return HttpResponse('Request Not Understood.', status = 400)
Exemple #3
0
    def query_movie(self, query, data):

        imdb = Imdb()
        res = ""
        if query == "popularshows":
            ans = imdb.get_popular_shows()
            for i in range(10):
                res += ans['ranks'][i]['title'] + "\n"
        elif query == "popularmovies":
            ans = imdb.get_popular_movies()
            for i in range(10):
                res += ans['ranks'][i]['title'] + "\n"
        elif query == "search":
            ans = imdb.search_for_title(data)
            for i in range(5):
                res += ans[i]['title'] + "\n"
        return res
    def query_movie(self, message, bot_handler: Any):

        imdb = Imdb()
        res = ""
        query = message['content'].split()[1]
        if query == "popularshows":
            ans = imdb.get_popular_shows()
            for i in range(10):
                res += ans['ranks'][i]['title'] + "\n"
        elif query == "popularmovies":
            ans = imdb.get_popular_movies()
            for i in range(10):
                res += ans['ranks'][i]['title'] + "\n"
        elif query == "search":
            data = message['content'].split()[2]
            ans = imdb.search_for_title(data)
            for i in range(5):
                res += ans[i]['title'] + "\n"
        else:
            res += "No movie reponse found. \n Use `@Savior help` for commands"
        return res
Exemple #5
0
def moviedata():
    imdb = Imdb()
    pop_items = imdb.get_popular_movies()
    dict = pop_items['ranks']
    d = []
    r = []
    moviedetails = []
    n_list = []
    for i in range(0, 12):
        tempdict = {}
        movie_id = dict[i]['id']
        ls = movie_id.split('/')
        rating = imdb.get_title_ratings(ls[2])
        url = dict[i]['image']['url']
        tempdict[ls[2]] = dict[i]['title']
        d.append(url)
        d.append(tempdict)
        t = str(dict[i]['year'])
        d.append(dict[i]['title'] + ("(" + t + ")"))

        # r.append("(" + t + ")")

        # rg=int(rating['rating']) / 2

        try:
            rg = rating['rating'] / 2
            d.append(rg)
        # print(rating['rating'])
        except:
            d.append(0)

        n_list.append(d)
        # print(r)
        # moviedetails.append(r)
        d = []
        # r = []
    #print(n_list)
    return (n_list)
Exemple #6
0
class MovieList:
    def __init__(self):
        tmdbsimple.API_KEY = settings.TMDB_API_KEY

        self.filename = "movies.db"
        self.full_path = db_full_path(self.filename)

        if self.filename not in db_cons or not db_cons[self.filename]:
            movie.Session.configure(
                bind=create_engine(f"sqlite:///{self.full_path}",
                                   echo=True,
                                   connect_args={"check_same_thread": False},
                                   json_serializer=lambda obj: json.dumps(
                                       obj, ensure_ascii=False)))
            self.session: Session = movie.Session()
            movie.Base.metadata.create_all(self.session.bind, checkfirst=True)

            db_locks[self.filename] = threading.Lock()
            db_cons[self.filename] = self.session
        else:
            self.session: Session = db_cons[self.filename]

        self.imdb = Imdb(exclude_episodes=True)

    def __iter__(self):
        for item in self.query.all():
            yield item

    def __getitem__(self, pk):
        return self.query.get(pk)

    def __contains__(self, pk):
        try:
            self.__getitem__(pk)
            return True
        except KeyError:
            return False

    @staticmethod
    def search_tmdb(query=None,
                    tmdb_id=None,
                    year=None,
                    language=None,
                    adult=False):
        if tmdb_id:
            results = [movies.Movies(id=tmdb_id)]
        elif query:
            tmdb_kwargs = dict(query=query,
                               year=year,
                               language=language,
                               adult=adult)
            tmdb_kwargs = {
                key: value
                for key, value in tmdb_kwargs.items() if value
            }
            results = search.Search().movie(**tmdb_kwargs)['results']
        else:
            raise Exception('Query or tmdb id is required!')

        return results

    @staticmethod
    def popular_tmdb(language=None):
        tmdb_kwargs = dict(language=language) if language else dict()
        return movies.Movies().popular(**tmdb_kwargs)['results']

    def search_imdb(self, query: str = ''):
        return self.imdb.search_for_title(title=query)

    def popular_imdb(self):
        return self.imdb.get_popular_movies()['ranks']

    def add_from_tmdb(self,
                      tmdb_id: str,
                      language: str = settings.INDEXER_DEFAULT_LANGUAGE):
        logger.debug(f'Adding movie from tmdb with id: {tmdb_id}')
        existing = self.session.query(
            movie.IndexerData).filter_by(pk=tmdb_id).first()
        if existing:
            logger.debug(f'Movie already existed as {existing.movie.name}')
            return existing.movie

        tmdb_object = tmdbsimple.movies.Movies(id=tmdb_id).info()
        return self.add_from_imdb(tmdb_object['imdb_id'],
                                  language,
                                  tmdb_primary=True)

    def add_from_imdb(self,
                      imdb_id: str,
                      language: str = settings.INDEXER_DEFAULT_LANGUAGE,
                      tmdb_primary=False):
        if not tmdb_primary:
            logger.debug(f'Adding movie from imdb id: {imdb_id}')

        existing = self.session.query(
            movie.IndexerData).filter_by(pk=imdb_id).first()
        if existing:
            logger.debug(f'Movie already existed as {existing.movie.name}')
            return existing.movie

        imdb_object = self.imdb.get_title(imdb_id)
        tmdb_id = tmdbsimple.find.Find(id=imdb_id).info(
            external_source='imdb_id')['movie_results'][0]['id']
        tmdb_object = tmdbsimple.movies.Movies(id=tmdb_id).info()

        if tmdb_primary:
            instance = movie.Movie(
                tmdb_object['title'],
                year=tmdb_object['release_date'].split('-')[0])
            if imdb_object['base']['title'] and not instance.name:
                instance.name = imdb_object['base']['title']
        else:
            instance = movie.Movie(imdb_object['base']['title'],
                                   year=imdb_object['base']['year']
                                   or tmdb_object)
            if tmdb_object['release_date'] and not instance.year:
                instance.year = tmdb_object['release_date'].split('-')[0]
            if tmdb_object['title'] and not instance.name:
                instance.name = tmdb_object['title']

        if tmdb_object['release_date']:
            instance.date = datetime.datetime.strptime(
                tmdb_object['release_date'], '%Y-%m-%d').date()

        instance.language = tmdb_object['original_language'] or language

        tmdb_data = movie.IndexerData(site='tmdb',
                                      data=tmdb_object,
                                      pk=tmdb_id)
        imdb_data = movie.IndexerData(site='imdb',
                                      data=imdb_object,
                                      pk=imdb_id)

        imdb_genres = self.imdb.get_title_genres(imdb_id)['genres']

        def add_imdb_genres():
            for genre in imdb_genres:
                logger.debug(f'Adding imdb genre {genre}')
                imdb_data.genres.append(movie.Genres(pk=genre))
            instance.indexer_data.append(imdb_data)

        def add_tmdb_genres():
            for genre in tmdb_object['genres']:
                if genre['name'] not in imdb_genres:
                    logger.debug(f'Adding tmdb genre {genre["name"]}')
                    tmdb_data.genres.append(movie.Genres(pk=genre['name']))
            instance.indexer_data.append(tmdb_data)

        if tmdb_primary:
            add_tmdb_genres()
            add_imdb_genres()
        else:
            add_imdb_genres()
            add_tmdb_genres()

        self.commit(instance)

        logger.debug(f'Returning instance for {instance.name}')
        return instance

    def commit(self, instance=None):
        logger.debug('Committing')
        if instance:
            self.session.add(instance)
        self.session.flush()
        self.session.commit()

    def delete(self, pk):
        instance = self.query.get(pk)
        if instance:
            self.session.delete(instance)

    @property
    def query(self):
        return self.session.query(movie.Movie)

    def by_slug(self, slug):
        return self.query.filter_by(slug=slug).first()

    def search_providers(self, movie_object: movie.Movie):
        # We should only need to support backlog for movies manually
        # Movies should be returned in the existing RSS searches if we have movies in our list
        strings = movie_object.search_strings()
        for provider in settings.providerList:
            if provider.can_backlog and provider.backlog_enabled and provider.supports_movies:
                results = provider.search(strings)
                for result in results:
                    movie.Result(result=result,
                                 provider=provider,
                                 movie=movie_object)

            self.commit(movie_object)
            # TODO: Check if we need to break out here and stop hitting providers if we found a good result

    def snatch_movie(self, result: movie.Result):
        pass

    def search_thread(self):
        pass