File size: 3,147 Bytes
898d89b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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("请选择日期并点击「获取并展示」。")