def store_movies(year): print(f'storing-----------{year}') with open(f'./data/movie_{year}.json', 'r') as fp: movies = json.load(fp) # delete stored movies movies_year = Movie.objects.filter(release_date__year=year) movies_year.delete() # using bulk to_db_movies = [] for mv in tqdm(movies): movie = Movie() movie.pk = mv['id'] movie.title_en = mv['original_title'] movie.title_ko = mv['title'] movie.rate = mv['vote_average'] movie.rate_people_count = mv['vote_count'] movie.poster_path = mv['poster_path'] movie.description = mv['overview'] movie.release_date = datetime.datetime.strptime( mv['release_date'], '%Y-%m-%d') to_db_movies.append(movie) div = 100 to_db_movies_batch = [] for i in range(len(to_db_movies) // div + 1): to_db_movies_batch.append(to_db_movies[i * div:(i + 1) * div]) for idx, batch in enumerate(to_db_movies_batch): print(round(idx / len(to_db_movies_batch), 2), end='|') temp = Movie.objects.bulk_create(batch) # add genre mgs = [] for mv in movies: for gid in mv['genre_ids']: mg = MG() mg.movie_id = mv['id'] mg.genre_id = gid mgs.append(mg) temp = MG.objects.bulk_create(mgs)
def update_dataset(request): movietitles = [] # 장르 항목 요청 response_gens = requests.get(GENRE_URL) response_gens = response_gens.json() print(GENRE_URL) # print(response_gens, '####') for gen in response_gens['genres']: print(gen) genre_instance = Genre() genre_instance.genre_id = gen['id'] genre_instance.name = gen['name'] genre_instance.save() # 요청 보내기 (1, 25페이지 까지) for page in range(1, 25): REQ_URL = MOVIE_URL + f'&page={page}' print(REQ_URL) response = requests.get(REQ_URL) response = response.json() # response에서 20개의 자료 추출하기 for num in range(0, 20): # movie 인스턴스 호출하고 DB에 저장하기 movie = Movie() movie.movie_id = response['results'][num]['id'] movie.popularity = response['results'][num]['popularity'] movie.vote_count = response['results'][num]['vote_count'] movie.poster_path = response['results'][num]['poster_path'] movie.backdrop_path = response['results'][num]['backdrop_path'] movie.original_language = response['results'][num][ 'original_language'] movie.original_title = response['results'][num]['original_title'] movie.title = response['results'][num]['title'] movie.vote_average = response['results'][num]['vote_average'] movie.overview = response['results'][num]['overview'] movie.release_date = response['results'][num]['release_date'] # # movie detail api요청 및 저장(오래걸림) # movie_id = movie.movie_id # DETAIL_URL = BASE_URL + f'movie/{movie_id}?' + API_KEY + '&language=ko-KR' # detail_res = requests.get(DETAIL_URL).json() # # runtime 데이터 저장 # movie.runtime = detail_res['runtime'] movie.save() # # production country data DB에 저장 # for country_data in detail_res['production_countries']: # country = Country() # country.iso = country_data['iso_3166_1'] # country.name = country_data['name'] # country.save() # M2M 관계 중계테이블에 저장(영화-국가) # for country_data in detail_res['production_countries']: # iso = country_data['iso_3166_1'] # country = Country.objects.get(iso=iso) # country.movies.add(movie) # M2M 관계 중계테이블에 저장(영화-장르) for genid in response['results'][num]['genre_ids']: # print(genid) genre = Genre.objects.get(genre_id=genid) genre.movies.add(movie) # 제대로 받아지는지 확인한다. print(movie.title) # movietitles에 담아서 template에 출력해보자. movietitles.append(movie.title) # 완료시 success문구 출력 print('success') context = { 'movietitles': movietitles, } return render(request, 'make_dataset/update_dataset.html', context)