PTT 八卦板新年首 PO 機器人

此機器人集中二技術力之大成,成功在 2021 新年搶到八卦板首 PO
本人發誓要是搶到首 PO,便再也不搶了,並且將程式碼釋出!
因此才有了此篇說明教學,教導您如何順利地搶下首 PO

文章連結 https://www.ptt.cc/bbs/Gossiping/M.1609430402.A.DFF.html

使用說明

  1. 事先準備 ping ws.ptt.cc 在 3ms 以下的環境
    例如: 學術網路等,有高速網路中心加持事半功倍

    本人採用了兩個環境使用同一個演算法執行此程式

    一台是交大實驗室,電腦是第三代 i7 記憶體時脈 1333MHZ ping 3 ms
    一台是本人家中,300 Mbps 的光纖網路 Ryzen7 3700X 記憶體時脈 3600MHZ ping 4~5 ms

    分別位列第一二名

    除了證明演算法有用,搶到首 PO 的是 ping 較低的環境
    雖然是三代 U 但可見網路速度佔了一大部分的勝利因子

  2. 安裝 python & pip install PyPtt
    搜尋 python 找到官網之後,下載最新版本即可
    記得將 python 加入 path 或者自行建立 python 虛擬環境 venv

  3. 修改程式碼參數

    1
    2
    ptt_id, ptt_pw = 'PTT id', 'PTT pw'
    release = False

    請填上你的 PTT 帳密,如有安全疑慮可自行 code review
    具備正式與測試的參數設定,一年一度的搶首 PO 盛事,最好事先設定好免得因為時間快到而手忙腳亂

  4. 好好測試然後上路
    此程式釋出之後,可能會提高搶首 PO 的難度,最好事先找到 ping 值最低的網路環境
    預祝各位搶首 PO 順利!

演算法說明

我採用一個帳號兩個登入,一個負責與 PTT 對時,這件事非常重要
因為 PTT 主機的時間可能跟 time server 是不一致的,當你需要計較到 1 毫秒的差異的時候

你就需要有 API 可以跟 PTT 對時
參考: PyPtt 對時 API

因為很多失敗的例子都是文章列表顯示 1/1 可是文章裡面的時間卻是 23:59:59

根據 holishing 的文章
https://www.ptt.cc/bbs/PttNewhand/M.1483200003.A.415.html

節錄其中內文

直接按下 Enter 的時間或是按完 s 之後再按下 Enter 的那一瞬間
就是決定你內文記錄顯示的發文時間
而之後選完簽名檔後按下 Enter 的時間點 決定文章在板上文章列表的順序。

也就是說當儲存檔案按下 enter 之前的動作,都可以在新年的 00:00:00 的之前發生
這樣一來我們可以先做好編輯文章並按下 ctrl + x,靜靜的等待時間到來
這樣就可以減少發文瞬間的網路通訊量,你想貼出師表都可以

另一個登入,負責 PO 文
時間快到了,就打開編輯文章,按下 ctrl+x 輸入好最後的 s 只差 enter

當偵測到 00:00 了,瞬間按下 enter,選好簽名檔

流程示意圖

程式碼
https://github.com/PttCodingMan/PTT_bots/blob/master/first_post/first_post.py