自己问卦自己回
本人发誓要是抢到首 PO
便再也不抢了,并且将程式码释出
因此有了此篇说明教学与算法说明
教导各位如何顺利地抢下首 PO
备注: 此程式释出后,可能提升抢首 PO 难度
施主请尽可能找到 ping 值较低的环境
首先是使用说明
0. 事先准备 ping ws.ptt.cc 在 3ms 以下的环境
例如: 学术网络等,有高速网络中心加持事半功倍
本人采用了两个环境使用同一个算法抢
一台在交大实验室
电脑是第三代 i7 内存时脉 1333MHZ
ping 3 ms
一台是本鲁宅家 300 Mbps 的光纤网络
Ryzen7 3700X 内存时脉 3600MHZ
ping 4~5 ms
分别位列第一二名
https://i.imgur.com/a338kMm.png
除了证明算法有用,抢到首 PO 的是 ping 较低的环境
虽然是三代 U 但可见网络速度占了一大部分的胜利因子
1. 安装 python & pip install PyPtt
搜寻 python 找到官网之后,下载最新版本即可
记得将 python 加入 path 或者自行建立 python 虚拟环境 venv
2. 修改程式码参数
ptt_id, ptt_pw = 'PTT id', 'PTT pw'
release = False
请填上你的 PTT 帐密,如有安全疑虑可自行 code review
具备正式与测试的参数设定
一年一度的抢首 PO 盛事
最好事先设定好免得因为时间快到而手忙脚乱
3. 好好测试然后上路
算法说明
我采用一个帐号两个登入
一个负责与 PTT 对时
一个负责贴文
对时这件事非常重要
因为 PTT 主机的时间可能跟 time server 是不一致的
当你需要计较到 1 毫秒的差异的时候
你就需要有 API 可以跟 PTT 对时
请参考 PyPtt get_time api
https://git.io/JLd2g
因为很多失败的例子都是文章列表显示 1/1
可是文章里面的时间却是 23:59:59
根据 holishing 大大在 2017 年的文章
https://www.ptt.cc/bbs/PttNewhand/M.1483200003.A.415.html
我节录一下内文
======节录内文=====
直接按下 Enter 的时间或是按完 s 之后再按下 Enter 的那一瞬间
就是决定你内文记录显示的发文时间
而之后选完签名档后按下 Enter 的时间点 决定文章在板上文章列表的顺序。
======内文结束======
也就是说当储存盘案输入完 s 按下 enter 之前的动作
可以在新年的 00:00:00 的之前发生
这样一来我们可以先做好编辑文章并按下 ctrl + x 输入好 s
然后静静的等待时间到来
这样就可以减少发文瞬间的网络通讯量,你想贴出师表都可以
另一个登入,负责 PO 文
时间快到了,就打开编辑文章,按下 ctrl+x 输入好最后的 s 只差 enter
当侦测到 00:00 了,瞬间按下 enter,选好签名档
最后附上流程示意图
https://i.imgur.com/fhn5gFh.png
附上程式码
https://github.com/PttCodingMan/PTT_bots/tree/master/first_post
最后感谢 PyPtt 提供技术支援
https://github.com/PttCodingMan/PyPtt