示例#1
0
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)
示例#2
0
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)