2024 亚航东盟无限飞折腾记

一张来自 AirAsia.com 的低分辨率截图,展示了 “亚航东盟无限飞” 的订阅选项,图片中显示 “搭乘亚航班机于东盟成员国随心飞行” 以及 “388 新币每年” 和 “0% 分期利息” 的文字说明
网页截图,来自亚洲航空的 ASEAN(东南亚国家联盟,简称东盟)无限飞行计划

本文最后更新于 2024 年 3 月 29 日

来自马来西亚的亚洲航空(AirAsia)近日推出了他们继 2022 年 SUPER+ 无限飞行年度计划之后的又一个年度订阅计划 AirAsia Unlimited Asean Pass(亚航东盟无限飞)。和上一年度的订阅计划不同,这一次的计划订阅费用变得更贵,并且仅限于在东盟国家的 69 条航线内的指定日期的航班内选择(要知道,去年的套餐是可以全球范围飞行的!)。然而抱着折腾不止的心态,我还是毅然决然购买了他们的年度飞行计划,踏上了一条折腾不止的不归路……

友情提示:这个计划本身有很多很坑的地方,如果没有做好折腾的准备,千万不要购买!

计划限制

在亚行东盟无限飞计划的条款与条件页面中有诸多限制,这里先整理概括如下:

  • 只能乘坐如下亚航所属航空公司的国际航班:亚洲航空公司(代码 AK)、泰国亚洲航空(代码 FD)、印度尼西亚亚洲航空(代码 QZ)、菲律宾亚洲航空(代码 Z2)以及亚洲长程(代码 D7)
  • 仅能预定从 2024 年 5 月 1 日 – 2025 年 4 月 30 日之间的指定航班
  • 以下日期不提供无限飞
    • 诸灵节(2024 年 10 月 30 日 – 2024 年 11 月 4 日):菲律宾亚洲航空
    • 圣诞与新年假期(2024 年 12 月 19 日 – 2025 年 1 月 5 日):全部航空公司
    • 中国农历新年(2025 年 1 月 24 日 – 2025 年 2 月 3 日):全部航空公司
    • 开斋节(2025 年 3 月 27 日 – 2025 年 4 月 6 日):全部航空公司(菲律宾亚洲航空除外)
    • 泼水节(2025 年 4 月 10 日 – 2025 年 4 月 20 日):全部航空公司(菲律宾亚洲航空除外)
    • 圣周(2025 年 4 月 15 日 – 2025 年 4 月 22 日):菲律宾亚洲航空
  • 除此之外,所有 Unlimited 订阅的可用航班仅以查询页面的展示为准
  • 最多有 2 个未成行航段(每个航段可以是单程,也可以是往返),并且至少提前 14 天预定航班
  • 允许“预定但未上飞机”(no show)至多 3 次
  • 某一天起飞的航班最多为 2 班,并且不能从相同的城市出发

看起来是一个还算公平的计划,是这样吗?我算了一笔账,因为我居住在新加坡,并且持有的是中国内地护照,自疫情结束之后中国与东南亚许多国家都签订了互免签证协定。因此包括泰国、马来西亚与(将来很快的)印度尼西亚在内的许多国家,去旅行都会很方便。388 新币(约合 2000 人民币左右)的计划价格,只要平均每个月周末旅行一次,就可以完全值得回本。因此我义无反顾地购买了这项计划订阅。

更多的坑

我自认为完整阅读了计划的条款与条件后,便能清晰了解该计划的优缺点,于是购买计划后,我便开始预定机票,筹划着 5 月份的第一次旅行。然后我就遇到了这样的错误提示:

一张网页屏幕截图,搜索的是 2024 年 5 月 4 日至 5 月 5 日,从新加坡樟宜国际机场(SIN)到兰卡威国际机场(LGK)的机票预定,并且包含一条错误信息
网页截图,促销码无法用于选定的航线或日期

无法用于选定的航线或者日期?我又尝试了许多不同的目的地/时间选项,最后终于发现我忽略了无限飞订阅中的一个重要限制:所有的可用航班均以查询页面的展示为准,并不是除了限制日期外,所有日期都有航班,并且可用日期的航班也是有限的。以新加坡 – 吉隆坡的单程航班为例,可用于 2024 年 5 月 3 日(星期五)的预定航班如下:

一张网页截图,展示了通过预定优惠码在 AirAsia.com 官网预定 5 月 3 日由新加坡飞往吉隆坡的航班信息,其中推荐的航班是 07:55-09:00,以及 09:10-10:25 的两班航班,显示了 100% 折扣的字样,税费与其他费用的应缴纳总价为 394 人民币
网页截图,在无限飞计划下,5 月 3 日(星期五)由新加坡飞往吉隆坡的航班只有两个上午航班适用

新加坡 – 吉隆坡是全球最繁忙的国际航线,仅亚洲航空每天便有超过 12 班定期航班往返两座城市之间。而适用于无限飞的航班却选择“十分有限”。另外,该计划在许多目的地之间的限制,使“周末游”变得不是十分可行,以新加坡往返兰卡威的航班为例,2024 年 5 月 – 6 月期间,无限飞适用于如下日期:

  • 新加坡到兰卡威:大部分是周一、周二、周三与周日
  • 兰卡威到新加坡:大部分是周二、周三、周四、周五与周六

因此,从新加坡到兰卡威的周末游变得就不是十分可行。AirAsia 官网上提供的查询工具非常简陋,仅能查询特定月份的两个目的地之间的单程航班的一般供应量情况:

一张网页屏幕截图,展示了一个允许用户输入出发机场、到达机场和月份的查询器,用于查询可用航班的日期和大致容量
网页截图,AirAsia.com 官网东盟无限飞页面提供的航班供应查询器

抱着折腾不止的心态,我找到了该工具的数据源[Wayback Machine]:这是一个记录了从 2024 年 5 月 – 2025 年 4 月期间,无限飞计划的所有可用航班及其供应量的列表。值得注意的是,似乎该列表是动态增长的。在本文初次写就时,该列表中共有 17955 项可用的航班信息,而如今列表中拥有超过 2.1 万条航班信息数据。我对该数据进行了一些统计,发现一些有趣的数据事实如下:

  • 一共有 68 条航线及其往返航线可用:BKI – SIN, BKI – MNL, BKI – CGK, BKK – KUL, BPN – KUL, BTJ – KUL, BWN – KUL, CGK – KUL, CGK – PEN, CGK – DMK, CGK – JHB, CGK – SIN, CGK – KCH, CGK – PNH, CNX – KUL, CNX – HAN, CXR – DMK, CXR – KUL, DAD – KUL, DAD – DMK, DMK – KUL, DMK – MNL, DMK – SGN, DMK – RGN, DMK – PNH, DMK – SAI, DMK – KNO, DMK – HAN, DMK – VTE, DMK – SIN, DMK – LPQ, DMK – DPS, DMK – PEN, DMK – JHB, DPS – KUL, DPS – SIN, HAN – KUL, HDY – KUL, HDY – SIN, HKT – KUL, HKT – SIN, IPH – SIN, JHB – SUB, JHB – SGN, KBV – KUL, KCH – SIN, KJT – KUL, KNO – PEN, KNO – KUL, KOS – KUL, KUL – SGN, KUL – SIN, KUL – PNH, KUL – PDG, KUL – PKU, KUL – MNL, KUL – YIA, KUL – SUB, KUL – SAI, KUL – UPG, KUL – LOP, KUL – RGN, KUL – PQC, LGK – SIN, PEN – SIN, PEN – SUB, PEN – SGN, SIN – YIA(按字母顺序排序)
  • 最多班次的航线:从苏丹谢里夫·卡西姆二世国际机场(代码 PKU)到吉隆坡国际机场第二航站楼(代码 KUL),订阅期内一共有 288 天提供可用航班
  • 最少班次的航线:从新加坡樟宜国际机场(代码 SIN)到苏加诺-哈达国际机场(代码 CGK),订阅期内一共只有 11 天提供可用航班:2024-06-24, 2024-06-25, 2024-06-27, 2024-11-18, 2024-11-19, 2024-11-20, 2024-11-21, 2024-11-25, 2024-11-26, 2024-11-27, 2024-11-28
  • 星期三的可用航班最多,其次是星期二和星期四。而周日的可用航班最少,周五和周六其次
Python 源代码
import re
import json
from typing import NamedTuple, List, Dict

class Flight(NamedTuple):
    Origin_Country_Name: str
    Destination_Country_Name: str
    Origin_Airport_NameAndCode: str
    Destination_Airport_NameAndCode: str
    DepartureDateMYT: str
    TrafficLightSequence: str

class FlightRoute(NamedTuple):
    origin_code: str
    destination_code: str

def get_airport_code(string: str) -> str:
    return re.findall(r'\(([A-Z]{3})\)', string)[0]

with open("O2availableseat.json", "r") as _f:
    flights: List[Flight] = json.loads(_f.read())

flight_info: Dict[tuple, list] = {}

for flight in flights:
    origin_code = get_airport_code(flight["Origin_Airport_NameAndCode"])
    destination_code = get_airport_code(flight["Destination_Airport_NameAndCode"])
    route = (origin_code, destination_code)
    if route not in flight_info:
        flight_info[route] = []
    flight_info[route].append(flight)

flight_info = dict(sorted(flight_info.items(), key=lambda x: len(x[1]), reverse=True)) # sort by number of flights DESC

如果你需要更直观的查询这些数据,我已经将它共享到 Google Sheet 在线文档中,你可以随时浏览或将这些数据下载到本地。你可以使用这些数据来规划你的行程,比如说找到可以供周末旅游的航线,或者研究是否值得购买亚航无限飞。