WordPress, 外掛開發

線上一番賞配率追蹤機器人 LINE Notify 開發(上)

線上一番賞配率追蹤機器人 LINE Notify 開發(上)

為何要用 LINE Notify 追蹤一番賞配率?

一開始的動機是因為有在線上一番賞平台 oneone 跟朋友合夥上架一番賞,但是因為平台上面的一番賞套數上千套之多,一個店家小店家小小賣一下,其實沒啥需要密切追蹤的需求。每天都固定處理客人抽到的獎品出貨單,我發現大概超過十套以上時,若是你沒有很多時間一直在那刷新頁面看配率被抽得怎樣,你幾乎很難知道自己的一番賞被抽得怎樣,這問題如滾雪球一樣越來越大,平台官方也沒有提供這樣的工具服務告訴你的商品配率即時狀況,你必須要自己抽時間不斷的刷新更新查看,然後極度考驗你的記憶力….或者需要一些筆記來關心一下你的銷售狀況。

於是,這個開發計畫就開始了!那麼就做一個簡易的爬蟲機器人吧!一個 WordPress 外掛 + LINE Notify 機器人來幫我們定時去查看所有上架的一番賞(對,只要平台上的都能追蹤)這個出發點就是從自身開始,先關心自身的商品銷售情況,就如同娃娃機的台主會關心自己台子的狀況,不時查看監視器或者場主的兌幣機兌幣量,都是一個特殊需求。

追蹤一番賞配率機器人程式的好處

因為一番賞日版的商品在台灣通常要提前叫貨購買,不然都是要等到台灣的海外代理版上市才能給人抽,又因為從日本寄送過來需要一點時間誤差,在開抽的當下,就像股市盯盤一樣,買氣很好還是一般般往往會影響到後續追加一番賞套的關鍵。熱門套當然就是要趕快追加,賣得一般般的就算了,我們可以人工盯盤看線上平台抽的情況,但人還是要休息睡覺吃飯,不可能 24 小時一直盯盤,根本搞死自己!所以即時的通知透過 LINE 真的是再適合不過了!換句話說,某種程度上就是一種要達到買空賣空必備的工具,你可以在銷售出去的即時馬上備貨,大幅降低囤貨成本,大大提升了獲利空間。

線上一番賞配率追蹤機器人 LINE Notify 開發(一)

OK,這樣的方式應該可以省點時間不用盯盤了,自從開發完這套之後,睡眠品質都變好了,每天早上最開心的是看到有人抽的通知,睡覺也在賺錢,這簡直是太讚啦!

追蹤一番賞配率機器人程式適合哪一些人

我覺得這種對某一些人來說是剛性需求,例如線上一番賞店家、線上抽一番賞狂熱愛好者、行銷分析者等等都是很必備的工具。因此最能符合使用者的莫過於自身就是使用者,我肯定的是商家絕對需要,而線上抽一番賞的狂熱客人,就不一定會需要,某種程度上專業的是有自己的一套方式快速到處精準狙擊某一些一番賞套,算準入場時機點並大力收割,十賭九輸幾乎不存在。我甚至合理懷疑某一些平台上的大戶都能少少抽就中公仔,是他們本身就有類似的工具,不然不盯盤天天都能這麼精準地逛到並且收割也太厲害。

因此,某種程度上這種工具可以提高抽中想要的公仔的機率,但我個人因為商家的緣故,我開發是用來觀察生意,去追蹤別的商家一番賞我是覺得沒這必要,因為知道即時配率但我是不需要花錢去抽的,就算抽了也不一定會中公仔。故這次的 Side Project 就是用來開發類似的應用,它經過修改之後還能追蹤 LINE@ 官方帳號的好友人數,又可說是商業應用的一種,了解競爭對手的生意情況,有助於調整市場營銷策略。

線上一番賞配率追蹤機器人 LINE Notify 開發(上)

開發追蹤一番賞配率機器人準備資料

首先要知道一番賞的規則,還有平台的規則,加總起來就能評估出開發所需資料,我目前依照這個一番賞平台評估之後,可以得到以下明確的資料:

  1. 每一套都是一個商品物件網址
  2. 每一套的套數抽數不一樣
  3. 每一套都有不同的店家銷售
  4. 區分套數可從網址與套組的名稱下手
  5. 不用登入就能看到配率(省去登入查詢)
  6. 開發的框架及環境(走 Web 應用而非 Python)
  7. 資料表的紀錄儲存(要追蹤的一番賞套)

WordPress 這邊要有一個保存紀錄資料表的機制,要記錄哪一些資料?這邊就必須仔細思考一下,目前就是確定要記錄店家的一番賞套網址、每一套的配率、快照與即時抽取的配率查詢。當初想過用 CPT 來做,但又覺得有點太肥大,失去了輕量化的優勢,因為 CPT 我必須額外切許多欄位,但這應用其實大概就只需要不到十個欄位就能運作起來,分別是:

  • LINE Notify Token
  • 商家一番賞套網址
  • 商家一番賞套標題

介面設計介紹

線上一番賞配率追蹤機器人 LINE Notify 開發(上)

因為是自己要用的,最早的開發版比這陽春很多,功能也比較簡單,在經過這次的深度改版開發,我把介面修改成透過 AJAX 產生的動態欄位,可以快速的新增要追蹤的一番賞套,填上網址之後,按下「標題取得」就可以透過 cURL 去爬取 TITLE 取回回填至這個網址欄位的套名稱,這邊很重要,因為它在後面的 LINE Notify 回報時是依照該標題標示的,如下圖:

線上一番賞配率追蹤機器人 LINE Notify 開發(上)

  • 複製:顧名思義的就是複製你點的這欄位往下新增一個一樣的
  • 前往:另開視窗前往該一番賞套的網址
  • 標題取得:取回該一番賞的標題
  • 移除:移除這個欄位不再追蹤

追蹤爬蟲機制設計

搞定了機制後,必須要先解析 HTML 取回的資料並進行分析,我們首先定位以下 HTML 結構

線上一番賞配率追蹤機器人 LINE Notify 開發(上)

確定取回的位置,就可以透過 xPATH 等等的方式定義爬蟲去爬取的位置是獎項位置,並找出獎項的數量跟結束爬取的範圍錨點,在 div class “pt-4” 這邊開始,</tbody> 結束收尾,去撰寫對應的程式碼,並賦予工作流程:

  1. 前往網址爬取位置開始到結束
  2. 爬取獎項名稱 + 剩餘 / 總數
  3. 逐一循環直到碰到 </tbody> 後停止
  4. 將資料儲存在外掛資料夾下的  logs 資料夾
  5. 以 ID 逐一命名,儲存成 txt 作為快照

完成確實可以正確取回格式資料後,我們可以得到以下的快照 txt 文件資料:

A賞 皮卡丘 絨毛娃娃 約20cm★ 0/2
B賞 波加曼 絨毛娃娃 約20cm★ 0/2
C賞 炎兔兒 絨毛娃娃 約18cm★ 0/1
D賞 木木梟 絨毛娃娃 約16cm★ 0/1
E賞 妙喵 絨毛娃娃 約18cm★ 0/1
F賞 皮丘 絨毛娃娃 約13cm★ 1/1
G賞 小仙奶 絨毛娃娃 約9cm★ 0/1
H賞 90cm毛毯☆ 0/1
I賞 咖啡碗(全2種) 約11cm 2/8
J賞 瓷盤、牙刷座等瓷器(全5種) 4/18
K賞 擦手毛巾(全6種) 7/22
L賞 杯墊、束帶(全6種) 7/22
合計 21/80

以上就是快照 snapshot,必須要做為比較組的,接著再設計流程為排程三分鐘執行函數去進行爬取掃描,另外紀錄成 liveshot,經由程式判斷 liveshot 與 snapshot 數字比較後,另外儲存一個變數依照格式打包,送給 LINE Notify,liveshot 則是先寫入覆蓋 snapshot 作為現況紀錄,完成覆蓋寫入後進行清除 liveshot,liveshot 主要工作就是一個臨時的掃描比對組,當比對結果是一樣的時候則離開這個工作流程迴圈,什麼事情都不會發生。

排程掃描設計

基本上我在開發時有設計一個按鈕直接觸發執行掃描,方便除錯 DEBUG,但正式要運作還是要透過排程去進行。排程有兩種做法,分別是 Linux 的伺服器主機 cron job 以及 WP Cron,前者比較多限制,沒有主機管理權限的難以設定,後者雖然很好設定,但依賴在網站上面會需要網站本身要有自帶流量,一個無人的網站是無法觸發工作排程的,因此依照自身環境狀況去選擇吧!

以 WP Cron 來開發的話,我會先創一個 hook 去做事件:

add_action('oneone_tracker_cron_hook', 'perform_dry_run_operations');

接著用 Advanced Cron Manager 管理程式去設定三分鐘事件,執行勾點 oneone_tracker_cron_hook 就可以進行每三分鐘掃描一次的作業。

  1. 在 WordPress 後台,前往「工具」>「Cron Manager」。
  2. 點擊「添加 cron 事件」按鈕。
  3. 在「Hook 名稱」欄位中,輸入您剛剛設定的 oneone_tracker_cron_hook
  4. 選擇適當的時間間隔。您可以選擇已存在的時間間隔,或者自定義時間間隔。
  5. 點擊「添加事件」來排程您的任務。

線上一番賞配率追蹤機器人 LINE Notify 開發(上)

其它沒說的

其實要說完全部還真難,包含了 LINE Notify 去開設取得 TOKEN 我想網路上已經有很多資源教學了,就不在這邊反覆講述;最花時間的莫過於測試除錯時的狀況,例如它會有偶發的重複發送訊息的問題,從我的一個函數 save_date_to_file 去產生快照跟即時檔案時沒對獨佔權定義限制,導致在大量同時抽取時會出現重複通知的 BUG,解決方式如下:

function save_data_to_file($dir, $filename, $data) {
    $dir = rtrim($dir, '/') . '/';
    $file_path = $dir . $filename;
    $file_handle = fopen($file_path, 'w'); // 開啟文件用於寫入並鎖定
    if ($file_handle === false) {
        error_log("Unable to open file for writing: " . $file_path);
        return;
    }

    if (flock($file_handle, LOCK_EX)) { // 獲得獨占鎖
        fwrite($file_handle, $data);
        fflush($file_handle); // 清空輸出緩存並寫入檔案
        flock($file_handle, LOCK_UN); // 釋放鎖
    } else {

後面更多的開發就等下一集吧!因為我還做了一個一鍵抓取整個店家的一番賞的功能,方便一次大量建檔追蹤,如果您是 oneone 一番賞平台的商家,肯定會很需要 XD

Need help?

需要幫忙?

代客處理服務區塊

我們提供相關技術支援服務

或許您對於此文章的功能或解決方式不熟悉,需要專業的技術人員為您協助。我們提供「收費代客處理」服務,歡迎隨時與我們聯絡。