mcpField
A
american-airlines

american-airlines

github.com/borski生产力78078 次安装2 天前更新
代码仓库

关于 american-airlines

此技能通过浏览器自动化读取 American Airlines AAdvantage 账户信息,适用于跟踪里程和精英会籍的旅客。它支持以 JSON 输出账户余额与状态,但不能预订航班。

主要功能

  1. 01查询可兑换里程余额
  2. 02查看精英会籍与忠诚积分
  3. 03查看 Million Miler 里程
  4. 04支持 2FA 与持久化配置文件
  5. 05以 JSON 输出结果

适用场景

  1. 01核对 AAdvantage 里程余额
  2. 02跟踪忠诚积分与会籍进度
  3. 03确认精英会籍等级及有效期

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/borski/travel-hacking-toolkit --skill american-airlines

安装后在 Claude Code 中输入/american-airlines确认已加载。

附带文件Dockerfilescripts/check_balance.py

详细介绍

American Airlines AAdvantage

查看 AAdvantage 奖励里程余额、精英会籍等级(Gold/Platinum/Platinum Pro/Executive Platinum)、忠诚积分和 Million Miler 会籍状态。使用 Patchright(未被检测到的 Playwright 分支),因为 AA 会拦截标准浏览器自动化工具。

需要 Patchright。 AA.com 会拦截原版 Playwright 和 agent-browser。

先决条件

pip install patchright && patchright install chromium

也可以使用 Docker(无需本地安装):

docker pull ghcr.io/borski/aa-miles-check:latest
# or build locally:
docker build -t aa-check skills/american-airlines/

用法

通过环境变量或标志传入凭据。如果使用密钥管理器(1Password、Vault 等),请按平常的方式注入凭据。

# Environment variables
AA_USERNAME=your_aa_number AA_PASSWORD=your_password \
  python3 scripts/check_balance.py --json

# Flags
python3 scripts/check_balance.py --username YOUR_AA_NUMBER --password YOUR_PASSWORD --json

# Docker
docker run --rm -e AA_USERNAME=your_aa_number -e AA_PASSWORD=your_password aa-check --json

双重身份验证处理

AA 要求在新设备上首次登录时进行电子邮件验证。脚本最多等待 120 秒以获取验证码。

你(Agent)无法访问用户的电子邮件。 AA 会将双重身份验证验证码发送到账户持有人的电子邮箱。当脚本触发双重身份验证时,你必须向用户索要 6 位验证码。这是必需步骤。不要尝试读取用户的电子邮件。不要猜测。不要跳过。向用户索要验证码,等待用户回复,然后将验证码写入代码文件。

Agent 工作流程
  1. 在后台运行脚本(nohup ... &、disown)
  2. 轮询 stderr,查找 "2FA REQUIRED",确认验证码已发送
  3. 向用户索要 AA 发到其邮箱的 6 位验证码
  4. 将验证码写入代码文件:echo "123456" > /tmp/aa-2fa-code.txt
  5. 等待脚本完成,并读取 stdout 中的 JSON 结果
持久化配置文件(重复运行时跳过双重身份验证)

使用 --profile name 保存浏览器 Cookie。首次成功完成双重身份验证后,后续使用同一配置文件运行时将完全跳过双重身份验证。配置文件存储在 ~/.aa-browser-profiles/{name}/。会话有效期为数小时,而非数天。

# First run: will need 2FA
python3 scripts/check_balance.py --profile user1 --json

# Later runs: same profile, no 2FA
python3 scripts/check_balance.py --profile user1 --json
验证码输入方式
  • 命令钩子: 将 AA_2FA_COMMAND 设置为一条命令,该命令会阻塞,直到获取验证码,然后将验证码打印到 stdout。脚本会先运行此命令,然后再回退到轮询文件。
  • 文件(默认): 脚本每隔 2 秒轮询一次 /tmp/aa-2fa-code.txt。将 6 位验证码写入该文件。
  • 直接传入标志: 如果运行前已获取验证码,可使用 --code 123456。
  • 自定义文件路径: --code-file /path/to/code.txt

输出

{
  "username": "XXXXXXX",
  "status": "completed",
  "miles": 123425,
  "elite_status": "Platinum Pro",
  "loyalty_points": 180,
  "name": "John Doe",
  "aadvantage_number": "XXXXXXX",
  "million_miler": 19328,
  "member_since": "Aug 23, 2011"
}
字段描述
miles奖励里程余额(可兑换)
elite_statusGold、Platinum、Platinum Pro 或 Executive Platinum(如果没有,则为 null)
loyalty_points本年度忠诚积分(3 月 1 日重置)
million_miler累计的 Million Miler 会籍里程
member_since账户创建日期

适用场景

  • 查看 AA 里程余额(AwardWallet 不支持 AA)
  • 验证精英会籍等级及其到期时间
  • 跟踪距离下一会籍等级所需的忠诚积分
  • 将 AA 奖励航班的可用情况与余额进行比较(可与 seats-aero 搭配使用)

不适用场景

  • 预订航班。 仅支持读取,不会修改任何内容。
  • 其他航空公司。 对于 AwardWallet 支持的航空公司,请使用 AwardWallet。

实现说明

  • AA 使用 6 个独立输入框输入双重身份验证码(每个输入框一位)。脚本会逐位输入,并自动跳转到下一个输入框。
  • 点击 Verify 按钮前,会通过 JS 移除 Cookie 同意横幅。
  • 必须通过 Tab+Enter 提交 Verify 按钮(JS .click() 和 Playwright .click() 都无法触发 AA 的 React 应用接受的可信指针事件)。
  • 必须设置 headless=False。即使使用 Patchright,AA 仍能检测到无头浏览器。Docker 使用 xvfb 提供虚拟显示器。

限制

  • 每个配置文件首次使用时需要双重身份验证。 无法绕过。AA 会发送电子邮件验证码。设置 AA_2FA_COMMAND 可自动获取验证码。
  • 会话过期。 持久化配置文件的有效期为数小时,而非数天。运行间隔较长时,可能需要再次进行双重身份验证。
  • 必须使用有头模式。 会在本地打开 Chrome 窗口。若要避免弹窗,请使用 Docker。

评论

支持 Markdown