MyanmarSwe commited on
Commit
85eca92
Β·
verified Β·
1 Parent(s): 438ab80

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +66 -26
main.py CHANGED
@@ -1,60 +1,100 @@
1
  import os
2
- from fastapi import FastAPI
 
3
  from fastapi.middleware.cors import CORSMiddleware
4
- from pymongo import MongoClient
5
 
6
  app = FastAPI()
7
  app.add_middleware(CORSMiddleware, allow_origins=["*"])
8
 
9
  client = MongoClient(os.environ.get("MONGODB_URI"))
10
  db = client['myanmarswe_cinema']
11
- metas_col, streams_col = db['metas'], db['streams']
 
 
 
 
 
12
 
13
  @app.get("/{user_key}/manifest.json")
14
  def manifest(user_key: str):
 
15
  return {
16
- "id": "com.myanmarswe.pro",
17
- "version": "2.6.0",
18
- "name": "MSwe Cinema πŸ’Ž",
19
- "resources": [
20
- {"name": "catalog", "types": ["movie", "series"], "idPrefixes": ["mswe_"]},
21
- {"name": "meta", "types": ["movie", "series"], "idPrefixes": ["tmdb:", "tmdb_col:"]},
22
- {"name": "stream", "types": ["movie", "series"], "idPrefixes": ["tmdb:", "tmdb_col:"]}
23
- ],
24
  "types": ["movie", "series"],
 
25
  "catalogs": [
26
- {"type": "movie", "id": "mswe_m", "name": "Latest Movies", "extra": [{"name": "search", "isRequired": False}]},
27
- {"type": "series", "id": "mswe_s", "name": "Latest TV Shows"},
 
 
 
 
 
 
28
  {"type": "series", "id": "mswe_col", "name": "Collections"}
29
  ]
30
  }
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  @app.get("/{user_key}/meta/{m_type}/{meta_id}.json")
33
- def get_meta(user_key: str, m_type: str, meta_id: str):
 
34
  m = metas_col.find_one({"id": meta_id})
35
  if not m: return {"meta": {}}
36
- m.pop("_id")
37
- # Cast မပေါ်တဲ့ ပြဿနာထတွက် Response မှာ Cast ပါတာ α€žα€±α€α€»α€¬α€‘α€±α€¬α€„α€Ία€œα€―α€•α€Ία€‘α€¬α€Έα€•α€«α€α€šα€Ί
 
 
 
 
38
  return {"meta": m}
39
 
40
  @app.get("/{user_key}/stream/{m_type}/{id}.json")
41
- def get_stream(user_key: str, m_type: str, id: str):
 
 
42
  # Collection ထဲက Movie α€€α€­α€― မူရင်း Stream α€”α€²α€· ချိတ်ပေးခြင်း
43
  if id.startswith("tmdb_col:"):
44
  parts = id.split(":")
45
  col_meta = metas_col.find_one({"id": f"tmdb_col:{parts[1]}"})
46
- if col_meta:
47
- for v in col_meta.get("videos", []):
48
- if v["season"] == int(parts[2]) and v["episode"] == int(parts[3]):
49
  real_id = v.get("movie_id")
50
- streams = list(streams_col.find({"tmdb_id": real_id}))
51
- return {"streams": [{"name": "Server 1 πŸš€", "url": s["url"]} for s in streams]}
52
-
53
- # Normal Stream
54
  parts = id.split(":")
55
- query = {"tmdb_id": parts[1]}
 
56
  if len(parts) == 4:
57
  query["season"], query["episode"] = int(parts[2]), int(parts[3])
58
 
59
  streams = list(streams_col.find(query))
60
- return {"streams": [{"name": "Server 1 πŸš€", "url": s["url"]} for s in streams]}
 
1
  import os
2
+ from datetime import datetime
3
+ from fastapi import FastAPI, Request
4
  from fastapi.middleware.cors import CORSMiddleware
5
+ from pymongo import MongoClient, DESCENDING
6
 
7
  app = FastAPI()
8
  app.add_middleware(CORSMiddleware, allow_origins=["*"])
9
 
10
  client = MongoClient(os.environ.get("MONGODB_URI"))
11
  db = client['myanmarswe_cinema']
12
+ metas_col, streams_col, users_col = db['metas'], db['streams'], db['users']
13
+
14
+ def is_user_valid(key):
15
+ user = users_col.find_one({"key": key})
16
+ if not user or user.get("status") != "active": return False, "Invalid User"
17
+ return True, "OK"
18
 
19
  @app.get("/{user_key}/manifest.json")
20
  def manifest(user_key: str):
21
+ valid, _ = is_user_valid(user_key)
22
  return {
23
+ "id": "com.myanmarswe.pro", "version": "2.6.0",
24
+ "name": f"MSwe Cinema {'πŸ’Ž' if valid else '⚠️'}",
25
+ "resources": ["catalog", "meta", "stream"],
 
 
 
 
 
26
  "types": ["movie", "series"],
27
+ "idPrefixes": ["tmdb:", "tmdb_col:"],
28
  "catalogs": [
29
+ {
30
+ "type": "movie", "id": "mswe_m", "name": "Latest Movies",
31
+ "extra": [{"name": "search", "isRequired": False}] # Search Support
32
+ },
33
+ {
34
+ "type": "series", "id": "mswe_s", "name": "Latest TV Shows",
35
+ "extra": [{"name": "search", "isRequired": False}]
36
+ },
37
  {"type": "series", "id": "mswe_col", "name": "Collections"}
38
  ]
39
  }
40
 
41
+ @app.get("/{user_key}/catalog/{m_type}/{cat_id}/{extra}.json")
42
+ @app.get("/{user_key}/catalog/{m_type}/{cat_id}.json")
43
+ def catalog(user_key: str, m_type: str, cat_id: str, extra: str = None):
44
+ if not is_user_valid(user_key)[0]: return {"metas": []}
45
+
46
+ query = {}
47
+ # Search Logic
48
+ if extra:
49
+ try:
50
+ from urllib.parse import parse_qs
51
+ params = parse_qs(extra)
52
+ if "search" in params:
53
+ query["name"] = {"$regex": params["search"][0], "$options": "i"}
54
+ except: pass
55
+
56
+ if cat_id == "mswe_col":
57
+ query["id"] = {"$regex": "^tmdb_col:"}
58
+ else:
59
+ query["type"] = m_type
60
+ if "id" not in query: query["id"] = {"$regex": "^tmdb:"}
61
+
62
+ cursor = metas_col.find(query).sort("updated_at", DESCENDING).limit(100)
63
+ return {"metas": [{"id": m["id"], "type": m.get("type", m_type), "name": m.get("name"), "poster": m.get("poster")} for m in cursor]}
64
+
65
  @app.get("/{user_key}/meta/{m_type}/{meta_id}.json")
66
+ def meta(user_key: str, m_type: str, meta_id: str):
67
+ if not is_user_valid(user_key)[0]: return {"meta": {}}
68
  m = metas_col.find_one({"id": meta_id})
69
  if not m: return {"meta": {}}
70
+
71
+ m.pop("_id", None)
72
+ # Stremio UI α€€ Cast α€€α€­α€― Array(String) α€•α€²α€œα€€α€Ία€α€Άα€α€¬ α€žα€±α€α€»α€¬α€‘α€±α€¬α€„α€Ία€œα€―α€•α€Ία€α€Όα€„α€Ία€Έ
73
+ if "cast" in m:
74
+ m["cast"] = [str(name) for name in m["cast"] if name]
75
+
76
  return {"meta": m}
77
 
78
  @app.get("/{user_key}/stream/{m_type}/{id}.json")
79
+ def stream(user_key: str, m_type: str, id: str):
80
+ if not is_user_valid(user_key)[0]: return {"streams": []}
81
+
82
  # Collection ထဲက Movie α€€α€­α€― မူရင်း Stream α€”α€²α€· ချိတ်ပေးခြင်း
83
  if id.startswith("tmdb_col:"):
84
  parts = id.split(":")
85
  col_meta = metas_col.find_one({"id": f"tmdb_col:{parts[1]}"})
86
+ if col_meta and "videos" in col_meta:
87
+ for v in col_meta["videos"]:
88
+ if v.get("season") == int(parts[2]) and v.get("episode") == int(parts[3]):
89
  real_id = v.get("movie_id")
90
+ streams = list(streams_col.find({"tmdb_id": str(real_id)}))
91
+ return {"streams": [{"name": "MyanmarSwe πŸ’Ž", "url": s["url"]} for s in streams]}
92
+
 
93
  parts = id.split(":")
94
+ tid = parts[1]
95
+ query = {"tmdb_id": tid}
96
  if len(parts) == 4:
97
  query["season"], query["episode"] = int(parts[2]), int(parts[3])
98
 
99
  streams = list(streams_col.find(query))
100
+ return {"streams": [{"name": "MyanmarSwe πŸ’Ž", "url": s["url"]} for s in streams]}