from datetime import datetime import pandas as pd import streamlit as st from schedule_api_client import fetch_schedule_api_bundle, process_schedule_dataframe st.set_page_config(layout="wide", page_title="排程 API 数据") st.title("🧩 排程 API 数据查看") st.caption("统一展示排程相关 API:场次、影厅座位、标准影片名。") col1, col2 = st.columns([2, 1]) with col1: selected_date = st.date_input("排程日期", value=datetime.now().date(), key="schedule_api_date") with col2: st.write("") st.write("") fetch_btn = st.button("获取并展示", type="primary", key="schedule_api_fetch") date_str = selected_date.strftime("%Y-%m-%d") if fetch_btn: with st.spinner(f"正在获取 {date_str} 的排程 API 数据..."): bundle = fetch_schedule_api_bundle(date_str) if not bundle: st.error("获取失败,请检查 .env、网络或 token。") else: st.session_state["schedule_api_bundle"] = bundle st.toast("排程 API 数据加载成功", icon="✅") bundle = st.session_state.get("schedule_api_bundle") if bundle: schedule_list = bundle.get("schedule_list") or [] hall_seat_map = bundle.get("hall_seat_map") or {} canonical_names = bundle.get("canonical_names") or [] c1, c2, c3 = st.columns(3) c1.metric("场次数", len(schedule_list)) c2.metric("影厅数", len(hall_seat_map)) c3.metric("标准影片名数量", len(canonical_names)) tidy_df = process_schedule_dataframe(schedule_list, hall_seat_map, canonical_names) tab1, tab2, tab3, tab4 = st.tabs( [ "整理后表格", "原始场次 API", "影厅座位 API", "标准影片名 API", ] ) with tab1: if tidy_df.empty: st.warning("暂无可展示的排程数据。") else: st.dataframe(tidy_df, width="stretch", height=600) with tab2: if schedule_list: raw_schedule_df = pd.DataFrame(schedule_list) st.dataframe(raw_schedule_df, width="stretch", height=500) with st.expander("查看原始 JSON"): st.json(schedule_list) else: st.info("API 返回空场次列表。") with tab3: if hall_seat_map: hall_df = pd.DataFrame( [{"hallId": k, "seatNum": v} for k, v in hall_seat_map.items()] ).sort_values("hallId") st.dataframe(hall_df, width="stretch", height=500) with st.expander("查看原始 JSON"): st.json(hall_seat_map) else: st.info("未获取到影厅座位数据。") with tab4: if canonical_names: canonical_df = pd.DataFrame({"movieName": canonical_names}) st.dataframe(canonical_df, width="stretch", height=500) with st.expander("查看原始 JSON"): st.json(canonical_names) else: st.info("未获取到标准影片名数据(可能是 CINEMA_ID 未配置或接口返回为空)。") else: st.info("请选择日期并点击「获取并展示」。")