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

GitHub Workflow运行nba_api请求超时问题求助

解决GitHub Workflow中调用NBA API超时的问题

问题场景

本地Python环境执行以下代码可正常获取数据:

leaguegamefinder.LeagueGameFinder(player_or_team_abbreviation='T',date_from_nullable = Today,date_to_nullable = Today, league_id_nullable = '00', outcome_nullable = "W")

但在GitHub Workflow中运行时触发超时错误:

requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='stats.nba.com', port=443): Read timed out. (read timeout=30)

已知NBA API会拦截部分云服务商IP,尝试更换代理、修改请求头后问题仍存在,以下是可行的解决思路:

可行解决办法

  • 使用自托管运行器(Self-hosted Runner)
    放弃GitHub官方的云运行环境,改用自己本地机器或非云服务商的服务器作为Workflow的运行器。这样请求的IP不在NBA的黑名单范围内,能直接正常调用API。只需在GitHub仓库中配置自托管运行器,Workflow里指定使用该runner执行任务即可。

  • 添加请求重试机制
    部分超时可能是临时网络波动导致,给请求增加重试逻辑能提升成功率。可以借助requests的适配器实现自动重试:

    from requests.adapters import HTTPAdapter
    from urllib3.util.retry import Retry
    import requests
    from nba_api.stats.endpoints import leaguegamefinder
    
    # 配置重试策略
    session = requests.Session()
    retry_strategy = Retry(
        total=5,
        backoff_factor=1,
        status_forcelist=[429, 500, 502, 503, 504]
    )
    adapter = HTTPAdapter(max_retries=retry_strategy)
    session.mount('https://', adapter)
    
    # 将nba_api的请求绑定到配置好的session
    leaguegamefinder.session = session
    
    # 执行请求
    game_finder = leaguegamefinder.LeagueGameFinder(
        player_or_team_abbreviation='T',
        date_from_nullable=Today,
        date_to_nullable=Today,
        league_id_nullable='00',
        outcome_nullable="W"
    )
    
  • 调整请求节奏与超时参数
    延长请求超时时间,同时在请求前增加随机延迟,模拟正常用户的访问频率,降低被拦截概率:

    import time
    import random
    from nba_api.stats.endpoints import leaguegamefinder
    
    # 请求前随机延迟1-3秒
    time.sleep(random.uniform(1, 3))
    
    # 设置更长的超时时间(例如60秒)
    game_finder = leaguegamefinder.LeagueGameFinder(
        player_or_team_abbreviation='T',
        date_from_nullable=Today,
        date_to_nullable=Today,
        league_id_nullable='00',
        outcome_nullable="W",
        timeout=60
    )
    
  • 改用本地预存数据
    如果需求是每日获取固定范围的比赛数据,可以在本地提前拉取数据并上传到GitHub仓库,Workflow直接读取仓库中的缓存文件,避免每次调用NBA API。比如设置本地定时任务,每天自动拉取数据并推送到仓库,Workflow只需读取仓库内的文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:15:37