Files
Gloria/get_independent_data.py

104 lines
3.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""补充获取独立页面的数据"""
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}")