MyanmarSwe commited on
Commit
de00413
·
verified ·
1 Parent(s): 89b31eb

Update sync.py

Browse files
Files changed (1) hide show
  1. sync.py +43 -33
sync.py CHANGED
@@ -14,7 +14,17 @@ def get_tmdb_meta(tmdb_id, m_type):
14
  try:
15
  res = requests.get(url).json()
16
 
17
- # Logo Logic
 
 
 
 
 
 
 
 
 
 
18
  logo = None
19
  logos = res.get("images", {}).get("logos", [])
20
  if logos:
@@ -22,21 +32,17 @@ def get_tmdb_meta(tmdb_id, m_type):
22
  target_logo = en_logos[0] if en_logos else logos[0]
23
  logo = f"https://image.tmdb.org/t/p/w500{target_logo['file_path']}"
24
 
25
- # Cast & Director (Strictly String Arrays)
26
  credits = res.get("credits", {})
27
- cast_list = [str(c["name"]) for c in credits.get("cast", [])[:15]]
28
 
29
- dir_list = []
30
  if m_type == "movie":
31
- dir_list = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") == "Director"]
32
  else:
33
- dir_list = [str(c["name"]) for c in res.get("created_by", [])]
34
- if not dir_list:
35
- dir_list = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") in ["Director", "Executive Producer"]][:2]
36
-
37
- # Year (releaseInfo)
38
- date_str = res.get("release_date") or res.get("first_air_date") or ""
39
- year = date_str[:4] if date_str else "N/A"
40
 
41
  meta = {
42
  "id": f"tmdb:{tmdb_id}",
@@ -46,10 +52,11 @@ def get_tmdb_meta(tmdb_id, m_type):
46
  "background": f"https://image.tmdb.org/t/p/original{res.get('backdrop_path')}",
47
  "logo": logo,
48
  "description": res.get("overview", ""),
49
- "cast": cast_list,
50
- "director": dir_list,
 
51
  "genres": [g["name"] for g in res.get("genres", [])],
52
- "releaseInfo": year,
53
  "imdbRating": str(round(res.get("vote_average", 0), 1)) if res.get("vote_average") else None,
54
  "updated_at": datetime.utcnow()
55
  }
@@ -57,15 +64,14 @@ def get_tmdb_meta(tmdb_id, m_type):
57
  if m_type == "series":
58
  videos = []
59
  for s in res.get("seasons", []):
60
- s_num = s.get("season_number")
61
- if s_num == 0: continue
62
- s_url = f"https://api.themoviedb.org/3/tv/{tmdb_id}/season/{s_num}?api_key={TMDB_KEY}"
63
  s_res = requests.get(s_url).json()
64
  for ep in s_res.get("episodes", []):
65
  videos.append({
66
- "id": f"tmdb:{tmdb_id}:{s_num}:{ep['episode_number']}",
67
- "title": ep.get("name") or f"Episode {ep['episode_number']}",
68
- "season": s_num, "episode": ep['episode_number'],
69
  "thumbnail": f"https://image.tmdb.org/t/p/w500{ep['still_path']}" if ep.get('still_path') else meta["poster"]
70
  })
71
  meta["videos"] = videos
@@ -77,22 +83,26 @@ def process_sync(data):
77
  users_col.delete_many({})
78
  users_col.insert_many(data["users"])
79
 
 
80
  for item in data.get("movies_series", []):
81
  t_id, m_type = str(item['tmdb_id']), item['type']
82
  meta_id = f"tmdb:{t_id}"
83
 
84
- new_meta = get_tmdb_meta(t_id, m_type)
85
- if new_meta:
86
- # Custom Overview Logic
87
- if item.get('custom_overview') and str(item['custom_overview']).strip():
88
- new_meta['description'] = str(item['custom_overview'])
89
-
90
- metas_col.update_one({"id": meta_id}, {"$set": new_meta}, upsert=True)
 
 
 
 
91
 
92
- # Stream sync
93
- s_query = {"tmdb_id": t_id}
94
- if m_type == "series":
95
- s_query.update({"season": int(item.get('season', 1)), "episode": int(item.get('episode', 1))})
96
- streams_col.update_one(s_query, {"$set": {**s_query, "url": item['stream_url'], "updated_at": datetime.utcnow()}}, upsert=True)
97
 
 
 
98
  return {"status": "success"}
 
14
  try:
15
  res = requests.get(url).json()
16
 
17
+ # Runtime Logic
18
+ runtime_str = ""
19
+ if m_type == "movie":
20
+ rt = res.get("runtime")
21
+ runtime_str = f"{rt} min" if rt else ""
22
+ else:
23
+ # TV Show အတွက် ပျမ်းမျှ မိနစ်ကို ယူသည်
24
+ runtimes = res.get("episode_run_time", [])
25
+ runtime_str = f"{runtimes[0]} min" if runtimes else ""
26
+
27
+ # Logo
28
  logo = None
29
  logos = res.get("images", {}).get("logos", [])
30
  if logos:
 
32
  target_logo = en_logos[0] if en_logos else logos[0]
33
  logo = f"https://image.tmdb.org/t/p/w500{target_logo['file_path']}"
34
 
35
+ # Cast & Director (Strict String Lists)
36
  credits = res.get("credits", {})
37
+ cast = [str(c["name"]) for c in credits.get("cast", [])[:15]]
38
 
39
+ director = []
40
  if m_type == "movie":
41
+ director = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") == "Director"]
42
  else:
43
+ director = [str(c["name"]) for c in res.get("created_by", [])]
44
+ if not director:
45
+ director = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") == "Executive Producer"][:2]
 
 
 
 
46
 
47
  meta = {
48
  "id": f"tmdb:{tmdb_id}",
 
52
  "background": f"https://image.tmdb.org/t/p/original{res.get('backdrop_path')}",
53
  "logo": logo,
54
  "description": res.get("overview", ""),
55
+ "cast": cast,
56
+ "director": director,
57
+ "runtime": runtime_str, # Runtime field အသစ်
58
  "genres": [g["name"] for g in res.get("genres", [])],
59
+ "releaseInfo": str(res.get("release_date") or res.get("first_air_date") or "0000")[:4],
60
  "imdbRating": str(round(res.get("vote_average", 0), 1)) if res.get("vote_average") else None,
61
  "updated_at": datetime.utcnow()
62
  }
 
64
  if m_type == "series":
65
  videos = []
66
  for s in res.get("seasons", []):
67
+ if s.get("season_number") == 0: continue
68
+ s_url = f"https://api.themoviedb.org/3/tv/{tmdb_id}/season/{s.get('season_number')}?api_key={TMDB_KEY}"
 
69
  s_res = requests.get(s_url).json()
70
  for ep in s_res.get("episodes", []):
71
  videos.append({
72
+ "id": f"tmdb:{tmdb_id}:{s.get('season_number')}:{ep['episode_number']}",
73
+ "title": ep.get("name") or f"S{s.get('season_number')} E{ep['episode_number']}",
74
+ "season": s.get("season_number"), "episode": ep['episode_number'],
75
  "thumbnail": f"https://image.tmdb.org/t/p/w500{ep['still_path']}" if ep.get('still_path') else meta["poster"]
76
  })
77
  meta["videos"] = videos
 
83
  users_col.delete_many({})
84
  users_col.insert_many(data["users"])
85
 
86
+ processed_metas = {}
87
  for item in data.get("movies_series", []):
88
  t_id, m_type = str(item['tmdb_id']), item['type']
89
  meta_id = f"tmdb:{t_id}"
90
 
91
+ if meta_id not in processed_metas:
92
+ new_meta = get_tmdb_meta(t_id, m_type)
93
+ if new_meta:
94
+ # Custom overview maintain logic
95
+ existing = metas_col.find_one({"id": meta_id})
96
+ if item.get('custom_overview'):
97
+ new_meta['description'] = str(item['custom_overview'])
98
+ elif existing and existing.get('is_custom_overview'):
99
+ new_meta['description'] = existing['description']
100
+
101
+ processed_metas[meta_id] = new_meta
102
 
103
+ s_query = {"tmdb_id": t_id, "season": item.get('season'), "episode": item.get('episode')}
104
+ streams_col.update_one(s_query, {"$set": {**s_query, "url": item['stream_url']}}, upsert=True)
 
 
 
105
 
106
+ for m_id, m_data in processed_metas.items():
107
+ metas_col.update_one({"id": m_id}, {"$set": m_data}, upsert=True)
108
  return {"status": "success"}