no1b4me commited on
Commit
507e3b0
·
verified ·
1 Parent(s): a42812f

Delete main.py

Browse files
Files changed (1) hide show
  1. main.py +0 -128
main.py DELETED
@@ -1,128 +0,0 @@
1
- from fastapi import FastAPI, Request
2
- from fastapi.templating import Jinja2Templates
3
- from fastapi.middleware.cors import CORSMiddleware
4
- import asyncio
5
- import httpx
6
- import tmdb
7
- import base64
8
- import os
9
- from dotenv import load_dotenv
10
-
11
- # Load environment variables
12
- load_dotenv()
13
- app = FastAPI()
14
- templates = Jinja2Templates(directory="templates")
15
-
16
- # Config CORS
17
- app.add_middleware(
18
- CORSMiddleware,
19
- allow_origins=["*"],
20
- allow_credentials=True,
21
- allow_methods=["*"],
22
- allow_headers=["*"],
23
- )
24
-
25
- # Default addon metadata URL
26
- addon_meta_url = 'https://94c8cb9f702d-tmdb-addon.baby-beamup.club/%7B%22provide_imdbId%22%3A%22true%22%7D'
27
-
28
- @app.get('/')
29
- @app.get('/configure')
30
- async def configure(request: Request):
31
- return templates.TemplateResponse("configure.html", {"request": request})
32
-
33
- @app.get('/{addon_url}/manifest.json')
34
- async def get_manifest(addon_url: str, request: Request):
35
- # Decode addon URL and get language from query parameters
36
- addon_url = decode_base64_url(addon_url)
37
- language = request.query_params.get("language", "it") # Default to Italian if not provided
38
-
39
- async with httpx.AsyncClient() as client:
40
- response = await client.get(f"{addon_url}/manifest.json?language={language}")
41
- manifest = response.json()
42
-
43
- # Modify manifest details
44
- manifest['description'] += ' | from hy'
45
- manifest['id'] += '.toast'
46
- manifest['idPrefixes'].append('tmdb')
47
- if 'meta' not in manifest['resources']:
48
- manifest['resources'].append('meta')
49
- return manifest
50
-
51
- @app.get('/{addon_url}/catalog/{type}/{query:path}')
52
- async def get_catalog(addon_url: str, type: str, query: str, request: Request):
53
- # Decode addon URL and get language from query parameters
54
- addon_url = decode_base64_url(addon_url)
55
- language = request.query_params.get("language", "it")
56
-
57
- async with httpx.AsyncClient(follow_redirects=True, timeout=10) as client:
58
- response = await client.get(f"{addon_url}/catalog/{type}/{query}?language={language}")
59
- catalog = response.json()
60
-
61
- # Fetch detailed movie data concurrently
62
- tasks = [
63
- tmdb.get_tmdb_data(client, item.get('imdb_id', item.get('id')), language) for item in catalog['metas']
64
- ]
65
- tmdb_details = await asyncio.gather(*tasks)
66
-
67
- # Translate catalog with tmdb details
68
- new_catalog = translate_catalog(catalog, tmdb_details)
69
- return new_catalog
70
-
71
- @app.get('/{addon_url}/meta/{type}/{id}.json')
72
- async def get_meta(addon_url: str, type: str, id: str, request: Request):
73
- # Decode addon URL and get language from query parameters
74
- addon_url = decode_base64_url(addon_url)
75
- language = request.query_params.get("language", "it")
76
-
77
- async with httpx.AsyncClient(timeout=10) as client:
78
- response = await client.get(f"{addon_meta_url}/meta/{type}/{id}.json?language={language}")
79
- meta = response.json()
80
-
81
- # Modify meta to include IMDb or TMDb ID
82
- if 'tt' in id:
83
- meta['meta']['id'] = id
84
- elif 'tmdb' in id:
85
- meta['meta']['id'] = meta['meta'].get('imdb_id', id)
86
- return meta
87
-
88
- def extract_imdb_ids(catalog: dict) -> list:
89
- imdb_ids = []
90
- for meta in catalog['metas']:
91
- imdb_ids.append(meta.get('imdb_id', meta.get('id')))
92
- return imdb_ids
93
-
94
- def translate_catalog(original: dict, tmdb_meta: dict) -> dict:
95
- new_catalog = original
96
-
97
- for i, item in enumerate(new_catalog['metas']):
98
- try:
99
- type = item['type']
100
- type_key = 'movie' if type == 'movie' else 'tv'
101
- detail = tmdb_meta[i][f"{type_key}_results"][0]
102
- except:
103
- print('Total skip')
104
- continue
105
- try:
106
- item['name'] = detail['title'] if type == 'movie' else detail['name']
107
- except:
108
- print('Name skip')
109
- try:
110
- item['description'] = detail['overview']
111
- except:
112
- print('Description skip')
113
- try:
114
- item['poster'] = tmdb.TMDB_POSTER_URL + detail['poster_path']
115
- except:
116
- print('Poster skip')
117
-
118
- return new_catalog
119
-
120
- def decode_base64_url(encoded_url: str) -> str:
121
- padding = '=' * (-len(encoded_url) % 4)
122
- encoded_url += padding
123
- decoded_bytes = base64.b64decode(encoded_url)
124
- return decoded_bytes.decode('utf-8')
125
-
126
- if __name__ == '__main__':
127
- import uvicorn
128
- uvicorn.run(app, host='0.0.0.0', port=3000)