You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Flightradar24 API获取航班计划与实际到达时间?代码报错求助

解决Flightradar24 Python API调用中KeyError: 'time'及获取实际到达时间的问题

错误原因

你遇到的KeyError: 'time'是因为flight_data字典中不存在'time'键——第三方flightradar24库的get_flight方法返回的数据结构会因航班状态(未起飞、飞行中、已完成)或数据完整性而变化,且官方文档未明确说明结构细节。

修复步骤与优化代码

1. 先确认返回数据的实际结构

在调用get_flight后添加打印语句,输出完整的flight_data,明确所有可用字段:

flight_data = fr24.get_flight(flight_number)
print(flight_data)  # 打印完整结构,用于排查字段位置

2. 安全访问嵌套字段,避免KeyError

替换直接索引字典键的方式,改用dict.get()逐层安全访问,即使字段不存在也不会抛出错误。

3. 定位实际到达时间字段

实际到达时间通常藏在status或time的嵌套结构中,比如可能是flight_data.get('status', {}).get('real', {}).get('arrival')或flight_data.get('time', {}).get('real', {}).get('arrival'),需根据打印的结构确认。

修改后的完整代码

import asyncio
import flightradar24
from datetime import datetime
from dateutil import parser

fr24 = flightradar24.Api()

async def get_flight_status(**kwargs) -> dict[str, object]:
    flight_number: str | None = kwargs.get('flight_number', None)
    flight_date: str | None = kwargs.get('flight_date', None)

    if not flight_date:
        flight_date = datetime.now().strftime("%Y-%m-%d")
    else:
        try:
            parsed_date = parser.parse(flight_date)
            flight_date = parsed_date.strftime("%Y-%m-%d")
        except ValueError:
            return {"final_answer": "Invalid date format. Please use a valid date format."}

    try:
        flight_data = fr24.get_flight(flight_number)
        if not flight_data:
            return {"final_answer": f"No flight data found for {flight_number} on {flight_date}."}
        
        # 打印结构用于排查(调试完成后可删除)
        print("Flight data structure:", flight_data)

        # 安全获取计划时间
        time_data = flight_data.get('time', {})
        scheduled_departure = time_data.get('scheduled', {}).get('departure', 'No data')
        scheduled_arrival = time_data.get('scheduled', {}).get('arrival', 'No data')
        
        # 安全获取实际到达时间
        status_data = flight_data.get('status', {})
        real_arrival = status_data.get('real', {}).get('arrival', 'No actual arrival data')
        
        # 获取航班状态文本
        status_text = status_data.get('generic', {}).get('status', {}).get('text', 'No status available')

        result = {
            "flight_number": flight_number,
            "scheduled_departure": scheduled_departure,
            "scheduled_arrival": scheduled_arrival,
            "actual_arrival": real_arrival,
            "status": status_text
        }
        return {"result_data": [result]}
    except Exception as e:
        return {"final_answer": f"Failed to retrieve flight status. Error: {str(e)}"}

async def main():
    flight_info = await get_flight_status(flight_number='EK148')
    print(flight_info)

if __name__ == "__main__":
    asyncio.run(main())

额外提示

  • 如果get_flight无法返回实际到达时间,可尝试用fr24.get_flights()方法,结合航班号、出发/到达机场及日期进行筛选,部分航班的实际数据会在该接口中返回。
  • 若第三方库的接口无法满足需求,可查看flightradar24库的源码(比如api.py中的get_flight实现),了解其调用的官方API端点,直接构造请求获取更完整的数据(需遵守Flightradar24的服务条款)。

内容的提问来源于stack exchange,提问作者Aleksandr Demianov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:31:10