· 5 years ago · Oct 04, 2020, 12:24 AM
1import datetime
2
3import requests
4import tmdbsimple as TMDB
5
6
7class RadarrException(Exception):
8 def __init__(self, err_code=None):
9 self.message = 'Unknown error.'
10 errors = {
11 400: 'Invalid ID supplied.',
12 401: 'Invalid API key.',
13 404: 'Not found.'
14 }
15 if err_code in errors.keys():
16 self.message = errors[err_code]
17 super(Exception, self).__init__(f'{err_code}: {self.message}')
18
19
20class RadarrClient:
21 def __init__(self, token, tmdb_token, url):
22 self.url = url
23 self.token = token
24 self.headers = {'X-Api-Key': self.token}
25
26 self.tmdb = TMDB
27 self.tmdb.API_KEY = tmdb_token
28
29 def getQueue(self):
30 req = requests.get(self.url + '/queue', headers=self.headers)
31 if req.ok or req.status_code == 200:
32 return req.json()
33 raise RadarrException(req.status_code)
34
35 def getMovieCollection(self):
36 req = requests.get(self.url + '/movie', headers=self.headers)
37 if req.ok or req.status_code == 200:
38 return req.json()
39 raise RadarrException(req.status_code)
40
41 def getMovieCollectionIds(self):
42 movies = self.getMovieCollection()
43 ids = []
44 if movies:
45 for movie in movies:
46 ids.append(movie['tmdbId'])
47 return ids
48 return []
49
50 def getMovieById(self, movie_id):
51 req = requests.get(self.url + f'/movie/{movie_id}', headers=self.headers)
52 if req.ok or req.status_code == 200:
53 return req.json()
54 raise RadarrException(req.status_code)
55
56 def getMovieByTMDBId(self, tmdb_id: int):
57 try:
58 movie = self.tmdb.Movies(tmdb_id)
59 info = movie.info()
60 except requests.exceptions.HTTPError:
61 return None
62 return info
63
64 def searchMovie(self, term):
65 search = self.tmdb.Search()
66 response = search.movie(query=term)
67 return response
68
69 def addToQueue(self, movie):
70 print(movie, type(movie))
71 movie_data = {"title": movie['original_title'],
72 "qualityProfileId": 1,
73 "titleSlug": movie['original_title'].lower().replace(' ', '-') + "-" + str(movie['id']),
74 "images": [
75 {"covertype": "poster",
76 "url": "https://image.tmdb.org/t/p/w200" + movie['poster_path']}],
77 "tmdbId": movie['id'],
78 "profileId": 1,
79 "year": int(datetime.datetime.strptime(movie['release_date'], '%Y-%m-%d').year),
80 "rootFolderPath": "/movies/",
81 "monitored": True,
82 "addOptions": {"searchForMovie": True}
83 }
84 req = requests.post(self.url + f'/movie', headers=self.headers, json=movie_data)
85 if req.ok:
86 return req.json()
87 raise RadarrException(req.status_code)
88