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
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}
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 영화 목록을 반환
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) # 영화 리스트 길이 반환
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
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})
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
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
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 # 응답을 반환
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]
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
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
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
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'])
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
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
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