Coverage for src/utils/tmdb.py : 15%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from settings import TMDB_PROVIDER, TMDB_CLIENT_TOKEN, TMDB_REDIRECT_URI, TMDB_URL_TOKEN, TMDB_IMG_URL, TMDB_USER_URL, TMDB_USER_APPROVAL
2import requests
5class TMDB:
6 @staticmethod
7 def oauth_url():
9 response = requests.get(TMDB_PROVIDER, params={
10 "api_key": TMDB_CLIENT_TOKEN})
11 if response.status_code == requests.codes.ok:
12 request_token = response.json()['request_token']
14 return TMDB_USER_APPROVAL+request_token+"?redirect_to="+TMDB_REDIRECT_URI
15 else:
16 return ""
18 @staticmethod
19 def get_tokens(request_token):
20 payload = {
21 "request_token": request_token
22 }
23 response = requests.post(
24 TMDB_URL_TOKEN+TMDB_CLIENT_TOKEN, data=payload)
26 return response.json()
28 @staticmethod
29 def get_account_id(session_id):
30 # "id": 9802731
31 params = {
32 "api_key": TMDB_CLIENT_TOKEN,
33 "session_id": session_id
34 }
35 res = requests.get(TMDB_USER_URL+"account", params=params).json()
36 return res
38 @staticmethod
39 def get_movies(item, element):
40 element['title'] = item['title']
41 element['language'] = item['original_language']
42 element['year'] = item['release_date']
44 element['tmdbid'] = item['id']
45 element['rating'] = float(item['vote_average']*5/10.0)
46 element['rating_count'] = item['vote_count']
47 element['cover'] = TMDB_IMG_URL + item['poster_path']
48 return element
50 @staticmethod
51 def get_movies_details(id, element):
52 details = requests.get(
53 TMDB_USER_URL+f"movie/{id}", {"api_key": TMDB_CLIENT_TOKEN}).json()
55 element['imdbid'] = details['imdb_id'][2:]
56 element['genres'] = []
57 for genre in details['genres']:
58 element['genres'].append(genre['name'])
59 element['genres'] = ("|").join(element['genres'])
61 credits = requests.get(
62 TMDB_USER_URL+f"movie/{id}/credits", {"api_key": TMDB_CLIENT_TOKEN}).json()
64 element['actors'] = []
65 for actors in credits['cast']:
66 element['actors'].append(actors['name'])
67 if actors['order'] == 4:
68 break
69 element['actors'] = (" | ").join(element['actors'])
70 element['producers'] = []
71 element['director'] = ''
72 element['writer'] = ''
73 for crew in credits['crew']:
74 if len(element['producers']) < 5:
75 element['producers'].append(
76 crew['name']) if crew['department'] == "Production" else None
77 if len(element['director']) < 1 and (crew['department'] == "Directing"):
78 element['director'] = crew['name']
79 if len(element['writer']) < 1 and (crew['department'] == "Writing"):
80 element['writer'] = crew['name']
81 if len(element['producers']) == 5 and len(element['director']) >= 1 and len(element['writer']) >= 1:
82 break
83 element['producers'] = (' | ').join(element['producers'])
84 return element
86 @staticmethod
87 def get_series(item, element):
88 element['title'] = item['original_name']
89 element['start_year'] = int(item['first_air_date'][:4])
90 element['rating'] = float(item['vote_average']*5/10.0)
91 element['rating_count'] = item['vote_count']
92 element['cover'] = TMDB_IMG_URL + item['poster_path']
93 return element
95 @staticmethod
96 def get_series_details(id, element):
97 details = requests.get(
98 TMDB_USER_URL+f"tv/{id}", {"api_key": TMDB_CLIENT_TOKEN}).json()
100 element['end_year'] = int(details['last_air_date'][:4])
101 element['genres'] = []
102 for genre in details['genres']:
103 element['genres'].append(genre['name'])
104 element['genres'] = (",").join(element['genres'])
106 credits = requests.get(
107 TMDB_USER_URL+f"tv/{id}/credits", {"api_key": TMDB_CLIENT_TOKEN}).json()
109 element['actors'] = []
110 for actors in credits['cast']:
111 element['actors'].append(actors['name'])
112 if actors['order'] == 4:
113 break
114 element['actors'] = (",").join(element['actors'])
115 element['directors'] = []
116 element['writers'] = []
117 for crew in credits['crew']:
118 if len(element['directors']) < 2 and (crew['department'] == "Directing"):
119 element['directors'].append(crew['name'])
120 if len(element['writers']) < 4 and (crew['department'] == "Writing"):
121 element['writers'].append(crew['name'])
122 if (len(element['directors']) == 2) and (len(element['writers']) == 4):
123 break
124 element['directors'] = (',').join(element['directors'])
125 element['writers'] = (',').join(element['writers'])
126 return element
128 @staticmethod
129 def get_favorite_movies(session_id, account_id):
130 params = {
131 "api_key": TMDB_CLIENT_TOKEN,
132 "session_id": session_id,
133 "sort_by": "created_at.asc",
134 "page": 1
135 }
136 response = requests.get(
137 TMDB_USER_URL+f"account/{account_id}/favorite/movies", params=params).json()
139 data = []
140 pages = response['total_pages']
141 for page in range(0, pages):
142 for item in response["results"]:
143 element = {}
144 element = TMDB.get_movies(item, element)
146 element = TMDB.get_movies_details(item['id'], element)
147 data.append(element)
148 params['page'] = page+1
149 response = requests.get(
150 TMDB_USER_URL+f"account/{account_id}/favorite/movies", params=params).json()
152 return data
154 @staticmethod
155 def get_favorite_series(session_id, account_id):
156 params = {
157 "api_key": TMDB_CLIENT_TOKEN,
158 "session_id": session_id,
159 "sort_by": "created_at.asc",
160 "page": 1
161 }
162 response = requests.get(
163 TMDB_USER_URL+f"account/{account_id}/favorite/tv", params=params).json()
164 data = []
165 pages = response['total_pages']
166 for page in range(0, pages):
167 for item in response["results"]:
168 element = {}
169 element = TMDB.get_series(item, element)
171 element = TMDB.get_series_details(item['id'], element)
172 data.append(element)
173 params['page'] = page+1
174 response = requests.get(
175 TMDB_USER_URL+f"account/{account_id}/favorite/tv", params=params).json()
177 return data
179 @staticmethod
180 def get_rated_movies(session_id, account_id):
181 params = {
182 "api_key": TMDB_CLIENT_TOKEN,
183 "session_id": session_id,
184 "sort_by": "created_at.asc",
185 "page": 1
186 }
187 response = requests.get(
188 TMDB_USER_URL+f"account/{account_id}/rated/movies", params=params).json()
189 data = []
190 pages = response['total_pages']
191 for page in range(0, pages):
192 for item in response["results"]:
193 element = {}
194 element = TMDB.get_movies(item, element)
195 element['user_rating'] = round(
196 float(item['rating']*5/10.0)*2)/2
198 element = TMDB.get_movies_details(item['id'], element)
199 data.append(element)
200 params['page'] = page+1
201 response = requests.get(
202 TMDB_USER_URL+f"account/{account_id}/rated/movies", params=params).json()
204 return data
206 @staticmethod
207 def get_rated_series(session_id, account_id):
208 params = {
209 "api_key": TMDB_CLIENT_TOKEN,
210 "session_id": session_id,
211 "sort_by": "created_at.asc",
212 "page": 1
213 }
214 response = requests.get(
215 TMDB_USER_URL+f"account/{account_id}/rated/tv", params=params).json()
216 data = []
217 pages = response['total_pages']
218 for page in range(0, pages):
219 for item in response["results"]:
220 element = {}
221 element = TMDB.get_series(item, element)
222 element['user_rating'] = round(
223 float(item['rating']*5/10.0)*2)/2
224 element = TMDB.get_series_details(item['id'], element)
225 data.append(element)
226 params['page'] = page+1
227 response = requests.get(
228 TMDB_USER_URL+f"account/{account_id}/rated/tv", params=params).json()
230 return data
232 @staticmethod
233 def get_created_list(session_id, account_id):
234 params = {
235 "api_key": TMDB_CLIENT_TOKEN,
236 "session_id": session_id,
237 "page": 1
238 }
239 response = requests.get(
240 TMDB_USER_URL+f"account/{account_id}/lists", params=params).json()
241 movies = []
242 series = []
243 pages = response['total_pages']
244 for page in range(0, pages):
245 for item in response["results"]:
246 userlist = requests.get(
247 TMDB_USER_URL+f"list/{item['id']}", params={"api_key": TMDB_CLIENT_TOKEN}).json()
248 for item in userlist['items']:
249 element = {}
250 if item['media_type'] == 'tv':
251 element = TMDB.get_series(item, element)
252 element = TMDB.get_series_details(item['id'], element)
253 series.append(element)
254 elif item['media_type'] == 'movie':
255 element = TMDB.get_movies(item, element)
256 element = TMDB.get_movies_details(item['id'], element)
257 movies.append(element)
258 params['page'] = page+1
259 response = requests.get(
260 TMDB_USER_URL+f"account/{account_id}/rated/tv", params=params).json()
262 return {
263 "movies": movies,
264 "series": series
265 }