diff --git a/main.py b/main.py index 9389f40..e3cb95a 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,26 @@ app = Flask(__name__) + +#### Configure here your settings + +overseerr_baseurl = "http://xxx.xx.x.xx:5055" +overseerr_api_key = "API token" + +#### Configuration for Sonarr TV-Show +tvshow_sonarrserver_name = "Servername" +tvshow_sonarrserver_Id = 0 +tvshow_rootfolder = "/data/media/tv" + +#### Configuration for Sonarr Anime +anime_sonarrserver_name = "Servername" +anime_sonarrserver_Id = 1 +anime_rootfolder = "/data/media/anime" + + + + + @app.route('/webhook', methods=['POST']) def handle_request(): request_data = request.get_json() @@ -12,36 +32,40 @@ def handle_request(): return ('success', 202) def process_request(request_data): + request_username = request_data['requestUserName'] request_id = request_data['requestID'] media_tmdbid = request_data['mediaId'] media_type = request_data['mediaType'] image = request_data['image'] overview = request_data['message'] - print(request_id) + print(f"Overseerr webhook received for a new tv-show request by {request_username}") + #print(request_id) seasons = None if 'extra' in request_data: for item in request_data['extra']: if item['name'] == 'Requested Seasons': seasons = item['value'] break - print(seasons) - get_url = f'http://localhost:5055/api/v1/{media_type}/{media_tmdbid}?language=en' + #print(seasons) + get_url = overseerr_baseurl + f'/api/v1/{media_type}/{media_tmdbid}?language=en' headers = { 'accept': 'application/json', - 'X-Api-Key': '' + 'X-Api-Key': overseerr_api_key } response = requests.get(get_url, headers=headers) response_data = response.json() - print(response_data) - + # print(response_data) + print(f"Reading data with requestID {request_id} to determine how to process the request") put_data = None + if media_type == 'movie': if any(g['name'] == 'Animation' for g in response_data['genres']): if any(k['name'] == 'anime' for k in response_data['keywords']): put_data = { "mediaType": media_type, "rootFolder": "/mnt/media/Animemovies" + "serverId": anime_sonarrserver_Id } else: put_data = { @@ -53,60 +77,55 @@ def process_request(request_data): "mediaType": media_type, "rootFolder": "/mnt/media/documentary" } + elif media_type == 'tv': seasons = [int(season) for season in seasons.split(',')] - if any(g['name'] == 'Animation' for g in response_data['genres']) and not any(k['name'] == 'anime' for k in response_data['keywords']): + if any(g['name'] == 'Animation' for g in response_data['genres']) and any(k['name'] == 'anime' for k in response_data['keywords']): put_data = { "mediaType": media_type, "seasons": seasons, - "rootFolder": "/mnt/media/Animatedseries" + "rootFolder": anime_rootfolder, + "serverId": anime_sonarrserver_Id } - elif any(g['name'] == 'Documentary' for g in response_data['genres']): + TargetSonarrServer = anime_sonarrserver_name + else: put_data = { - "mediaType": media_type, - "seasons": seasons, - "rootFolder": "/mnt/media/documentary" - } - elif any(g['name'] == 'Reality' for g in response_data['genres']): - put_data = { - "mediaType": media_type, - "seasons": seasons, - "rootFolder": "/mnt/media/reality" - } + "mediaType": media_type, + "seasons": seasons, + "rootFolder": tvshow_rootfolder, + "serverId": tvshow_sonarrserver_Id + } + TargetSonarrServer = tvshow_sonarrserver_name - put_url = f'http://localhost:5055/api/v1/request/{request_id}' + put_url = overseerr_baseurl + f'/api/v1/request/{request_id}' headers = { 'accept': 'application/json', - 'X-Api-Key': '', + 'X-Api-Key': overseerr_api_key, 'Content-Type': 'application/json' } if put_data: - print(put_data) requests.put(put_url, headers=headers, json=put_data) - rootFolder = put_data['rootFolder'] - #title = response_data['title'] - title = response_data.get('title', response_data.get('name', '')) - print(f"{title}\n{overview}\nRoot Folder: {rootFolder}") - #requests.post("https://ntfy.sh/requests", - #data=f"{title}\n{overview}\n\nRoot Folder: {rootFolder}".encode('utf-8'), - #headers={ - # "Title": f"Root folder has been changed for the {media_type}", - # #"Authorization": "", - # "priority": "urgent", - # "Attach": image, - # "tags": "warning" - #} - ) if response.status_code != 200: - raise Exception(f'Error sending message to ntfy: {response.content}') + raise Exception(f'Error applying backend server overwrite in Overseerr: {response.content}') else: - print("Success, 200") - + print(f"Successfully modified target backend tv processing server to {TargetSonarrServer} in Overseerr") + post_url = overseerr_baseurl + f'/api/v1/request/{request_id}/approve' + headers = { + 'accept': 'application/json', + 'X-Api-Key': overseerr_api_key, + 'Content-Type': 'application/json' + } + requests.post(post_url, headers=headers) + if response.status_code != 200: + raise Exception(f'Error updating request status: {response.content}') + else: + print("Automatically approve tv show request on Overseerr instance") + def handle_request(request): request_data = request.get_json() process_request(request_data) - return ('Changed rootfolder', 200) + return ('Changed rootfolder and server', 200) if __name__ == '__main__': serve(app, host='0.0.0.0', port='5001')