0.1基础 自动搜票工具日志和经验总结(AA 35K F为例)

夜半无人 开始写正是泥潭开黑打完游戏的贤者时间 (哦 同时还在摸鱼贴 忆往昔峥嵘岁月愁?)
无聊了来写点个人最近微调搜票工具的经验分享吧
(不太会写任何形式的文章 所以零言碎语很多 请包容
一向是没有技术 没有内容量 只有感情)

虽然

而且还能强迫大家看我灌水 :xieyan:

这里将会介绍

  • 大概写python脚本的过程
  • GCP和OCI的使用方式
  • 一些有用无用不知道的微调优化 试图在跟其他脚本的竞争中抢占先机

更新
04/20

  • 添加了昨天遗忘的Azure Free Tier对比
  • 更多的无病呻吟
  • 对AS的茫然
  • 补完了OCI篇

应该是基本完整了

一、前言

事情的起因毫无疑问 一定是因为

1. 有headroom

2. 有需求

去年年底回国 返回美丽国继续打工上班的时候 有幸捡到了@smb 老师贴子里的某一班JL12
可怜的小安同学第一次坐真·头等舱(AS大板凳可别来犯蹭!) 觉得确实不错


想了想一年花个一千多刀*2往返坐飞机(:cry:接下来四年能不能每年回国还不知道呢 :cry:) 感觉也不算多大的奢侈
如果有机会再体验一次东京纽约线啥的也挺好 而且也是开卡点数的合理变现手段嘛

二、开始干活(写脚本)

一切的一切 起点肯定是 @smb 老师的 0基础用Python和Postman搜里程票教程
老师的成果展示:

但是我无数次一分钟两分钟点进去 都能看到链接被四五个人点过了 :yaoming:
尤其是如果热门的机票突然露出 大家的手更是快过闪电 :high_voltage:

按照教程里把calendar view的curl query取出来随便扔postman里试验了一下没毛病 验证了一下完整的response一切顺利 接下来就是想办法把python功能补完了 再随便扔个地方跑起来了吧 (当时天真地想着 @lucasI 老师不是说了0基础成本 部署脚本吗 应该很容易吧)

第一步就傻眼了 不知道怎么变成python代码(都这个年代了 总不能让我一行一行写吧 :rage:) 毕竟postman是真没咋用过
还好网上找到了类似这样的工具:https://curlconverter.com/ 直接就转化成正常的python代码了

哎 其实我是个铁笨蛋 明明二楼就有别的老师分享过了

工具示例图

接下来就是各种无聊的小修小补了

  1. 依次列出来想搜的几条路径 HND-DFW双向 HND-NYC双向
    1.1 LHR CDG直接排除 没工夫管他们 本美西人民不在乎
  2. 写个函数 生成一下接下来的11或者12个月
  3. 把上面两个信息插入回request
  4. 添加无聊的多次query之间的随机间隔(10s左右)
  5. 按照response格式 取出想要的信息 判断到底有没有80k的直飞头等舱
    5.1 有结果就先存下来 打印出来 回头再想怎么办吧 反正现在ORD/LAX/SFO的老舱F我是不想要的
  6. 加一些可有可无的debug信息和各种奇奇怪怪的debug方法
  7. 循环一万次开始跑吧! :oncoming_fist: :laptop: :fire:
本地运行示例图

本地验证了脚本有效没有什么卵用啊 毕竟人类是长在手机上得 没长在电脑上 :yaoming:

还好选择了python了 毕竟有一些倒霉孩子

每分每秒都有人在证明 选择比努力更重要 :doge:

我想起来slack和discord这些工具有那么多bot 提供了那么多方便的接口 肯定很简单易用吧
网上随便搜一搜 那我开个新的discord channel 绑定一个webhook用来接收消息不就完事儿了吗

discord示例图

discord当前版本效果图


长时间运行发现了以下一些问题

  1. 长时间存在没人要的烂票(比如HND-LAX或者各种临期票啦)在刷我discord channel的屏
    解决方式:随意加了一个存储 如果一定时间内找到过这张票就跳过
  2. AA有些时候有幽灵票
    解决方式(正统):重新写个单日query 一般JAL F的票应该只有一张 :ghost:票的余票数量是不同的
    解决方式(本懒人):一个月如果有个≥3张的票 那99.99%肯定是 :ghost:票了 至少这样90%的 :ghost:票情况都排除了 不管了 边际收益太低了
  3. 有些时候程序挂了不知道
    解决方法:随便每隔一段时间发送一个heartbeat消息给另外的discord debug channel 不影响体验 还可以查验

三、脚本上云

本地稍微跑一跑 挂机一晚上看看效果 感觉没啥问题就开始想办法找个地方部署脚本了
毕竟 @lucasI 老师已经介绍过一些AWS的基础知识了

先总结

Free tiers

AWS

Free tier截图

  • 没有永久免费的虚拟机实例(VM instance)
  • 12个月的试用期 可以有两个instance
  • 每月提供 1M 的lambda request额度(大概可以估算为 86400 * 30 / 1M = 2.5秒一次request)
  • 链接:免费云计算服务 - AWS 免费套餐

更多体验可以参照 0 成本用 AWS 部署自动化搜票/房工具

GCP

Free tier截图

  • 一个永久免费的E2-micro虚拟机实例(跑这些小破脚本足够啦) 但是其他服务有可能收费
  • 300刀赠金 九十天试用期
  • 令人迷惑的扣款和记账(我们仍未知道赠金是哪个服务扣除的 :thinking:)
billing截图

OCI

Free tier截图

  • 两个永久免费的E2-micro和一个永久免费的A1 划重点 一共三个虚拟机 :rocket:
  • 300刀赠金 三十天试用期
  • 漏洞百出的记账 从来没变动过的数字(你搞个HTML斜杠变成了乱码 是觉得自己很幽默吗 :thinking:?)
  • 极其难用
  • 链接:Oracle Cloud Free Tier | Oracle

Azure

奇怪 我昨天是怎么忘记把Azure列出来的 :thinking:
估计是大半夜太困了 :sleepy_face:

Free tier截图

内容和AWS基本一致 感觉不到优势 我直接放弃试用了。。。所以没有体验分享

开始部署

刚开始我计算了一下 4条线路(年底也许升级到6条线路) 12个月 扔到AWS上完整query一次就要三五分钟了 这种延迟还是跟AWS说88吧 (后来也没有再用过) 不小心用超了 也许还要被 @AWS 老流氓抢钱 不如直接避开以免AWS free tier账户突然收到账单

看到GCP之后我愉悦地发现 这是有永远免费完整虚拟机的 我乐观的估计 同时跑十个几十个python脚本应该问题也不大

步骤 GCP篇

以英文版为例

  1. 打开 https://cloud.google.com/ 并注册账号
  2. 进入 https://console.cloud.google.com/ (如果没有自动进入)
  3. [Optional] 可以创建新的project—— JAL First Class Finder :yaoming:
项目Project图示

而不是使用默认的My First Project 毕竟未来还可以创建Qsuite Finder, ANA First Class Finder啦

  1. 在Console内创建虚拟机(Create a VM)
Console界面图示

  1. 创建一个新的E2-micro instance
创建虚拟机图示

个人理解 Region和Zone应该无关紧要 我选了一个离我最近的 不改把Zone留空为Any应该也可以
请一定选择E2-micro 显示价格为7.11刀每月 但是个人理解 至少6.11部分是明文免费的 1.00部分摸不到头脑 :man_getting_massage: (哎 这图摸到了)

  1. 等待虚拟机启动完毕
虚拟机就绪图示

理论上应该会自动跳转 等待一会儿即可
也可以通过 https://console.cloud.google.com/compute/instances 跳转 Status变为 :white_check_mark: 就代表已启动

  1. 通过SSH连接进入虚拟机
登录虚拟机图示

A.虚拟机启动后 即可点击进入虚拟机
B.并通过SSH登录虚拟机
C.会自动弹出一个新窗口 也可以把链接复制到浏览器来打开

  1. 上传脚本文件
上传脚本图示

A. 点击 UPLOAD FILE
B. 选择你的脚本文件
C. 上传完成
D. 通过 ls command来验证

  1. 启动脚本
    还等什么呢 直接输入命令 就开始跑吧!然后在手机上坐等消息吧
启动脚本图示

举个:chestnut:
nohup python3 aa_35k_f_query_2025_0420.py 1 100 &
关于如何运行python 不在本碎嘴文范围内 额外参数也是无关信息

在GCP上运行一周 我就开始aggressive地开始企图优化了
一个instance容易被Linda限流封IP 那我用两个instance 速度不就翻倍了吗
但是GCP的账单和Free Tier的免费额度 可能好像告诉我这样不太行
只能再另寻出路了咯

而且

虽然GCP可以多个账号多开 但是因为某些原因 我也许不敢太过分

直到我很意外地发现OCI的always free tier 竟然提供三个实例 如此大方?!?!
真是小觑了天下英豪啊

步骤 OCI篇(今日不晚 已更新)

还是以英文版为例 但是OCI我创建小号一直失败 也许是因为OCI需要绑定信用卡吧 :face_exhaling:
所以有一些创建账号相关内容缺失 但是想必也不重要吧 毕竟泥潭的智商在线 这都不是事儿

  1. 打开 Oracle Cloud Free Tier | Oracle 并创建账号
创建账号示例图

他喵的OCI的账号创建也是繁琐的很 甚至还需要我搞什么奇奇怪怪的authenticator 但是毕竟没有什么坑 跳过


甚至邮箱会被Trim 真的绝了

邮件收到信息后继续验证即可

OCI继续创建账号


继续输入地址

你就会被要求验证信用卡了

接下来的其他步骤我就跳过了 毕竟我创建小号一直卡在这里

  1. 打开 https://cloud.oracle.com/ 进入
登录示例图

每次登陆都需要的烦人验证

  1. 在Console内创建虚拟机(Create a VM)
Console示例图

  1. 创建虚拟机
创建虚拟机示例图

第一个坑
这里就来了


默认实例不是E2 而是A1 点击Change Shape的时候
三个AD (Availability domain 感觉是类似Zone的意思)不是每个都有E2-micro的 有时候需要三个AD里找一下!

选择合适的VM instance进入下一步骤

第一次的用户还需要创建新的Virtual cloud network等等 我直接使用了已存在的

第二个坑
SSH key也不像Google是自动绑定到Google账号的 每次登陆需要一个额外的验证
这边建议您第一次创建一个key pair之后 下载公钥私钥 后续的实例重复使用同样的公钥呢亲
关于公钥私钥 可以参考公开密钥加密 - 维基百科,自由的百科全书 不在本文范围之内


然后依次下一步即可创建虚拟机
当然因为我已经有了几个VM在跑 就得到了错误提示

  1. 等待VM就绪
    如果没有跳转 可以通过https://cloud.oracle.com/compute/instances 进入VM列表
VM图示

  1. 使用VM
使用示意图

下一个坑来了 OCI没有自带的SSH FTP工具!!!
总不能有人逼迫我用windows自带吧?应该是:dog: 都不用吧
我被迫网上搜索了一下 选择了Xshell8和 Xftp8工具组合 感觉确实不错 难怪网上好评不少

A. 通过简单的ssh 命令即可
举个例子 ssh://[email protected]:22
B. 使用之前下载的私钥来登陆

  1. 上传脚本文件
上传文件示意图

迫于无奈 我使用了Xftp 8 因为是同一家的工具 界面基本相同
最基本的ftp命令即可
举个例子 sftp://[email protected]

  1. 运行脚本
    这里就平平无奇 跟GCP完全一样了 输入命令直接运行即可
运行脚本示意图

没办法 明明OCI用起来比GCP多辣么多步骤 但是你提供三个instance你就是我一辈子的好鹏宇了 :people_holding_hands:

四、额外思考

哎 没能完全停下来 今晚先补充一点额外内容

VM instance有什么用

我们首先可以假设 脚本挂了是因为被Linda限流了 那你有多个实例 多个IP地址 天然就可以并行跑脚本啦
如果我有4个VM实例 分别运行每一条线路 以10s间隔为例 是不是我的延迟最多就是120s(12个月)而已了呢?
如果我有8个实例 是不是可以每个线路只查半年了 延迟减半了呢
如果我有48个实例 是不是我的延迟最多只有5s了呢
如果我有96个实例 是不是我还能准备一个备份 保证服务不会single point failure了呢

脚本搜票完全是一个众人拾柴火焰高的事情 天然符合论坛分享精神的呢 :pleading_face:
(当然众人之间又是互相竞争机票的关系)
寻找合适的伙伴一起运行脚本自然能大大提高你的机票提示的时效性了呢 :fire:

收到通知就无脑抢票吗?

刚开始有工具的时候我还兴致勃勃 毕竟每次discord弹出提示 过半时间泥潭的链接还是没有被点击过的 我点进去想hold成功率也很高

心里想着 票贩子转手票 随手乱hold一下 我能拦一手就拦一手呗

之前欢欢乐乐地hold和book

回头问问朋友 问问潭友 看看有没有人要 举个:chestnut:

后来逐渐就倦怠了 基本就是点进去一下 2hr订票窗口自动hold而已
自己想要的票一直没见过 折腾半天 也就订了一张大概率回头还是要退的

:cry:这可真是徒劳无功想把每朵浪花记清
不知道什么时候能猛然回头 你在那里

差生文具多

哎 折腾一圈 也不过是在 @oneworld 的残羹剩菜里挑挑拣拣
真正有货有存款的人 都直接JL CX里程360天左右已经hold 过了
这里剩下的不过都是别人吃干抹净不稀得要再退出来的玩意儿了吧
还得跟一群不知道是票代或者刷AA EP的大佬们拼抢 没意思 真的没意思 :cry:

AS商务舱

写不动了真的不想写了 刚开始拍脑袋没有想过
后来仔细想的时候茫然了 AS我到底要搜什么 可预见的短期未来 我应该没有从美西去欧洲的需求 平常求的也不过就是回东亚 跟父母旅旅游吧
美亚线目标商务舱 各种奇奇怪怪 零零碎碎的

  • 60k JL (nrt-sea/yvr) 我应该不太想坐
  • 75k/85k JX JL(351?) KE 有一定用处 但是也就一般吧 而且同档次替代品也很多
    甚至很多票330天准时放票的时候 很能活几个小时乃至几天就证明了 抢的不凶 也就不值得费心思吧
  • HA 现在这么贵 感觉不值当啊 :doge:
  • CX J 见不到影子 :person_shrugging:
    其他的更多AS经验我也不懂了 求大佬们顺手喂喂饭

虽然很多大佬的经验分享都是 管你飞不飞 先占了票再说 可是 :face_exhaling:哎。。。

五、后记

希望本文涵盖了足以让您一步一步follow 尽量少踩坑的使用GCP OCI来部署运行您的自定义脚本
个人理解 也是希望 本文真的可以允许对于cloud 0基础的人来上手(毕竟我本身就是0基础 完全不懂云)
或者也可以选择劝退一些觉得麻烦的人 不如贡献出来免费GCP/OCI VM 几个人一起合作(带资入股也是入股!) :doge:

当然就像老师说过的

本文的AA A35K F只是一个最简单的样例 这里对于脚本部分没有包教包会 毕竟每个网站的response都可能大相径庭
如果有什么疑问 或者 对于使用方式的不同意见 欢迎分享讨论(放心 当然肯定以您的意见为主!)

Extra 需求决定使用方法

如果需求单一 只需要追踪一两种服务 频率要求不高 AWS Azure没有问题
如果对未来有很多灵感 很大期许 个人推荐利用OCI的三个免费instance(红色有角三倍速!) 甚至搭配多个GCP账号一起使用
毕竟instance越多频率就越高 最后的notification都是可以利用同一个discord webhook整合到同一个频道的

额外更新 AA开始风控之后的各种尝试

当时发现aa加了反爬 cookie等等本文也就被干趴下了 本差生当时看到大家说Selemium也去尝试了一下 但是一直很奇怪的直接被403

后来朋友来家访问的时候说 你这直接在浏览器console里访问就是了 勉强时不时还能query几下 但是qps比起直接OCI版本已经慢了十倍不止了 :cry: :face_exhaling:
而且还是会时不时403 逼迫我增加奇怪的重启 等等
只是拿出来抛砖引玉 看看大佬们现在都是什么玩法

[Update] 被限速之后延迟超大 感觉得找几个朋友一起运行了

143 个赞

主要是太长了,先拖到底点个赞,收藏了回头再看 :yanjing:

2 个赞

为啥感觉看上去不是太成功哇。:see_no_evil_monkey::see_no_evil_monkey:

3 个赞

请问这是什么?码农日记?

2 个赞

昨天自己写了个小dnd游戏,npc和场景让ai generate,下周末复现这个 :rofl:

1 个赞

看完了你写的这么多字,嘴都张开了发现没饭?

8 个赞

好硬核的饭 吃不动啊

3 个赞

不明觉厉

1 个赞

一直用同一个ip 很快就会被rate limit。我之前用过aws的eventbridge,每次调个lambda,会好一些,不过过阵子又用不了了 :sweat_smile:

2 个赞

:yaoming:

1 个赞

唔 感觉还不错 加了一段

因为我发现 白金贴不太正常 每次链接出来 很快三四个点击上去 这票肯定当下就没了吧
(虽然经常 2hr 1day 5days之后又会因为hold不住被放出来)

1 个赞

哎 差不多的意思 毕竟

额 不是不可以放饭 也不过就是类似于白金贴的功能 毕竟直接端出来太不尊重 @smb 老师

道理我都懂 赶紧加lax :yaoming:

嚼不动 :yaoming:

这是逼着大伙都学码啊,不学码,连点数都花不出去 :wulian:

2 个赞

啊哈哈哈 我自我感觉有被白金贴的其他人卷到 没办法

1 个赞

已更新正文 应该内容完整了
包含了完整的GCP OCI的使用攻略 稍微会写一点python的人 或者利用gpt产生了代码的同学 应该可以按照相似的步骤 部署自己的脚本矩阵了 :doge:

放也没事,反正我已经钛金了 :xieyan:

3 个赞

其实脚本部分工作量极小 我反倒是因为0基础 不熟悉云 和慢慢微调query间隔花去了很多时间

这一部分其实之前老师说

我其实还是很收敛了 5+random(10)秒一发 感觉至少两三秒一发没啥问题

啊哈哈哈 这不是不知道哪天上货A35k吗

1 个赞

+1 上次用AWS还是2年前做某堂课的作业 :rofl:现在公司啥玩意都在databricks上直接养废了 :sob:

1 个赞