Esempio n. 1
0
    def get_genre_based_recommendations(self, max_recommendations):
        """
        Returns movie recommendations solely based on personality-genre associations.
        Returns the recommendations as well as the list of genres for this user.
        """
        genres = get_genres_for_user(self, max_distance=2, max_genres=4)

        genre_ids = [
            g['id'] for g in tmdb.Genres().movie_list()['genres']
            if g['name'] in genres
        ]

        recommendations = []

        args = {
            'page': 1,
            'vote_count_gte': 20,
            'vote_average_gte': 7,
            'sort_by': 'vote_average.desc'
        }

        # If at least one rule can be applied, predict movies of the associated genres with a high rating.
        # Otherwise, just predict movies of all genres with high ratings.
        if len(genres) > 0:
            args['with_genres'] = genre_ids

        recs = tmdb.Discover().movie(**args)
        recommendations += recs['results']
        rated_movie_ids = [
            r.movie.tmdb_id for r in Rating.objects.filter(rated_by=self)
        ]

        # Filter out movies that the user has already seen
        recommendations = [
            r for r in recommendations if r['id'] not in rated_movie_ids
        ]

        while len(recommendations) < max_recommendations and recs[
                'page'] < recs['total_pages']:
            args['page'] += 1
            recs = tmdb.Discover().movie(**args)
            recommendations += recs['results']
            # Filter out movies that the user has already seen
            recommendations = [
                r for r in recommendations if r['id'] not in rated_movie_ids
            ]

        if len(recommendations) > max_recommendations:
            recommendations = recommendations[:max_recommendations]

        # Save recommended Movies in DB
        for rec in recommendations:
            movie = Movie.objects.filter(tmdb_id=rec['id'])
            if not movie.exists():
                Movie(tmdb_id=rec['id'], title=rec['title']).save()

        return recommendations, genres
Esempio n. 2
0
    def discover_by_filter(self, content_type, **kwargs):
        """Filter by keywords or any other TMDB filter capable arguements.
        (see tmdbsimple discover.movie and discover.tv)

        Args:
            content_type: String containing "movie" or "tv".
            # Additional kwargs #
            keyword: A single String or a List of strings.
            _______: Any other values supported by tmdbsimple discover.movie or discover.tv.
        """
        try:
            if kwargs.__contains__("keyword"):
                # Convert all keywords to IDs
                keyword_ids = self.__keywords_to_ids(kwargs["keyword"])
                if keyword_ids is not None:
                    kwargs["with_keywords"] = keyword_ids

                # Remove keyword strings (invalid parameters)
                kwargs.__delitem__("keyword")

            # Perform a discovery search for a movie
            if content_type.lower() == "movie":
                return cache.handler(
                    "discover movie cache",
                    function=tmdb.Discover().movie,
                    page_key=str(kwargs),
                    cache_duration=DISCOVER_BY_FILTER_CACHE_TIMEOUT,
                    **kwargs,
                )

            # Perform a discovery search for a TV show
            if content_type.lower() == "tv":
                return cache.handler(
                    "discover tv cache",
                    function=tmdb.Discover().tv,
                    page_key=str(kwargs),
                    cache_duration=DISCOVER_BY_FILTER_CACHE_TIMEOUT,
                    **kwargs,
                )

            # Content Type was invalid
            log.handler(
                "Invalid content_type " + str(content_type) +
                " in discover().",
                log.WARNING,
                self.__logger,
            )
            return {}

        except:
            log.handler("Failed to discover!", log.ERROR, self.__logger)
            return {}
Esempio n. 3
0
def getMoviesByYear(year, dbFileName):

    # get total pages from discovery query
    while (True):
        try:
            discover = tmdb.Discover()
            discoverResponse = discover.movie(page=1,
                                              language='en-US',
                                              sort_by='release_date.asc',
                                              include_adult=True,
                                              primary_release_year=year)
            numPages = discover.total_pages
            break
        except:
            print(
                f'\tError when getting page number, retrying in {retry_time} secs'
            )
            time.sleep(retry_time)

    # iterate through each page and get info
    for currentPage in range(1, numPages + 1):
        print(f'Page: {currentPage} / {numPages}')

        while (True):
            try:
                discover = tmdb.Discover()
                discoverResponse = discover.movie(page=currentPage,
                                                  language='en-US',
                                                  sort_by='release_date.asc',
                                                  include_adult=True,
                                                  primary_release_year=year)
                break
            except:
                print(f'Error when getting page, retying in {retry_time} secs')
                time.sleep(retry_time)

        for item in discover.results:

            discoverId = item['id']

            # get Movies by id because discover does not include all info
            movieRow = getMovie(discoverId)
            # moviesDf = moviesDf.append(movieRow)

            # append movie to csv file
            movieRow.to_csv(dbFileName,
                            mode='a',
                            header=False,
                            encoding='utf-8')
Esempio n. 4
0
    def discover_tv_by_filter(self,
                              filter_name,
                              page_number,
                              page_multiplier=1,
                              add_values=(),
                              **kwargs):
        """Obtains TV results based on a predefined filter name."""
        if filter_name == "custom":
            filter_params = kwargs
        else:
            filter_params = tv_filters(filter_name,
                                       slug=True,
                                       add_values=add_values)

        return self._set_content_attributes(
            "tv",
            self._multi_page_fetch(
                "discover filter " + filter_name + " tv",
                tmdb.Discover().tv,
                page_number,
                page_multiplier,
                timezone=_timezone,
                **filter_params,
            ),
        )
Esempio n. 5
0
def getPopularTvWithGenre(genreList=[], pageNum=1):
    tmdbdiscover = tmdb.Discover()
    genreQuery = ""

    for genre in genreList:
        # If the genre is a string, find the associated ID
        if (isinstance(genre, str)):
            genreId = getGenreId(genre)
            genreQuery += str(genreId) + ","
        else:
            genreQuery += str(genre) + ","

    # If the genreQuery is not empty (i.e. specific genres were given, remove the trailing comma)
    if (genreQuery != ""):
        genreQuery = genreQuery[:-1]

    response = tmdbdiscover.tv(with_genres=genreQuery, page=pageNum)
    popularTvListWithGenre = []

    for item in response["results"]:
        popularTvListWithGenre.append(
            Tv(item["name"], item["id"], item["vote_average"],
               item["genre_ids"], item["overview"], str(item["poster_path"])))

    return popularTvListWithGenre
Esempio n. 6
0
def getPopularMoviesWithGenre(genreList=[], pageNum=1):
    tmdbdiscover = tmdb.Discover()
    genreQuery = ""

    for genre in genreList:
        # If the genre is a string, find the associated ID
        if (isinstance(genre, str)):
            genreId = getGenreId(genre)
            genreQuery += str(genreId) + ","
        else:
            genreQuery += str(genre) + ","

    if (genreQuery != ""):
        genreQuery = genreQuery[:-1]

    response = tmdbdiscover.movie(with_genres=genreQuery, page=pageNum)
    popularMovieListWithGenre = []

    for item in response["results"]:
        popularMovieListWithGenre.append(
            Movie(item["title"], item["id"],
                  item["vote_average"], item["genre_ids"], item["overview"],
                  str(item["poster_path"])))

    return popularMovieListWithGenre
Esempio n. 7
0
def get_movie_agg(d_d, pages, max=10):
    movie_agg = []
    for page in range(1, pages):
        d_d['page'] = page
        movie_l = tmdb.Discover().movie(**d_d)
        movie_l = movie_l['results']

        # 获取该列表每个元素的detail
        for movie in movie_l:
            try:
                detail = get_movie_detail(movie['id'])
                if detail:
                    movie_agg.append(detail)
                if len(movie_agg) >= max:
                    return sorted(movie_agg,
                                  key=lambda movie: bool(movie['subtitle']),
                                  reverse=True)
            except:
                print('-' * 30)
                traceback.print_exc()
                pprint(movie)
                print('-' * 30)
    return sorted(movie_agg,
                  key=lambda movie: bool(movie['subtitle']),
                  reverse=True)
Esempio n. 8
0
 def get_cast_names(self):
     # Get the top movies for a year (10 per page)
     kwargs = {'primary_release_year': self.year, 'page': '1'}
     disc_obj = tmdb.Discover()
     top = disc_obj.movie(**kwargs)
     movies = top['results']
     movie_ids = []
     for item in movies:
         movie_ids.append(item['id'])
     for id in movie_ids:
         movie = tmdb.Movies(id)
         response = movie.info()
         print(movie.title)
         cast = movie.credits()['cast']
         names_list = []
         for value in cast:
             if not self.has_numbers(value['character']):
                 for n in value['character'].split(' '):
                     if n == '(voice)' or n is '/' or n is '|':
                         continue
                     names_list.append(n)
             for n in value['name'].split(' '):
                 names_list.append(n)
         print(names_list)
         self.count_instances(movie.title, names_list)
Esempio n. 9
0
def tmdb_api_discover(args):
    """TMDB API call to discover movie from the filter"""
    tmdb.API_KEY = _tmdb['apikey']
    discover = tmdb.Discover()
    kwargs = {
        'page': 1,
        'vote_average.gte': 6,
        'year': 2015,
        'with_genres': 35
    }
    if args.type == "movies":
        response = discover.movie(**kwargs)
    else:
        response = discover.tv(**kwargs)
    if args.verbose:
        print("TMDB fetched page {page} of {total} pages".format(
            total=response['total_pages'], page=response['page']))
    print("TMDB found {total} items".format(total=response['total_results']))
    results = response['results']
    while int(response['page']) < int(response['total_pages']):
        kwargs = {
            'page': response['page'] + 1,
            'vote_average.gte': 6,
            'year': 2015,
            'with_genres': 35
        }
        response = discover.movie(**kwargs)
        if args.verbose:
            print("TMDB fetched page {page} of {total} pages".format(
                total=response['total_pages'], page=response['page']))
        results += response['results']
    return results
Esempio n. 10
0
def createCorpus(filename, pagesMax=1000):
    """
        Load and store abstracts on TMDB, in text file
        
        Parameters:
            filename -> String, name of the file where resumes will be stored
            pagesMax -> int, number of page to download from tmdb (default: pagesMax=1000)
    """

    fileAbstracts = codecs.open(filename, "w", 'utf-8')

    # Download stopwords if not present
    if not isdir(path[0]):
        from nltk import download
        download("stopwords")


#    cachedStopWords = stopwords.words("english")

    for i in range(1, pagesMax):
        #        response = tmdb.discover.movie(page=i)
        response = tmdb.Discover().movie(page=i)
        filmsNb = len(response[u'results'])
        for j in range(filmsNb):
            abstract = response[u'results'][j][u'overview']
            abstract = PreprocessText.preProcessingAbstracts(abstract)
            fileAbstracts.write(abstract + '\n')
        print "Creation of abstracts corpus : page %d / %d" % (i, pagesMax)

    fileAbstracts.close()
Esempio n. 11
0
    def get_serials_from_api(self, attr):
        search = tmdb.Discover()
        for year in self.years:
            response = search.tv(sort_by="release_date.desc", first_air_date_year=year, page=1)
            array = self.response_to_serials(response)
            self.write_to_csv(array)

            total = response['total_pages']
            self.count = total
            for number in range(1, total+1):
                response = search.tv(sort_by="release_date.desc", first_air_date_year=year, page=number)
                array = self.response_to_serials(response)
                self.write_to_csv(array)

                self.page+=1

            try:
                from telegram import bot
                bot.send(msg=self.msg_pattern.format(year, self.count, self.errors,self.page))
            except Exception as e:
                print(e)
            self.count = 0
            self.errors = 0
            self.page=0
        try:
            from telegram import bot
            bot.send(msg="end TV")
        except Exception as e:
            print(e)
def loaddata(year):
    page = totalpages = 1
    omdblink = 'http://www.omdbapi.com/?i={}&plot=full&r=json&tomatoes=true'

    data = []

    discover = tmdb.Discover()
    while page <= totalpages:
        try:
            response = discover.movie(year = year, page = page)
            totalpages = int(response['total_pages'])

            movies = response['results']
            for m in movies:
                movie = tmdb.Movies(m['id']).info()
                req = urllib.request.urlopen(omdblink.format(movie['imdb_id']))
                resp = req.read().decode('utf-8')
                addinfo = json.loads(resp)
                movie.update(addinfo)
                if movie['budget'] == 0: continue
                if movie['Response'] == 'False': continue
                if movie['imdbRating'] == 'N/A': continue
                data.append(movie)
                    
            print('progress: {}/{} - {}% ({})'.format(page,totalpages,
                                        round(page/totalpages*100,2),len(data)))
        except Exception as e:
            print('An error has occurred:\n{}'.format(e))
        page += 1
        time.sleep(10)  # because of the request rate limit

    print('completed!')
    return data
def lambda_handler(event, context):

    if (event is None):
        return response(None, "nothing")

    # check api key
    if (event.get('headers').get('isobar-api-key') !=
            os.environ['ISOBAR_API_KEY']):
        return response(None, "key error")

    if (event.get('body') is None):
        return response(None, "no body")

    raw_body = event.get('body')
    body = json.loads(raw_body)
    result = body.get('result')

    # print("Received event: " + json.dumps(event, indent=2))
    # return response(Exception('Invalid request token'))

    # print("API KEY: "+os.environ['TMDB_API_KEY'])
    tmdb.API_KEY = os.environ['TMDB_API_KEY']

    # current year
    now_year = datetime.datetime.now().year

    # language
    lang = 'zh-TW'
    # searching-movie-by-date
    # print("Action: "+ event["result"]["action"])
    action = result["action"]
    # params
    date = result["parameters"]["date"][:4]
    if (len(date) < 1):
        date = now_year
    # print("Period: "+ event["result"]["parameters"]["date-period"])
    # print("year: "+ event["result"]["parameters"]["date-period"][:4])
    period = result["parameters"]["date-period"][:4]
    if (len(period) < 1):
        period = date

    # discover top 10
    discover = tmdb.Discover()

    speech = ''
    if (action == 'searching-movie-by-date'):
        result = discover.movie(page=1,
                                sort_by="popularity.desc",
                                language=lang,
                                year=period)
        for m in result['results'][:10]:
            speech = speech + m['title'] + ','
    if (len(speech) > 0):
        speech = str(period) + '年 好看的電影如下 ' + speech
        return response(None, speech[:-1])
    else:
        return response(None, '')
Esempio n. 14
0
def get_data():
    title = []
    image = []

    discover = tmdb.Discover()
    response = discover.movie(sort_by='popularity.desc')
    for c in discover.results:
        title.append(c['title'])
        image.append('http://image.tmdb.org/t/p/w500' + c['poster_path'])

    return title, image
Esempio n. 15
0
def add_filter(request, type):
    genre_lists = []
    genres = []
    movies = getTopRatedMovies()

    genre_lists = getGenres(type)
    genres = ', '.join([str(elem) for elem in request.POST.getlist('genres')])

    filter_request = request.POST.copy()
    if request.method == 'POST':
        filter_request.pop("csrfmiddlewaretoken")
        if request.POST.get("genres"):
            filter_request.pop("genres")
        filter_request['with_genres'] = genres
        filter_request['include_adult'] = False

    movies = tmdb.Discover().movie(**filter_request)
    tv = tmdb.Discover().tv(**filter_request)

    return [genre_lists, movies, tv]
Esempio n. 16
0
def load_data() -> List[Dict[str, Any]]:
    discover = tmdb.Discover()

    data: List = []

    with ProgressBar(title=MD('**Discovering Movies:**')) as pb:

        def add_discover(page_num: int):
            data.extend(discover.movie(page=page_num)['results'])

        with ThreadPoolExecutor(max_workers=5) as executor:
            future = [
                executor.submit(add_discover, i)
                for i in range(1, TOTAL_PAGES + 1)
            ]

            for _ in pb(as_completed(future),
                        label='Querying TMDB:',
                        total=TOTAL_PAGES):
                pass

    print()

    with ProgressBar(title=MD('**Compiling Information:**')) as pb:

        def scan_crew(movie: Dict[str, Any]):
            movie['year'] = movie['release_date'][:4]

            crew = tmdb.Movies(movie['id']).credits()['crew']

            for person in crew:
                if person['job'] == 'Director':
                    if 'directors' not in movie:
                        movie['directors'] = [person]

                    else:
                        movie['directors'].append(person)

        with ThreadPoolExecutor(max_workers=10) as executor:
            future = [executor.submit(scan_crew, movie) for movie in data]

            for _ in pb(as_completed(future),
                        label='Scanning Cast and Crew:',
                        total=len(data)):
                pass

    data = list(filter(lambda x: 'directors' in x, data))

    print()

    with open('data/movies.json', 'w') as f:
        json.dump(data, f)

    return data
Esempio n. 17
0
 def create_movies(cls):
     tmdb.API_KEY = 'f1a02539ea044b6d67a19c6bb2025b94'
     for i in range(1, 26, 1):
         discover = tmdb.Discover()
         response = discover.movie(page=i, sort_by='popularity.desc')
         for s in discover.results:
             movie = tmdb.Movies(s['id'])
             response = movie.info()
             moviee = Movie(movie.id, movie.revenue, movie.title,
                            movie.release_date, movie.backdrop_path,
                            movie.budget, movie.vote_average)
             moviee.save_to_db()
Esempio n. 18
0
    def find_movies(self, request):
        args = {}

        if 'genres' in request and request['genres']:
            args['with_genres'] = ','.join(
                str(genre) for genre in request['genres'])

        if 'dates' in request and request['dates']:
            args['release_date_gte'] = request['dates']['from']
            args['release_date_lte'] = request['dates']['to']

        return tmdb.Discover().movie(**args)['results']
def request_v3_by_year(year, language="en", keys=None):
    possible_keys = [
        "id", "genre_ids", "title", "original_title", "video",
        "original_language", "release_date", "vote_count", "vote_average",
        "popularity", "adult", "poster_path", "backdrop_path", "overview"
    ]
    retry_limit = 100
    year_of_movies = []

    if keys is None:
        requested_keys = possible_keys
    else:
        requested_keys = keys
    # Need id key (it's used as master key)
    if "id" not in requested_keys:
        requested_keys.append("id")

    discover = tmdb.Discover()
    # Get the number of pages
    for db_request in range(0, retry_limit):
        while True:
            try:
                movie_page = discover.movie(language="en",
                                            primary_release_year=year)
            except:
                log.out.debug("HTTP error, waiting and retrying.")
                time.sleep(db_request / retry_limit)
                continue
            break

    log.out.info("Adding year: " + str(year) + " (" +
                 str(movie_page["total_pages"]) + " pages)")
    for page_num in tqdm(range(1, movie_page["total_pages"] + 1)):
        for db_request in range(0, retry_limit):
            while True:
                try:
                    movie_page = discover.movie(page=page_num,
                                                language=language,
                                                primary_release_year=year)
                except:
                    log.out.debug("HTTP error, waiting and retrying.")
                    time.sleep(db_request / retry_limit)
                    continue
                break

        result_list = movie_page["results"]
        for movie_dict in result_list:
            requested_dict = {}
            for key in requested_keys:
                requested_dict[key] = movie_dict[key]
            year_of_movies.append(requested_dict)
    return year_of_movies
Esempio n. 20
0
def sort(request):
    sort_option = 'popularity.desc'
    genre_option = ''
    page = '1'
    context = {'page_type' : 'sort_and_filter'}
    tmdb.API_KEY = settings.TMDB_API_KEY

    try:
        discover = tmdb.Discover()
        config = tmdb.Configuration().info()
        POSTER_SIZE = 2

        if request.method == 'POST':
            context['status'] = 'success'
            sort_option = request.POST['sort_by']
            genre_option = request.POST['genre']

            if request.POST.__contains__('prev_page'):
                page = request.POST.get('prev_page', '2')
                pageNumber = int(page)
                page = str(pageNumber - 1)
            elif request.POST.__contains__('next_page'):
                page = request.POST.get('next_page', '0')
                pageNumber = int(page)
                page = str(pageNumber + 1)
            else:
                page = '1'

        movie_query = discover.movie(page=page, sort_by=sort_option, with_genres=genre_option, with_release_type='2|3|4|5|6')
        # For testing purposes, you can use commented query below to get result which will only return 2 pages
        # movie_query = discover.movie(page=page, sort_by=sort_option, with_genres=genre_option, vote_count_gte='6234')

        context['results'] = movie_query['results']

        context['last_page'] = 'false'
        if int(page) == movie_query['total_pages']:
            context['last_page'] = 'true'

        if len(context['results']) == 0:
            context['status'] = 'noresult'

        context['image_path'] = config['images']['base_url'] + config['images']['poster_sizes'][POSTER_SIZE]
        context['sort_selected'] = sort_option
        context['genre_selected'] = genre_option
        context['page_num'] = page
        return render(request, 'home.html', context)

    except (requests.exceptions.HTTPError, tmdb.APIKeyError)as e:
        print("THE API IS WRONG")
        context["status"] = 'failure'
        return render(request, 'home.html', context)
Esempio n. 21
0
 def get_context_data(self, **kwargs):
     context = super(MoviesPageView, self).get_context_data(**kwargs)
     context['genres'] = movie_genres
     search = self.request.GET.get('search')
     genre = self.request.GET.getlist('genre')
     if search != '' and search is not None:
         movies = tmdb.Search().movie(query=search)['results']
         genre = [ int(i) for i in genre ]
         movies = [movie for movie in movies if set(genre) == set(genre).intersection(movie['genre_ids'])]
         context['movies'] = sorted(movies, key=lambda x: x['popularity'], reverse=True)
     else:
         genre = ', '.join(genre)
         movies = tmdb.Discover().movie(sort_by='popularity.desc', with_genres=genre)['results']
         context['movies'] = movies
     return context
Esempio n. 22
0
 def get_context_data(self, **kwargs):
     context = super(TVShowsPageView, self).get_context_data(**kwargs)
     context['genres'] = tv_genres
     search = self.request.GET.get('search')
     genre = self.request.GET.getlist('genre')
     if search != '' and search is not None:
         tvshows = tmdb.Search().tv(query=search)['results']
         genre = [ int(i) for i in genre ]
         tvshows = [show for show in tvshows if set(genre) == set(genre).intersection(show['genre_ids'])]
         context['tvshows'] = sorted(tvshows, key=lambda x: x['popularity'], reverse=True)
     else:
         genre = ', '.join(genre)
         tvshows = tmdb.Discover().tv(sort_by='popularity.desc', with_genres=genre)['results']
         context['tvshows'] = tvshows
     return context
Esempio n. 23
0
    def run(self, dispatcher, tracker, domain):

        #genre from user text
        genre_name = tracker.get_slot('genre')
        if genre_name == '':
            response = "Sorry, found no genre name in that sentence. Try with different wording."
            dispatcher.utter_message(response)
            return [SlotSet('genre', genre_name)]

        genre = tmdb.Genres()
        response = genre.movie_list()
        movie_id = 0
        movie_genre = ''

        for x in range(0, len(genre.genres)):
            if genre.genres[x]['name'].lower() == genre_name:
                movie_id = genre.genres[x]['id']
                movie_genre = genre.genres[x]['name']

        discover = tmdb.Discover()
        response = discover.movie(page=1,
                                  sort_by='popularity.desc',
                                  include_adult=False,
                                  include_video=False,
                                  with_genres=movie_id)

        if len(discover.results) > 0:
            response = """Most popular {} movies:
            {}, {},
            {}, {},
            {}, {},
            {}, {},
            {}, {}.""".format(movie_genre, discover.results[0]['title'],
                              discover.results[0]['release_date'],
                              discover.results[1]['title'],
                              discover.results[1]['release_date'],
                              discover.results[2]['title'],
                              discover.results[2]['release_date'],
                              discover.results[3]['title'],
                              discover.results[3]['release_date'],
                              discover.results[4]['title'],
                              discover.results[4]['release_date'])
        else:
            response = "Searched for genre " + genre_name + " movies but found no information. Check spelling and try again."

        dispatcher.utter_message(response)
        return [SlotSet('genre', genre_name)]
Esempio n. 24
0
def home(request):
    if request.method=='GET' :
        tv_title = request.GET.get('keyword', False)
        if tv_title:
            search = tmdb.Search()
            response = search.tv(query=tv_title)
            tmdb_tv={'tvshows':search.results}
            return render(request, 'movies/home.html',tmdb_tv)
        else:
            trending=tmdb.Discover()
            response=trending.tv(vote_average=8)
            tmdb_tv={'tvshows':trending.results}
            return render(request, 'movies/home.html',tmdb_tv)
    else:
        trending=tmdb.Trending()
        response=trending.tv()
        tmdb_tv={'tvshows':trending.results}
        return render(request, 'movies/home.html',tmdb_tv)
Esempio n. 25
0
 def get_popular(self, pages=5):
     if len(self.current_movies) == 0:  # if we don't have any previous recs
         d = tm.Discover()  # Setting discovery mode for the API
         movies = []
         a = []
         for i in range(1, pages):
             movies.append(
                 d.movie(sort_by=[
                     'vote_count.desc'
                 ], page=i)['results'])  # get 5 pages with most vote counts
         flatten = [
             item for sublist in movies for item in sublist
         ]  # Since we get a list of lists of dicts we have to flatten it to one list of dicts
         flatten = sorted(flatten,
                          key=lambda k: k['vote_average'],
                          reverse=True)  # sort them by vote_average
         self.current_movies = flatten
     else:  # if we just want to sort the current selection by popularity
         self.current_movies = sorted(
             self.current_movies,
             key=lambda k: k['vote_average'],
             reverse=True)  # sort them by vote_average
Esempio n. 26
0
    def handle(self, *args, **options):
        year, curr_page, percentage = options['year'], options[
            'page'], options['percentage']
        discover = tmdb.Discover()

        response = discover.movie(primary_release_year=year, page=curr_page)
        total_pages = response['total_pages']
        needed_pages = int(total_pages * percentage / 100)

        print('Going tot process {} pages(Total: {})'.format(
            needed_pages, total_pages))
        while curr_page <= needed_pages:

            print('####################### {} page ########################'.
                  format(curr_page))
            response = discover.movie(primary_release_year=year,
                                      page=curr_page)

            ids = [item['id'] for item in response['results']]

            for id in ids:
                upload_movie(id)
            curr_page += 1
Esempio n. 27
0
    def _execute_search_preset(self, search_config) -> list:
        """Given an search preset, execute it."""
        try:
            media_type = search_config['media_type']
            discover = tmdb.Discover()
            search_args = json.loads(search_config['search_args'])

            # if the user wants to search by genre, we need to get the genre's ids first
            if 'with_genres' in search_args:
                search_args['with_genres'] = self._get_genres_id(
                    search_args['with_genres'], media_type)

            search_args['page'] = self.current_page
            search_args['language'] = self.settings['language']
            results = getattr(
                discover,
                media_type)(**search_args)  # discover.tv(), discover.movie()

            total_pages = 1
            if 'total_pages' in results:
                total_pages = results['total_pages']

            return self._create_suggestions(results['results'], total_pages,
                                            media_type)
        except tmdb.base.APIKeyError as exc:
            print(exc)
            return [
                ErrorSuggestion('TMDB API key not configured/invalid!',
                                'No results found')
            ]
        except Exception as exc:
            print(exc)
            return [
                ErrorSuggestion(
                    'There was an error trying to connect to TMDB API.',
                    'No results found')
            ]
    def next_page(self):
        if self.TotalPages and self.Page >= self.TotalPages:
            raise Exception("already got all page for year: {}".format(
                self.Year))
        discover = tmdb.Discover()
        discovered = discover.movie(primary_release_year=self.Year,
                                    include_adult=False,
                                    page=self.Page)
        movies = discovered['results']
        self.TotalPages = discovered['total_pages']
        for movieinfo in movies:
            counter = GenderCounter(movieinfo)
            insert_stmt = insert(GenderCounter).\
                values(Id=counter.Id,
                       Title=counter.Title,
                       Popularity=counter.Popularity,
                       Valid=counter.Valid,
                       Year=counter.Year,
                       Fetched=counter.Fetched)
            do_nothing_stmt = insert_stmt.on_conflict_do_nothing(
                index_elements=['Id'])
            conn.execute(do_nothing_stmt)

        self.Page += 1
Esempio n. 29
0
def get_movies(request):
  json_data = json.loads(request.body)
  print('json_data',json_data)
  params = json_data['params']

  # This is basically a list of options that will be passed to the request.
  my_kwargs = {}

  # We're looking into our params object passed in as part of our request body, and constructing our my_kwargs list based on what params exist on the params object. There may be a cleaner way to do this, though we have to parse the data within the params anyways so they have the proper, expected syntax.
  if 'genres' in params:
    genres = '|'.join(str(x) for x in params['genres'])
    my_kwargs['with_genres'] = genres
    # print('genres',genres)

  if 'dateFrom' in params:
    dateFrom = params['dateFrom']
    dateFromFormatted = dateFrom + '-01-01'
    my_kwargs['primary_release_date_gte'] = dateFromFormatted
    # print('dateFromFormatted',dateFromFormatted)

  if 'dateTo' in params:
    dateTo = str(int(params['dateTo']) + 1)
    dateToFormatted = dateTo + '-01-01'
    my_kwargs['primary_release_date_lte'] = dateToFormatted
    # print('dateToFormatted',dateToFormatted)
  
  if 'page' in params:
    my_kwargs['page'] = params['page']
    # print('page',my_kwargs['page'])

  # print('my_kwargs',my_kwargs)

  discover = tmdb.Discover()
  response_data = discover.movie(**my_kwargs)

  return JsonResponse({'tmdb_results': response_data})
Esempio n. 30
0
# -*- coding: utf-8 -*-
import tmdbsimple as tmdb
tmdb.API_KEY = '5f8e77cffdf729efe6cb173496ddf5f1'
DISCOVER_YEAR = 2018
discover = tmdb.Discover()
response = discover.movie(page=1, year=DISCOVER_YEAR)
# for i in response['results']:
#     print(i['title'])

movie = tmdb.Movies()
response = movie.now_playing()
for i in response['results']:
    print(i['original_title'])
    print(i['poster_path'])
    print(i['overview'])
    print(i['id'])
    print(i['genre_ids'])

genres = tmdb.Genres()
response = genres.movie_list(language='id')
# for i in response['genres']:
#     print(i['name'])

genres.id = '28'
response = genres.movies(page='1', language='id')
# for i in response['results']:
#     print(i['title'])