Hide keyboard shortcuts

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 

3 

4 

5class TMDB: 

6 @staticmethod 

7 def oauth_url(): 

8 

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'] 

13 

14 return TMDB_USER_APPROVAL+request_token+"?redirect_to="+TMDB_REDIRECT_URI 

15 else: 

16 return "" 

17 

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) 

25 

26 return response.json() 

27 

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 

37 

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'] 

43 

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 

49 

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() 

54 

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']) 

60 

61 credits = requests.get( 

62 TMDB_USER_URL+f"movie/{id}/credits", {"api_key": TMDB_CLIENT_TOKEN}).json() 

63 

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 

85 

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 

94 

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() 

99 

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']) 

105 

106 credits = requests.get( 

107 TMDB_USER_URL+f"tv/{id}/credits", {"api_key": TMDB_CLIENT_TOKEN}).json() 

108 

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 

127 

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() 

138 

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) 

145 

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() 

151 

152 return data 

153 

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) 

170 

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() 

176 

177 return data 

178 

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 

197 

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() 

203 

204 return data 

205 

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() 

229 

230 return data 

231 

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() 

261 

262 return { 

263 "movies": movies, 

264 "series": series 

265 }