Exemple #1
0
def credits(title):
    # 인스턴스 생성
    maker = URLMaker('pass')
    # 영화 제목에 대한 id 변환
    movie_id = maker.movie_id(title)
    # movie_id가 있으면
    if movie_id:
        # credits URL 생성
        credits_url = maker.get_url('movie',
                                    f'{movie_id}/credits',
                                    region='KR',
                                    language='ko')
        res = requests.get(credits_url)
        credits_dict = res.json()

        # 배우 리스트 생성
        cast_list = [
            cast.get('name') for cast in credits_dict.get('cast')
            if cast.get('cast_id') < 10
        ]
        # 감독 리스트 생성
        crew_list = [
            crew.get('name') for crew in credits_dict.get('crew')
            if crew.get('department') == 'Directing'
        ]

        result = {'cast': cast_list, 'crew': crew_list}

        return result
    # movie_id가 None이면 None 반환
    return None
Exemple #2
0
def get_popular_movies():
    KEY = config('API_KEY')  # 진짜 key는 .env에 기록되어 있음
    urlMaker = URLMaker(KEY)  # key를 바탕으로 URLMaker의 인스턴스 선언
    url = urlMaker.get_url(
        region='KR', language='ko')  # 지역은 한국, 언어는 한국어로 popular 영화 json url 생성
    response = requests.get(url)  # 위에서 만든 url로 응답을 요청
    popular_movies = response.json().get(
        'results')  # 응답으로 받은 json을 dict로 변환하고, results를 key로 하는 value인 리스트를 추출
    return popular_movies  # popular 영화 목록을 반환
Exemple #3
0
def popular_count():
    api_key = 'b4893f302d08c4a823cdf51e8fcee9cc'  # 키
    maker = URLMaker(api_key)  # 키를 생성자로 URLMaker객체 만듬
    url = maker.get_url(region='KR', language='ko')  # movie, popular로 url 받아옴
    # print(url)
    res = requests.get(url)  # 통신 ㄱㄱ
    movie_dict = res.json()  # 영화들 정보 받아옴
    movie_list = movie_dict.get('results')  # 영화들 리스트
    
    return len(movie_list)  # 영화 리스트 길이 반환
Exemple #4
0
def top_rated_movie():
    maker = URLMaker('7108d7a0290beb4c2d99634b041130ba')
    url = maker.get_url('movie', 'top_rated')
    res = requests.get(url)
    movie_dict = res.json()
    mobie_list = movie_dict.get('results')

    result = []
    for movie in mobie_list:
        result.append(movie['title'])

    return result
Exemple #5
0
def get_data(request):
    my_url = URLMaker(TMDB_API_KEY)
    try:
        db_movie = get_list_or_404(Movie)
    except:
        pass
    for i in range(1, 1000):
        target = my_url.get_url(page=i, language='ko-KR')
        res = requests.get(target)
        movies = res.json().get('results')
        if movies:
            for movie in movies:
                # if db_movie.filter(movie_id=movie.get('id')).exists():
                #     continue
                if movie.get('vote_average') >= 7.5 and movie.get(
                        'vote_count') >= 1500 and movie.get(
                            'overview') and movie.get('backdrop_path'):
                    data = {
                        'movie_id':
                        movie.get('id'),
                        'title':
                        movie.get('title'),
                        'tmdb_score':
                        movie.get('vote_average'),
                        'popularity':
                        movie.get('popularity'),
                        'overview':
                        movie.get('overview'),
                        'release_date':
                        movie.get('release_date'),
                        'poster_path':
                        'https://www.themoviedb.org/t/p/original' +
                        movie.get('poster_path'),
                        'image':
                        'http://image.tmdb.org/t/p/w1280' +
                        movie.get('backdrop_path'),
                    }
                    serializer = MovieSerializer(data=data)
                    if serializer.is_valid(raise_exception=True):
                        serializer.save()
                        try:
                            new_movie = get_object_or_404(
                                Movie, movie_id=movie.get('id'))
                            for genre_id in movie.get('genre_ids'):
                                target_genre = get_object_or_404(
                                    Genre, number=genre_id)
                                new_movie.genre.add(target_genre)
                        except:
                            print(movie.get('title'))
        else:
            break

    return JsonResponse({'success': True})
Exemple #6
0
def popular_count():
    # 인스턴스 생성
    maker = URLMaker('pass')
    # 영화 리스트 조회 URL 생성
    url = maker.get_url('movie', 'popular')

    # requests 패키지를 이용하여 URL에 요청
    res = requests.get(url)
    # json 변환
    movie_dict = res.json()
    # 영화 리스트의 개수 계산
    result = len(movie_dict.get('results'))
    return result
Exemple #7
0
def vote_average_movies():
    api_key = 'b4893f302d08c4a823cdf51e8fcee9cc'
    maker = URLMaker(api_key)
    url = maker.get_url(region='KR', language='ko')
    res = requests.get(url)
    movie_dict = res.json()
    movie_list = movie_dict.get('results')

    result = []
    for movie in movie_list:
        if movie.get('vote_average') > 8.0:  # 영화들 중에서 평점이 8점 이상인 것만
            result.append(movie)  # 결과에 추가

    return result
Exemple #8
0
def get_response(title, feature):
    KEY = config('API_KEY')  # 진짜 key는 .env에 기록되어 있음
    urlMaker = URLMaker(KEY)  # key를 바탕으로 URLMaker의 인스턴스 선언
    id = urlMaker.movie_id(
        title)  # title을 바탕으로 tmdb.py에 있는 movie_id 메서드를 이용해, 해당 영화의 id 값을 추출

    if id is None:
        return None  # 만약 id가 없다면 None이 나올텐데, 이때 바로 None을 반환(어차피 id가 None이면 뒤는 볼 필요도 없기 때문)

    url = urlMaker.get_url(feature=f'{id}/{feature}',
                           region='KR',
                           language='ko')  # 내가 넣은 id와 feature에 따라 그에 맞는 url 생성
    response = requests.get(url)  # 위에서 만든 url로 응답을 요청
    return response  # 응답을 반환
Exemple #9
0
def ranking():
    # 0. 평점이 높은 순으로 영화 정보를 다시 담을 리스트 정의
    vote_average_movies_top5 = []

    # 1. `tmdb.py`패키지 내의 `UrlMaker()` 클래스의 `get_url()`메서드를 통해 `url`주소를 받아온다.
    url = URLMaker().get_url()

    # 2. 받아온 `url`로 `requests` 모듈을 활용해, 데이터를 요청하고 응답값을 받아온다.
    response = requests.get(url)

    # 3. 응답받아온 데이터를 dictionary로 형변환한다. (`movie_dict`에 할당)
    movie_dict = response.json()

    # 4. `movie_dict`에서 영화 데이터를 담고 있는  `results`를 리스트로 받아온다.
    movie_details = movie_dict.get('results', None)

    # 5. 람다 표현식을 활용하여 movie_details의 `vote_average`순으로 정렬된 딕셔너리를 리스트에 할당한다.
    sorted_movie_details_by_vote_avg = sorted(movie_details,
                                              key=lambda x: x['vote_average'],
                                              reverse=True)

    # 6. 정렬된 딕셔너리에서 앞에 5개 값만 가져오기
    vote_average_movies_top5 = sorted_movie_details_by_vote_avg[:5]

    # 7. 높은 평점 영화 5개 순으로 출력
    return vote_average_movies_top5
Exemple #10
0
def vote_average_movies():
    # 0. 평점 8 이상인 영화 목록을 담는 리스트 초기화
    vote_average_movies_over_8 = []

    # 1. `tmdb.py`패키지 내의 `UrlMaker()` 클래스의 `get_url()`메서드를 통해 `url`주소를 받아온다.
    url = URLMaker().get_url()

    # 2. 받아온 `url`로 `requests` 모듈을 활용해, 데이터를 요청하고 응답값을 받아온다.
    response = requests.get(url)

    # 3. 응답받아온 데이터를 dictionary로 형변환한다. (`movie_dict`에 할당)
    movie_dict = response.json()

    # 4. `movie_dict`에서 영화 데이터를 담고 있는  `results`를 리스트로 받아온다.
    movie_details = movie_dict.get('results', None)

    # 5. movie_details 반복
    for movie_detail in movie_details:
        # 6. 개별 영화들의 평점 확인
        vote_average = movie_detail.get('vote_average', None)
        # 7. 8점 이상인 경우 vote_average_movies_over_8에 해당 영화 정보를 담는다.
        if vote_average >= 8:
            vote_average_movies_over_8.append(movie_detail)

    # 8. 평점 8 이상인 영화들의 목록을 담은 리스트를 반환한다.
    return vote_average_movies_over_8
Exemple #11
0
def ranking():
    # 인스턴스 생성
    maker = URLMaker('pass')
    # 영화 리스트 조회 URL 생성
    url = maker.get_url('movie', 'popular')
    # requests 패키지를 이용하여 URL에 요청
    res = requests.get(url)
    # json 변환
    movie_dict = res.json()
    # 영화 리스트
    movie_list = movie_dict.get('results')

    # vote_average을 기준으로 내림차순 정렬
    result = sorted(movie_list,
                    key=lambda x: x.get('vote_average'),
                    reverse=True)
    # 상위 5개 출력
    return result[:5]
Exemple #12
0
def vote_average_movies():
    # 인스턴스 생성
    maker = URLMaker('pass')
    # 영화 리스트 조회 URL 생성
    url = maker.get_url('movie', 'popular')
    # requests 패키지를 이용하여 URL에 요청
    res = requests.get(url)
    # json 변환
    movie_dict = res.json()

    result = []
    # 영화 리스트
    movie_list = movie_dict.get('results')
    # 평점 8 이상인 영화 목록
    for movie in movie_list:
        if movie.get('vote_average') >= 8:
            result.append(movie)
    return result
Exemple #13
0
def recommendation(title):
    # 인스턴스 생성
    maker = URLMaker('pass')
    # 영화 제목에 대한 id 변환
    movie_id = maker.movie_id(title)
    # movie_id가 있으면
    if movie_id:
        # 영화 추천 URL 생성
        re_url = maker.get_url('movie',
                               f'{movie_id}/recommendations',
                               region='KR',
                               language='ko')
        res = requests.get(re_url)
        re_dict = res.json()
        # 추천 영화 제목 리스트 생성
        result = list(map(lambda x: x.get('title'), re_dict.get('results')))
        return result
    # movie_id가 None이면 None 반환
    return None
Exemple #14
0
def recommendation(title):

    # 1. 제공되는 tmdb.py를 이용하여,<br>영화 제목을 기준으로 TMDB에서 사용하는 id를 검색합니다.
    urlMaker = URLMaker()
    m_id = urlMaker.movie_id(title)

    # 2. id를 기준으로 추천영화 목록 조회 URL을 생성합니다.
    url = urlMaker.get_url(feature=f'{m_id}/recommendations', language='ko')

    # 3. TMDB에서 추천받은 영화 리스트에서 제목을 리스트에 저장합니다.
    movie_dict = requests.get(url).json().get('results', None)
    # * 올바르지 않은 영화 제목으로 id가 없는 경우 None을 반환합니다.
    if movie_dict == None:
        return None

    # * id값은 있지만 추천영화가 없는 경우 빈 리스트를 반환합니다.
    recommend_movies = [movie.get('title') for movie in movie_dict]

    # 4. 저장된 리스트를 반환하는 함수 recommendation을 완성합니다.
    return recommend_movies
Exemple #15
0
def popular_count():

    # 1. UMLMaker 클래스의 인스턴스 생성 (api_key를 argument로 입력)
    urlMaker = URLMaker()

    # 2. get_url()을 통해 url 반환받기
    url = urlMaker.get_url()

    # 3. url을 통해 서버에 요청해서 응답받기 (request module 사용)
    response = requests.get(url)
    #print(type(response)) # <class 'requests.models.Response'>

    # 4. 응답받은 json 타입 데이터를 dictionary 타입으로 바꿔서 변수에 저장
    #print(type(response.json()))  # <class 'dict'>
    movie_dict = response.json()
    
    # 5. 총 페이지 수 확인
    #print(movie_dict['page']) # 1

    # 6. movie_dict의 results를 추출해, 길이 반환
    return len(movie_dict['results'])
Exemple #16
0
def credits(title):
    api_key = 'b4893f302d08c4a823cdf51e8fcee9cc'
    maker = URLMaker(api_key)
    id_num = maker.movie_id(title)

    if not id_num:
        return None

    detail_urlmaker = URLMaker(api_key)  # 영화 출연배우, 연출진정보를 받는 url을 받기 위해 객체 생성
    detail_url = detail_urlmaker.get_url('movie',
                                         f'{id_num}/credits',
                                         region='KR',
                                         language='ko')
    # 영화 출연진에 대한 정보는 movie/movie_id/credits 에서 얻을 수 있다.

    response = requests.get(detail_url)
    movie_info = response.json()  # 영화 정보를 받아옴

    result_cast = []
    result_crew = []
    for i in movie_info.get('cast'):  # 영화배우의 경우
        if i.get('cast_id') < 10:  # cast_id가 10보다 작은 사람들만
            result_cast.append(i.get('name'))  # 추가해줌
    for j in movie_info.get('crew'):  # 영화 제작진의 경우
        if j.get('known_for_department') == 'Directing':  # 감독을
            result_crew.append(j.get('name'))  # 추가해줌

    result_crew = list(set(result_crew))  # 중복값 없애주기. (봉준호만 3번 나오길래)

    return {'cast': result_cast, 'crew': result_crew}
Exemple #17
0
def ranking():
    # URLMaker 클래스를 이용, 내 API KEY값을 추가하고
    maker = URLMaker('c9ed7f727f31ffadd0890762e0f98e96')
    # 위를 토대로 URLMaker Class의 get_url() 메서드를 이용, url을 생성합니다.
    url = maker.get_url()
    # 위 주소로 import request 이용한 응답을 요청합니다.
    res = requests.get(url)
    # 받아온 응답을, json형식으로 저장합니다.
    movie_dict = res.json()

    # 각 영화 dictionary의 집합인 movie_list 변수를 만들어 줍니다.
    movie_list = movie_dict.get('results')
    # 각 영화의 평점을 담을 scores 리스트와
    scores = []
    # 영화를 높은 점수대로 정렬할 리스트
    result = []
    # 각 영화의 dictionary를 하나씩 호출하면서
    for movie in movie_list:
        # 각 영화의 딕셔너리 내 평균 점수를
        scores += [movie.get('vote_average')]
    # 순서대로 정렬합니다.
    scores.sort()
    # 역순으로 정렬해서 점수가 높은 순으로 다시 바꿔줍니다.
    scores.reverse()
    
    # 점수들을 정렬했으니, for문으로 하나씩 돌면서
    for i in scores:
        # 영화 목록 리스트를 돌면서
        for j in range(len(movie_list)):
            # 각 영화의 평점이 정렬된 점수 scores와 같으면 result 리스트에 담는다.
            if movie_list[j]['vote_average'] == i:
                # + result 리스트에 이미 영화가 존재하지 않는 경우에만!
                if not movie_list[j] in result:
                    # 무비 리스트에 추가해 줍니다.
                    result.append(movie_list[j])

    # 그 중 평점이 가장 높은 5개의 영화를 저장하여
    highest_5 = result[0:5:1]
    # 반환합니다.
    return highest_5
Exemple #18
0
def credits(title):
    # 변수 초기화
    result_dict = {
        'cast': [],
        'crew': []
    }  # {cast:actors, crew:directors} 형태로 반환할 딕셔너리

    # 1. UrlMaker 인스턴스 객체를 생성한다.
    urlMaker = URLMaker()

    # 2. 입력받은 영화명을 기준으로, 영화번호를 받아온다.
    m_id = urlMaker.movie_id(title)

    # 3. 이를 활용해서 배우, 감독 목록 조회 URL을 생성한다.  -> /movie/{movie_id}/credits
    url = urlMaker.get_url(feature=f'{m_id}/credits')

    # 4. 이 URL을 이용해서 requests 패키지를 이용해, json 데이터를 응답받아, dictionary 형태로 만들어준다.
    people_dict = requests.get(url).json()

    # 5. 제대로 접근된 경우에는 key값이 ['id', 'cast', 'crew']이고,
    #    아닌 경우는 key값이 ['success', 'status_code', 'status_message']이다.
    #    이를 비교해서 key값에 'success'가 있는 경우 None을 반환해주도록 한다.
    if 'success' in people_dict.keys():
        return None

    # 6-1. people_dict['cast']를 반복하며, 배우 상세정보 조회
    for actor in people_dict.get('cast'):  # == people_dict['cast']
        # 6-2. cast_id 값이 10보다 작은 배우의 이름을 result_dict['cast']의 value값으로 추가한다.
        if actor['cast_id'] < 10:
            result_dict['cast'].append(actor['name'])

    # 7-1. people_dict['crew']를 반복하며, 스텝 상세정보 조회
    for crew in people_dict['crew']:
        # 7-2. department값이 Directing인 감독의 이름을 result_dict['crew']의 value값으로 추가한다.
        if crew['department'] == 'Directing':
            result_dict['crew'].append(crew['name'])

    # 8. 딕셔너리 값 반환
    return result_dict
Exemple #19
0
def recommendation(title):
    api_key = 'b4893f302d08c4a823cdf51e8fcee9cc'
    maker = URLMaker(api_key)
    id_num = maker.movie_id(title)  # 함수다 입력받은 제목으로 movieid()를 통해 id 받음

    if not id_num:  # 영화가 없는 경우도 있음. 그럴떈 바로 None 반환
        return None

    recommendation_urlmaker = URLMaker(api_key)  # 받아온 영화아이디를 쓰기 위해 새롭게 객체 생성
    recomendation_url = recommendation_urlmaker.get_url(
        'movie', f'{id_num}/recommendations', region='KR', language='ko')
    # 영화추천은 movie/movie_id/recommendations 로 url이 이루어져있음. get_url에서 url받음

    response = requests.get(recomendation_url)  # 받은 url로 통신
    recomendation_movie_dict = response.json()  # 추천 영화 리스트를 받을 수 있다.

    result = []
    for movie_reco in recomendation_movie_dict.get(
            'results'):  # 결과중에 제목만 따서 반환
        result.append(movie_reco.get('title'))

    return result