Ethscriptions commited on
Commit
3d4bae7
·
verified ·
1 Parent(s): f79dcf9

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +19 -3
  2. tms_proxy.py +47 -0
app.py CHANGED
@@ -25,6 +25,7 @@ from pathlib import Path
25
  from cinema_api_client import fetch_canonical_movie_names as shared_fetch_canonical_movie_names
26
  from historical_sessions import load_history_df, summarize_total_box_office_by_movies
27
  from r2_config_sync import ensure_settings_file_from_r2, ensure_settings_file_synced, upload_settings_file_to_r2
 
28
  # --- 新增:加载环境变量 ---
29
  from dotenv import load_dotenv
30
  load_dotenv() # 加载本地 .env 文件
@@ -2253,6 +2254,7 @@ def display_pdf(base64_pdf):
2253
  @st.cache_data(show_spinner=False, ttl=600)
2254
  def fetch_and_process_server_movies(priority_movie_titles=None):
2255
  if priority_movie_titles is None: priority_movie_titles = []
 
2256
 
2257
  # 获取环境变量
2258
  app_secret = os.getenv("TMS_APP_SECRET")
@@ -2289,7 +2291,11 @@ def fetch_and_process_server_movies(priority_movie_titles=None):
2289
  # 使用变量
2290
  token_json_data = {'appId': 'hd', 'appSecret': app_secret, 'timeStamp': int(time.time() * 1000)}
2291
  # 动态构建 URL
2292
- token_url = f'https://tms.hengdianfilm.com/cinema-api/admin/generateToken?token=hd&murl=?token=hd&murl=ticket={ticket}'
 
 
 
 
2293
 
2294
  response = requests.post(token_url, headers=token_headers, json=token_json_data, timeout=10)
2295
 
@@ -2324,8 +2330,18 @@ def fetch_and_process_server_movies(priority_movie_titles=None):
2324
  list_json_data = {'THEATER_ID': theater_id, 'SOURCE': 'SERVER', 'ASSERT_TYPE': 2, 'PAGE_CAPACITY': 20,
2325
  'PAGE_INDEX': page_index}
2326
 
2327
- list_url = 'https://tms.hengdianfilm.com/cinema-api/cinema/server/dcp/list'
2328
- response = requests.post(list_url, params=list_params, headers=list_headers, json=list_json_data, verify=False)
 
 
 
 
 
 
 
 
 
 
2329
  response.raise_for_status()
2330
  movie_data = response.json()
2331
  if movie_data.get("RSPCD") != "000000": raise Exception(f"获取影片列表失败: {movie_data.get('RSPMSG')}")
 
25
  from cinema_api_client import fetch_canonical_movie_names as shared_fetch_canonical_movie_names
26
  from historical_sessions import load_history_df, summarize_total_box_office_by_movies
27
  from r2_config_sync import ensure_settings_file_from_r2, ensure_settings_file_synced, upload_settings_file_to_r2
28
+ from tms_proxy import build_tms_url, get_tms_proxy_base_url, tms_verify_ssl, with_tms_proxy_headers
29
  # --- 新增:加载环境变量 ---
30
  from dotenv import load_dotenv
31
  load_dotenv() # 加载本地 .env 文件
 
2254
  @st.cache_data(show_spinner=False, ttl=600)
2255
  def fetch_and_process_server_movies(priority_movie_titles=None):
2256
  if priority_movie_titles is None: priority_movie_titles = []
2257
+ tms_proxy_base_url = get_tms_proxy_base_url()
2258
 
2259
  # 获取环境变量
2260
  app_secret = os.getenv("TMS_APP_SECRET")
 
2291
  # 使用变量
2292
  token_json_data = {'appId': 'hd', 'appSecret': app_secret, 'timeStamp': int(time.time() * 1000)}
2293
  # 动态构建 URL
2294
+ token_url = build_tms_url(
2295
+ f'https://tms.hengdianfilm.com/cinema-api/admin/generateToken?token=hd&murl=?token=hd&murl=ticket={ticket}',
2296
+ tms_proxy_base_url,
2297
+ )
2298
+ token_headers = with_tms_proxy_headers(token_headers, tms_proxy_base_url)
2299
 
2300
  response = requests.post(token_url, headers=token_headers, json=token_json_data, timeout=10)
2301
 
 
2330
  list_json_data = {'THEATER_ID': theater_id, 'SOURCE': 'SERVER', 'ASSERT_TYPE': 2, 'PAGE_CAPACITY': 20,
2331
  'PAGE_INDEX': page_index}
2332
 
2333
+ list_url = build_tms_url(
2334
+ 'https://tms.hengdianfilm.com/cinema-api/cinema/server/dcp/list',
2335
+ tms_proxy_base_url,
2336
+ )
2337
+ list_headers = with_tms_proxy_headers(list_headers, tms_proxy_base_url)
2338
+ response = requests.post(
2339
+ list_url,
2340
+ params=list_params,
2341
+ headers=list_headers,
2342
+ json=list_json_data,
2343
+ verify=tms_verify_ssl(default=False, proxy_url=tms_proxy_base_url),
2344
+ )
2345
  response.raise_for_status()
2346
  movie_data = response.json()
2347
  if movie_data.get("RSPCD") != "000000": raise Exception(f"获取影片列表失败: {movie_data.get('RSPMSG')}")
tms_proxy.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from urllib.parse import urlparse
3
+
4
+
5
+ TMS_ORIGIN = "https://tms.hengdianfilm.com"
6
+ TMS_PROXY_URL_ENV = "TMS_CF_WORKER_URL"
7
+ TMS_PROXY_TOKEN_ENV = "TMS_CF_WORKER_TOKEN"
8
+ TMS_PROXY_TOKEN_HEADER = "X-TMS-Proxy-Token"
9
+
10
+
11
+ def get_tms_proxy_base_url(proxy_url=None):
12
+ raw = proxy_url if proxy_url is not None else os.getenv(TMS_PROXY_URL_ENV, "")
13
+ raw = str(raw or "").strip()
14
+ if not raw:
15
+ return ""
16
+ if "://" not in raw:
17
+ raw = f"https://{raw}"
18
+ return raw.rstrip("/")
19
+
20
+
21
+ def build_tms_url(origin_url, proxy_url=None):
22
+ proxy_base_url = get_tms_proxy_base_url(proxy_url)
23
+ if not proxy_base_url:
24
+ return origin_url
25
+
26
+ parsed = urlparse(origin_url)
27
+ origin = f"{parsed.scheme}://{parsed.netloc}"
28
+ if origin != TMS_ORIGIN:
29
+ return origin_url
30
+
31
+ query = f"?{parsed.query}" if parsed.query else ""
32
+ return f"{proxy_base_url}{parsed.path}{query}"
33
+
34
+
35
+ def with_tms_proxy_headers(headers=None, proxy_url=None):
36
+ headers = dict(headers or {})
37
+ if get_tms_proxy_base_url(proxy_url):
38
+ proxy_token = os.getenv(TMS_PROXY_TOKEN_ENV, "").strip()
39
+ if proxy_token:
40
+ headers[TMS_PROXY_TOKEN_HEADER] = proxy_token
41
+ return headers
42
+
43
+
44
+ def tms_verify_ssl(default=False, proxy_url=None):
45
+ if get_tms_proxy_base_url(proxy_url):
46
+ return True
47
+ return default