-
Notifications
You must be signed in to change notification settings - Fork 0
/
load_movie.py
147 lines (105 loc) · 4.5 KB
/
load_movie.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import os
import environ
import requests
import psycopg2
from datetime import datetime, date, timezone
import sys
def add_movie(movie_id):
env = environ.Env()b
environ.Env.read_env('.env')
print('API_KEY: ', env('API_KEY'))
print('API_TOKEN: ', env('API_TOKEN'))
'''
url --request GET \
--url 'https://api.themoviedb.org/3/movie/76341?language=en-US' \
--header 'Authorization: Aasdfqwer' \
--header 'accept: application/json'
'''
headers = {
"accept": "application/json",
"Authorization": f"Bearer {env('API_TOKEN')}"}
r = requests.get(f'https://api.themoviedb.org/3/movie/{movie_id}?language=en-US', headers=headers)
print(r.json())
m = r.json()
conn = psycopg2.connect("dbname=django_test user=ubuntu password=password")
cur = conn.cursor()
'''Verificar si la película ya existe en la base de datos'''
sql = 'SELECT * FROM movies_movie WHERE title = %s'
cur.execute(sql, (m['title'],))
movie_exists = cur.fetchall()
print(movie_exists)
r = requests.get(f'https://api.themoviedb.org/3/movie/{movie_id}/credits?language=en-US', headers=headers)
credits = r.json()
actors = [( actor['name'], actor['known_for_department']) for actor in credits['cast'][:10]]
crew = [( job['name'], job['job']) for job in credits['crew'][:15]]
credits_list = actors + crew
jobs = [job for person, job in credits_list]
jobs = set(jobs)
print(jobs)
sql = 'SELECT * FROM movies_job WHERE name IN %s'
cur.execute(sql, (tuple(jobs),))
jobs_in_db = cur.fetchall()
jobs_to_create = [(name,) for name in jobs if name not in [name for id, name in jobs_in_db]]
sql = 'INSERT INTO movies_job (name) values (%s)'
cur.executemany(sql, jobs_to_create)
persons = [person for person, job in credits_list]
persons = set(persons)
print(persons)
sql = 'SELECT * FROM movies_person WHERE name IN %s'
cur.execute(sql, (tuple(persons),))
persons_in_db = cur.fetchall()
persons_to_create = [(name,) for name in persons if name not in [name for id, name in persons_in_db]]
sql = 'INSERT INTO movies_person (name) values (%s)'
cur.executemany(sql, persons_to_create)
genres = [ d['name'] for d in m['genres']]
print(genres)
sql = 'SELECT * FROM movies_genre WHERE name IN %s'
cur.execute(sql, (tuple(genres),))
genres_in_db = cur.fetchall()
genres_to_create = [(name,) for name in genres if name not in [name for id, name in genres_in_db]]
sql = 'INSERT INTO movies_genre (name) values (%s)'
cur.executemany(sql, genres_to_create)
date_obj = date.fromisoformat(m['release_date'])
date_time = datetime.combine(date_obj, datetime.min.time())
sql = '''INSERT INTO movies_movie
(title,
overview,
release_date,
running_time,
budget,
tmdb_id,
revenue,
poster_path) values (%s, %s, %s, %s, %s, %s, %s, %s);'''
movie_tuple = (m['title'], m['overview'], date_time.astimezone(timezone.utc), m['runtime'],
m['budget'] , movie_id, m['revenue'], m['poster_path'] )
print(movie_tuple)
sql = '''INSERT INTO movies_movie
(title,
overview,
release_date,
running_time,
budget,
tmdb_id,
revenue,
poster_path) values (%s, %s, %s, %s, %s, %s, %s, %s);'''
movie_tuple = (m['title'], m['overview'], date_time.astimezone(timezone.utc), m['runtime'],
m['budget'] , movie_id, m['revenue'], m['poster_path'] )
print(movie_tuple)
cur.execute(sql, movie_tuple)
sql = '''INSERT INTO movies_movie_genres (movie_id, genre_id)
SELECT (SELECT id FROM movies_movie WHERE title = %s) as movie_id, id as genre_id
FROM movies_genre
WHERE name IN %s'''
cur.execute(sql, (m['title'], tuple(genres),))
print(credits_list)
for credit in credits_list:
sql = '''INSERT INTO movies_moviecredit (movie_id, person_id, job_id)
SELECT id,
(SELECT id FROM movies_person WHERE name = %s) as person_id,
(SELECT id FROM movies_job WHERE name = %s) as job_id
FROM movies_movie
WHERE title = %s'''
cur.execute(sql, (credit[0],credit[1], m['title'],))
conn.commit()
if __name__ == "__main__":
add_movie(int(sys.argv[1]))