95 lines
2.7 KiB
Python
95 lines
2.7 KiB
Python
import os
|
|
from flask import Flask, request
|
|
import json
|
|
import urllib.parse
|
|
from yaml import load, dump
|
|
|
|
from overseerrpy import Overseerr
|
|
|
|
try:
|
|
from yaml import CLoader as Loader, CDumper as Dumper
|
|
except ImportError:
|
|
from yaml import Loader, Dumper
|
|
|
|
config = {}
|
|
if os.path.exists("config.yaml"):
|
|
config = load(open('config.yaml'), Loader=Loader)
|
|
|
|
def get_config(key, default=None, ctor: callable = str, data=None):
|
|
|
|
if data is None:
|
|
global config
|
|
data = config
|
|
|
|
if key in data:
|
|
return ctor(data[key])
|
|
|
|
subkeys = key.split('.')
|
|
subkey = subkeys[0]
|
|
if subkey in data:
|
|
return get_config(".".join(subkeys[1:]), default=default, ctor=ctor, data=data[subkey])
|
|
|
|
return default
|
|
|
|
|
|
app = Flask(__name__)
|
|
overseerr = Overseerr(ssl=get_config("overseerr.ssl", False, bool), host=get_config("overseerr.host"), port=get_config("overseerr.port", 80, int), api_key=get_config('overseerr.api_key'))
|
|
|
|
try:
|
|
print(overseerr.test_connection())
|
|
except Exception as e:
|
|
print(e)
|
|
exit(1)
|
|
|
|
@app.route('/')
|
|
def hello_world(): # put application's code here
|
|
return 'Hello World!'
|
|
|
|
|
|
def get_providers(provider_list):
|
|
distinct_providers = {}
|
|
for provider in provider_list:
|
|
if provider["iso_3166_1"] != "GB":
|
|
continue
|
|
for flatrate in provider["flatrate"]:
|
|
distinct_providers[flatrate["id"]] = flatrate["name"]
|
|
|
|
return distinct_providers
|
|
|
|
@app.route("/overseerr", methods=['POST'])
|
|
def overseerr_api():
|
|
data = request.json
|
|
print(data)
|
|
|
|
if data['notification_type'] != "MEDIA_PENDING":
|
|
return "Notification type not supported"
|
|
|
|
media = data['media']
|
|
media_type = media['media_type']
|
|
|
|
show_data = None
|
|
show_id = int(media["tmdbId"])
|
|
if media_type == "tv":
|
|
show_data = overseerr.get_tv_show(show_id)
|
|
elif media_type == "movie":
|
|
show_data = overseerr.get_movie(show_id)
|
|
|
|
if show_data:
|
|
providers = get_providers(show_data["watchProviders"])
|
|
media_request = data["request"]
|
|
|
|
if len(providers) > 0:
|
|
overseerr.update_request_status(int(media_request["request_id"]), "decline")
|
|
msg = f"Request declined, \"{data['subject']}\" is available for streaming on the following providers:\n"
|
|
for provider in providers.values():
|
|
msg += f"\t{provider}\n"
|
|
print(msg)
|
|
else:
|
|
print(f"Request for \"{data['subject']}\" approved.")
|
|
overseerr.update_request_status(int(media_request["request_id"]), "approve")
|
|
|
|
return "Hello Overseerr!"
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host=os.environ.get("SERVER_IP", "0.0.0.0"), port=int(os.environ.get("SERVER_PORT", 5000)))
|