hengdian / schedule_api_data.py
Ethscriptions's picture
Upload schedule_api_data.py
898d89b verified
Raw
History Blame Contribute Delete
3.15 kB
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("请选择日期并点击「获取并展示」。")