영화 db api 호출하여 db 만들기

hyeok2·2023년 6월 28일

python

목록 보기
3/7

api 호출을 통한 영화 id 가져오기

tmdb에서는 다양한 api를 제공한다.

→ 추천시스템을 위한 db구축을 할때 api를 번번히 호출하기보다는 먼저 db를 구축하여 기준에 맞게 추천을 해주려고 한다.

1. api 호출 방식

  • tmdb에서는 무비리스트를 최대 2주 간격으로 제공한다.
  • 페이지별로 제공한다.
  • 2012년 10월 이후부터 서비스를 제공한다

위의 세가지를 고려하여 호출을 구상했다.

2. 연도별 api 호출하기

  • 연도별로 api를 호출하여 movie id를 가져오기로 하였다.
  • 해당 api에서 주어지는 값인 movie_id와 adult 유무 값을 각각 리스트로 만들어 호출한 api 값을 append하는 형태로 구성하였다.
import requests
import pandas as pd
import datetime

url = "https://api.themoviedb.org/3/movie/changes"

headers = {
    "accept": "application/json",
    "Authorization": "발급한 API키"
}

start_date = pd.to_datetime("2023-01-01")
end_date = pd.to_datetime("2023-06-12")
date_range = pd.date_range(start=start_date, end=end_date, freq='D')

movie_id_list = []
adult_list = []

for date in date_range:
    formatted_date = date.strftime("%Y-%m-%d")
    page = 1
    while True:
        params = {
            "start_date": formatted_date,
            "end_date": formatted_date,
            "page": page
        }
        response = requests.get(url, headers=headers, params=params)
        data = response.json()
        
        for result in data['results']:
            movie_id_list.append(result['id'])
            adult_list.append(result['adult'])

        total_pages = data['total_pages']
        if page >= total_pages:
            break
        else:
            page += 1

df = pd.DataFrame({'Movie ID': movie_id_list, 'Adult': adult_list})
print(df)

# date today를 정의
current_date = datetime.date.today()

# 파일명에 날짜를 추가
file_name = f"tmdb2023{current_date}.csv"

# df를 CSV 파일로 저장
df.to_csv(file_name, index=False, encoding='utf-8-sig', sep=',')

해당컬럼이 아닌 다른 컬럼에 줄거리가 저장되는 이슈가 발생했다.

→ tmdb api 호출 결과를 확인해보니 \r로 된 개행문자가 포함되면서 해당파일의 저장이 이상하게 되었다.

→ 또한 개행문자의 오류때문인지 pandas로 불러지지 않는 오류가 발생하였다.

⇒pd.to_csv에서 sep=’,’ 대신 sep=’|’으로 수정


해당 작업을 전처리를 하기 전, 바로 mongodb에 적재 후 전처리를 하여 db를 생성하는 방안을 생각중

profile
땅을 파다보면 흙과 물을 보겠지만, 코드를 파다보면 답이 보일것이다.

0개의 댓글