Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
| 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
|
|
@@ -12,6 +11,10 @@ client = MongoClient(os.environ.get("MONGODB_URI"))
|
|
| 12 |
db = client['myanmarswe_cinema']
|
| 13 |
metas_col, streams_col, users_col = db['metas'], db['streams'], db['users']
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
def is_user_valid(key):
|
| 16 |
user = users_col.find_one({"key": key})
|
| 17 |
return user and user.get("status") == "active"
|
|
@@ -26,15 +29,29 @@ def manifest(user_key: str):
|
|
| 26 |
valid = is_user_valid(user_key)
|
| 27 |
return {
|
| 28 |
"id": "com.myanmarswe.pro",
|
| 29 |
-
"version": "2.
|
| 30 |
"name": f"MSwe Cinema {'π' if valid else 'β οΈ'}",
|
| 31 |
"resources": ["catalog", "meta", "stream"],
|
| 32 |
"types": ["movie", "series"],
|
| 33 |
"idPrefixes": ["tmdb:", "tmdb_col:"],
|
| 34 |
"catalogs": [
|
| 35 |
-
{
|
| 36 |
-
|
| 37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
]
|
| 39 |
}
|
| 40 |
|
|
@@ -42,16 +59,22 @@ def manifest(user_key: str):
|
|
| 42 |
@app.get("/{user_key}/catalog/{m_type}/{cat_id}/{extra}.json")
|
| 43 |
def catalog(user_key: str, m_type: str, cat_id: str, extra: str = None):
|
| 44 |
if not is_user_valid(user_key): return {"metas": []}
|
| 45 |
-
query = {}
|
| 46 |
-
if extra and "search=" in extra:
|
| 47 |
-
query["name"] = {"$regex": extra.replace("search=", ""), "$options": "i"}
|
| 48 |
|
|
|
|
| 49 |
if cat_id == "mswe_col":
|
| 50 |
query["id"] = {"$regex": "^tmdb_col:"}
|
| 51 |
else:
|
| 52 |
query["type"] = m_type
|
| 53 |
if "id" not in query: query["id"] = {"$regex": "^tmdb:"}
|
| 54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
cursor = metas_col.find(query).sort("updated_at", DESCENDING).limit(100)
|
| 56 |
|
| 57 |
metas_list = []
|
|
@@ -61,10 +84,10 @@ def catalog(user_key: str, m_type: str, cat_id: str, extra: str = None):
|
|
| 61 |
"type": m.get("type", m_type),
|
| 62 |
"name": m.get("name"),
|
| 63 |
"poster": m.get("poster"),
|
| 64 |
-
"logo": m.get("logo"), # Logo
|
| 65 |
"description": m.get("description"),
|
| 66 |
"genres": m.get("genres", []),
|
| 67 |
-
"releaseInfo": m.get("releaseInfo", m.get("year", "")),
|
| 68 |
"imdbRating": m.get("imdbRating"),
|
| 69 |
"runtime": m.get("runtime")
|
| 70 |
})
|
|
@@ -75,12 +98,15 @@ def meta(user_key: str, m_type: str, meta_id: str):
|
|
| 75 |
if not is_user_valid(user_key): return {"meta": {}}
|
| 76 |
m = metas_col.find_one({"id": meta_id})
|
| 77 |
if not m: return {"meta": {}}
|
| 78 |
-
m.pop("_id", None)
|
| 79 |
|
| 80 |
-
|
| 81 |
-
if "cast" in m: m["cast"] = list(m["cast"]) if isinstance(m["cast"], (list, set)) else []
|
| 82 |
-
if "director" in m: m["director"] = list(m["director"]) if isinstance(m["director"], (list, set)) else []
|
| 83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
return {"meta": m}
|
| 85 |
|
| 86 |
@app.get("/{user_key}/stream/{m_type}/{id}.json")
|
|
|
|
| 1 |
import os
|
|
|
|
| 2 |
from fastapi import FastAPI, Request
|
| 3 |
from fastapi.middleware.cors import CORSMiddleware
|
| 4 |
from pymongo import MongoClient, DESCENDING
|
|
|
|
| 11 |
db = client['myanmarswe_cinema']
|
| 12 |
metas_col, streams_col, users_col = db['metas'], db['streams'], db['users']
|
| 13 |
|
| 14 |
+
# Genre list αα»α¬αΈ (Manifest αα½ααΊ ααΌααααΊ)
|
| 15 |
+
MOVIE_GENRES = ["Action", "Adventure", "Animation", "Comedy", "Crime", "Documentary", "Drama", "Family", "Fantasy", "History", "Horror", "Music", "Mystery", "Romance", "Sci-Fi", "Thriller", "War"]
|
| 16 |
+
SERIES_GENRES = ["Action & Adventure", "Animation", "Comedy", "Crime", "Documentary", "Drama", "Family", "Kids", "Mystery", "News", "Reality", "Sci-Fi & Fantasy", "Soap", "Talk", "War & Politics"]
|
| 17 |
+
|
| 18 |
def is_user_valid(key):
|
| 19 |
user = users_col.find_one({"key": key})
|
| 20 |
return user and user.get("status") == "active"
|
|
|
|
| 29 |
valid = is_user_valid(user_key)
|
| 30 |
return {
|
| 31 |
"id": "com.myanmarswe.pro",
|
| 32 |
+
"version": "2.8.0",
|
| 33 |
"name": f"MSwe Cinema {'π' if valid else 'β οΈ'}",
|
| 34 |
"resources": ["catalog", "meta", "stream"],
|
| 35 |
"types": ["movie", "series"],
|
| 36 |
"idPrefixes": ["tmdb:", "tmdb_col:"],
|
| 37 |
"catalogs": [
|
| 38 |
+
{
|
| 39 |
+
"type": "movie",
|
| 40 |
+
"id": "mswe_m",
|
| 41 |
+
"name": "Latest Movies",
|
| 42 |
+
"extra": [{"name": "search"}, {"name": "genre", "options": MOVIE_GENRES}]
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"type": "series",
|
| 46 |
+
"id": "mswe_s",
|
| 47 |
+
"name": "Latest TV Shows",
|
| 48 |
+
"extra": [{"name": "search"}, {"name": "genre", "options": SERIES_GENRES}]
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"type": "series",
|
| 52 |
+
"id": "mswe_col",
|
| 53 |
+
"name": "Collections"
|
| 54 |
+
}
|
| 55 |
]
|
| 56 |
}
|
| 57 |
|
|
|
|
| 59 |
@app.get("/{user_key}/catalog/{m_type}/{cat_id}/{extra}.json")
|
| 60 |
def catalog(user_key: str, m_type: str, cat_id: str, extra: str = None):
|
| 61 |
if not is_user_valid(user_key): return {"metas": []}
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
+
query = {}
|
| 64 |
if cat_id == "mswe_col":
|
| 65 |
query["id"] = {"$regex": "^tmdb_col:"}
|
| 66 |
else:
|
| 67 |
query["type"] = m_type
|
| 68 |
if "id" not in query: query["id"] = {"$regex": "^tmdb:"}
|
| 69 |
|
| 70 |
+
# Genre ααΎααΊα· Search Filter ααα― ααα―ααΊαα½ααΊααΌααΊαΈ
|
| 71 |
+
if extra:
|
| 72 |
+
params = dict(x.split('=') for x in extra.split('&') if '=' in x)
|
| 73 |
+
if "search" in params:
|
| 74 |
+
query["name"] = {"$regex": params["search"], "$options": "i"}
|
| 75 |
+
if "genre" in params:
|
| 76 |
+
query["genres"] = params["genre"]
|
| 77 |
+
|
| 78 |
cursor = metas_col.find(query).sort("updated_at", DESCENDING).limit(100)
|
| 79 |
|
| 80 |
metas_list = []
|
|
|
|
| 84 |
"type": m.get("type", m_type),
|
| 85 |
"name": m.get("name"),
|
| 86 |
"poster": m.get("poster"),
|
| 87 |
+
"logo": m.get("logo"), # Logo ααΎααα»αΎααΊ Stremio ααΎ α
α¬αα¬αΈα‘α
α¬αΈ Logo ααΌαα±αΈαααΊ
|
| 88 |
"description": m.get("description"),
|
| 89 |
"genres": m.get("genres", []),
|
| 90 |
+
"releaseInfo": str(m.get("releaseInfo", m.get("year", ""))),
|
| 91 |
"imdbRating": m.get("imdbRating"),
|
| 92 |
"runtime": m.get("runtime")
|
| 93 |
})
|
|
|
|
| 98 |
if not is_user_valid(user_key): return {"meta": {}}
|
| 99 |
m = metas_col.find_one({"id": meta_id})
|
| 100 |
if not m: return {"meta": {}}
|
|
|
|
| 101 |
|
| 102 |
+
m.pop("_id", None)
|
|
|
|
|
|
|
| 103 |
|
| 104 |
+
# Cast ααΎαα·αΊ Director ααα― String List ααΌα
αΊα‘α±α¬ααΊ αα±αα»α¬ααΌααΊααΌααΊαα±αΈααΌααΊαΈ
|
| 105 |
+
if "cast" in m:
|
| 106 |
+
m["cast"] = [str(x) for x in m["cast"] if x]
|
| 107 |
+
if "director" in m:
|
| 108 |
+
m["director"] = [str(x) for x in m["director"] if x]
|
| 109 |
+
|
| 110 |
return {"meta": m}
|
| 111 |
|
| 112 |
@app.get("/{user_key}/stream/{m_type}/{id}.json")
|