您本周需要将实时体育数据接入您的 Python 应用,而无需与多个提供商、密钥或文档进行斗争。在本指南结束时,您将能够搜索 FlashScore 实体(团队、球员、比赛),列出支持的体育项目,并使用 Zyla API Hub 上的 FlashScore - Live API 获取某项体育的国家/比赛——配有可复制的 cURL 和 Python 代码,您可以直接投入生产。
您可以使用 FlashScore - Live API 构建的内容
FlashScore - Live API 提供对 FlashScore 结构化体育目录的编程访问:按名称搜索实体,列举支持的体育项目,并列出某项体育的国家/比赛。这非常适合:
- 用户选择团队或比赛的入门流程,您存储其规范 ID。
- 体育博彩、得分应用或 CMS 中的团队或比赛的自动完成。
- 发现功能(浏览体育,然后缩小到国家/比赛)。
因为它在 Zyla API Hub 上,您只需使用一个帐户、一个 API 密钥,以及跨所有集成的订阅 + 配额模型——没有按调用计费。
在 Zyla API Hub 上开始
在这里打开 API 列表:FlashScore - Live API。点击订阅(或在可用时开始免费试用)以获取您的 API 密钥。此 API 使用订阅 + 配额(而不是按调用计费)。第一个 API 提供 7 天试用或 50 次请求。没有免费计划可用。有关当前访问选项和配额,请在部署之前始终在 API 页面上确认。
所有请求都需要一个授权头:
- Authorization: Bearer YOUR_API_KEY
您将使用的端点
以下是此列表中可用的路径,完全按照 Zyla API Hub 上的文档。请勿添加请求体参数——这些都是简单的 GET 请求,带有指定的查询字符串。
1) 搜索
通过查询字符串搜索 FlashScore 实体(团队、球员、比赛)。
- 方法:GET
- URL:https://zylalabs.com/api/12518/flashscore-live-api/23852/search
- 参数:
- q(字符串,必需):搜索词(示例:real madrid)
cURL
curl -s -X GET "https://zylalabs.com/api/12518/flashscore-live-api/23852/search?q=real+madrid" \
-H "Authorization: Bearer YOUR_API_KEY"
JSON 响应
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…
在您的应用中使用:
- id:您将存储的实体的规范 FlashScore 标识符。
- type:实体类型(例如,团队),用于过滤 UI 选项。
- name、gender、country_name:用于下拉菜单和标签的可展示元数据。
- sport.id 和 sport.name:限制后续流程(例如,每项体育的国家列表)。
- image_path 和 country_image_path:您 UI 中的可选图标/徽章。
2) 获取体育
返回所有可用体育的列表。
- 方法:GET
- URL:https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports
- 参数:无文档。
cURL
响应是一个包含 sport_id、sport_url 和名称的体育对象列表(例如,足球、网球、篮球)。在调用获取国家时使用 sport_id。
3) 获取国家
返回特定体育的国家列表。
- 方法:GET
- URL:https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries
- 参数:
- sport_id(字符串,必需):示例 2
cURL
响应包括指定体育的 country_id、country_url 和名称。对于网球(sport_id 2),条目包括 ATP/WTA 单打和双打、表演巡回赛等。使用这些来填充比赛过滤器或构建在某项体育内的比赛导航。
Python:搜索和规范化实体
下面的代码片段调用同一列表上的搜索路径,读取核心字段,并规范化结果以便存储和 UI 显示。它使用文档中的授权头和真实查询参数 q=real+madrid。
Python
import os
import sys
import requests
API_KEY = os.getenv("ZYLA_API_KEY", "YOUR_API_KEY")
BASE_URL = "https://zylalabs.com/api/12518/flashscore-live-api"
def search_entities(query: str):
url = f"{BASE_URL}/23852/search"
params = {"q": query}
headers = {"Authorization": f"Bearer {API_KEY}"}
try:
resp = requests.get(url, headers=headers, params=params, timeout=15)
resp.raise_for_status()
except requests.RequestException as e:
print(f"HTTP error: {e}", file=sys.stderr)
return []
try:
data = resp.json()
except ValueError:
print("Non-JSON response", file=sys.stderr)
return []
# 仅规范化我们计划存储/显示的字段
normalized = []
for item in data:
sport = item.get("sport") or {}
normalized.append({
"id": item.get("id"),
"type": item.get("type"),
"name": item.get("name"),
"sport_id": sport.get("id"),
"sport_name": sport.get("name"),
"gender": item.get("gender"),
"country_name": item.get("country_name"),
"image_path": item.get("image_path"),
"country_image_path": item.get("country_image_path"),
"slug": item.get("url"),
})
return normalized
if __name__ == "__main__":
results = search_entities("real madrid")
for r in results[:5]:
print(f"{r["id"]} | {r["type"]} | {r["name"]} | {r["sport_name"]} | {r["country_name"]}")
节省您时间的注意事项:
- 超时:设置客户端超时(上面使用 15 秒)以避免请求挂起。
- 空结果:API 可以有效地返回空列表;在您的 UI 中处理它。
- 缓存:这些是 GET 请求;您可以通过查询字符串进行短 TTL 的缓存,以减少延迟和配额使用。
实用集成模式
基于搜索的入门
流程:用户输入团队 → 您调用搜索并传入 q,显示带有 image_path 和 country_image_path 的最佳匹配 → 存储 id + type + sport_id。这使您能够预配置与该规范 id 绑定的警报、部分或小部件。
体育 → 国家导航
流程:调用获取体育以填充体育选择,然后在用户选择体育时调用获取国家并传入 sport_id。使用 country_id 和名称值构建您的比赛过滤器。对于网球,条目反映巡回赛和比赛分组(例如,ATP/WTA 单打/双打)。
自动完成微服务
用一个小缓存(例如,每个查询 60–300 秒)包装搜索端点,并返回一个最小的 JSON {id, type, name, sport_name, country_name}。这使您的前端在网络和移动端快速且一致。
从 AI 代理(MCP)使用 API
每个 Zyla API 都可以通过 AI 编码代理和 MCP 兼容客户端(Claude Code、Cursor、Windsurf 等)使用 MCP 端点进行调用。配置您的客户端以访问:
- https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY
然后,您的代理可以对该列表中显示的路径发出相同的 GET 请求。有关连接 MCP 客户端的指导,请参见 MCP 参考。
错误处理、配额和部署提示
- 授权:所有调用都需要 Authorization: Bearer YOUR_API_KEY。将密钥保存在服务器端配置或秘密管理器中。
- HTTP 方法:此处文档中的所有路径均为 GET。请勿发送请求体;请按列出的方式使用查询字符串参数。
- 配额:此 API 是订阅 + 配额。第一个 API 提供 7 天试用或 50 次请求,并且没有免费计划。在负载测试之前,请在 API 页面上确认您当前的配额。
- 分页:在这些端点上未记录。请为您的过滤器和搜索预期完整数组;如有需要,请添加客户端分页。
- 弹性:对瞬态 5xx 响应实施重试和退避。对于 4xx 响应,请勿重试,除非进行代码更改。
- 可观察性:记录请求方法、URL 和状态码——而不是密钥。为了调试,转储响应头和主体的前 N 个字节。
端到端示例:浏览网球巡回赛然后搜索
- 列出体育:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports(仅授权头)
- 提取名称为网球的条目,读取 sport_id(在示例响应集中为 2)。
- 列出网球的国家/比赛:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries?sport_id=2
- 使用名称和 country_id 在您的 UI 中呈现 ATP/WTA 部分。
- 搜索特定实体:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23852/search?q=real+madrid
- 存储所选实体的 ids,以便在您的功能中稍后使用。
安全性和性能检查清单
- 将您的 API 密钥保存在服务器端;通过后端代理前端请求。
- 仅使用 HTTPS 端点,完全按照 zylalabs.com 上的文档进行操作。
- 通过完整 URL(包括查询字符串)对 GET 请求应用短 TTL 缓存,以提高响应速度。
- 验证和清理来自用户输入的 q 参数;在 URL 编码后按原样传递给 API。
- 设置合理的超时(连接/读取),并在您的 HTTP 客户端中强制响应大小的上限。
可复制的请求代码片段
搜索“real madrid”(cURL)
列出所有体育(cURL)
获取网球的国家/比赛(cURL)
接下来去哪里
在 Zyla 上探索完整列表:FlashScore - Live API。创建一个免费帐户以获取您的密钥并在几分钟内开始集成:注册。您还可以使用上述描述的 MCP 从 AI 编码代理直接调用这些 API。
常见问题
FlashScore - Live API 是否需要授权头?
是的。每个请求都发送 Authorization: Bearer YOUR_API_KEY。
是否有免费计划?
没有免费计划可用。第一个 API 提供 7 天试用或 50 次请求。请查看 API 页面以获取当前访问选项和定价。
此列表中有哪些端点可用?
搜索(GET /23852/search,带 q)、获取体育(GET /23853/get-sports)和获取国家(GET /23854/get-countries,带 sport_id)。
我可以传递请求体吗?
不可以。文档中的端点仅为 GET;请按列出的方式使用查询参数。
我如何从 AI 代理调用 API?
将您的 MCP 兼容客户端指向 https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY,并让它发出本指南中显示的相同 GET 请求。有关详细信息,请参见 MCP 参考。
官方 API 响应
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…
官方 API 响应
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…