104 lines
3.3 KiB
Python
104 lines
3.3 KiB
Python
"""补充获取独立页面的数据"""
|
||
import asyncio
|
||
import sys
|
||
sys.path.insert(0, '.')
|
||
|
||
from confluence.client import ConfluenceClient
|
||
from confluence.parser import DataParser
|
||
from models.schemas import ShipData, PageNode
|
||
|
||
# 独立页面ID列表(不在页面树下的页面)
|
||
INDEPENDENT_PAGES = [
|
||
"159032145", # FZ 231# 2025.12.20
|
||
"159049306", # FZ 251# 2026.01.01
|
||
# 可以添加更多独立页面ID
|
||
]
|
||
|
||
async def get_independent_ship_data():
|
||
"""获取独立页面的船舶数据"""
|
||
print("=" * 60)
|
||
print("🔍 获取独立页面数据")
|
||
print("=" * 60)
|
||
|
||
client = ConfluenceClient()
|
||
independent_ships = []
|
||
|
||
for page_id in INDEPENDENT_PAGES:
|
||
try:
|
||
print(f"\n📄 获取页面 {page_id}...")
|
||
|
||
# 获取页面信息
|
||
page_info = await client.get_page(page_id)
|
||
if not page_info:
|
||
print(f" ❌ 页面 {page_id} 不存在")
|
||
continue
|
||
|
||
title = page_info.get('title', '')
|
||
print(f" 标题: {title}")
|
||
|
||
# 解析船舶标题
|
||
ship_info = DataParser.parse_ship_title(title)
|
||
if not ship_info:
|
||
print(f" ⚠️ 无法解析标题: {title}")
|
||
continue
|
||
|
||
# 获取页面内容
|
||
html_content = await client.get_page_content(page_id)
|
||
if not html_content:
|
||
print(f" ❌ 无法获取内容")
|
||
continue
|
||
|
||
# 提取表格数据
|
||
df = DataParser.extract_table_data(html_content)
|
||
raw_data = {}
|
||
if df is not None:
|
||
raw_data = DataParser.dataframe_to_dict(df)
|
||
|
||
# 提取关键指标
|
||
metrics = DataParser.extract_key_metrics(raw_data)
|
||
|
||
# 创建ShipData
|
||
ship_data = ShipData(
|
||
ship_code=f"{ship_info['location']} {ship_info['ship_number']}#",
|
||
location=ship_info['location'],
|
||
ship_number=ship_info['ship_number'],
|
||
report_date=ship_info['report_date'],
|
||
raw_data=raw_data,
|
||
**metrics
|
||
)
|
||
|
||
# 确定月份
|
||
if ship_data.report_date:
|
||
month = f"{ship_data.report_date.year}.{ship_data.report_date.month:02d}"
|
||
else:
|
||
month = None
|
||
|
||
independent_ships.append({
|
||
'page_id': page_id,
|
||
'title': title,
|
||
'ship_data': ship_data,
|
||
'month': month
|
||
})
|
||
|
||
print(f" ✅ 成功: {ship_data.ship_code} - {ship_data.report_date} - TEU: {ship_data.teu}")
|
||
|
||
except Exception as e:
|
||
print(f" ❌ 错误: {e}")
|
||
|
||
await client.close()
|
||
|
||
print(f"\n{'=' * 60}")
|
||
print(f"✅ 获取到 {len(independent_ships)} 条独立数据")
|
||
print(f"{'=' * 60}")
|
||
|
||
return independent_ships
|
||
|
||
if __name__ == "__main__":
|
||
ships = asyncio.run(get_independent_ship_data())
|
||
|
||
# 打印汇总
|
||
print("\n📊 独立数据汇总:")
|
||
for ship in ships:
|
||
data = ship['ship_data']
|
||
print(f" {data.ship_code} ({ship['month']}): TEU={data.teu}, Moves={data.moves}")
|