起點:2019 年 12 月到 2020 年 1 月
我一直到最近才發現這件事:
| 專案 | 起點 |
|---|---|
Kyusung4698/PoE-Overlay | 2019-12-27(repo 建立) |
SnosMe/awakened-poe-trade | 2020-01-08(首個 release) |
rChinnnn/rchin-poe-trade | 2020-01-20(repo 建立) |
24 天之內,三個互不相識的人各自開始寫 Path of Exile 的查價工具。
我當時的參考對象就是 PoE Overlay——它用 Electron,而我熟 Vue,所以路徑很自然。印象中那時 awakened 也剛開始建構。三個人都在解同一個問題:POE 的交易全靠官方交易網站,而遊戲裡按 Ctrl+C 複製出來的物品文本,理論上可以自動轉成搜尋條件。
我做的版本有一個明確的差異:它是給繁體中文玩家用的,而且支援台服。
那不是市場分析的結果,是因為我自己在玩台服。
這個工具做了什麼
技術上它非常直白,而且完全不碰遊戲記憶體:
- 使用者在遊戲裡把滑鼠停在物品上按
Ctrl+C - Electron 監聽剪貼簿變化
- 解析物品文本——稀有度、基底、詞綴、數值、品質、物品等級
- 把解析結果轉成官方 trade API 的查詢條件
- 打 API,顯示價格分布
Ctrl+C → 剪貼簿 → 文本解析器 → trade API 查詢 → 價格第 3 步是全部的難處所在。物品文本是為人眼設計的,不是為機器設計的:同一個詞綴在傳奇裝和稀有裝上的寫法不同、混合詞綴(hybrid mod)要拆開比對、偽屬性(例如「總元素抗性」)在文本裡根本不存在需要自己算、而台服和國際服繁中的用詞還有差異。
資料層是這樣的:
src/assets/poe/
├── stats.json 3.4 MB
├── stats_old.json 3.0 MB
├── stats_us.json 2.3 MB
├── items_old.json 981 KB
├── items.json 884 KB
├── items_cn.json 802 KB
├── poedb-tw.json 700 KB
└── duplicateStats.json 19 KB
─────────
約 12 MB12 MB 手動 check in 到 git 的 JSON。 每個賽季更新一次。這是整個專案最大的維護負擔,後面會講到它其實有 90% 是可以刪掉的。
六年的數字
全部來自 GitHub REST API,2026 年 8 月查證:
| 指標 | 數值 |
|---|---|
| 累積安裝檔下載 | 501,911 |
| release 數 | 43(2020-03 ~ 2025-06) |
| Stars / Forks | 226 / 40 |
| 最後一版 | v1.326.0(2025-06-17) |
| 單版最高下載 | v1.326.0,40,540 次 |
| 授權 | GPL-3.0 |
| 技術棧 | Electron 14.2.6 + Vue 2.6 + Bootstrap-Vue + Element UI |
一個有趣的測量:怎麼知道一個停更的工具還有多少人在用
electron-updater 會在程式啟動時去抓 release 裡的 latest.yml 比對版本。所以那個檔案的下載數 ≈ 程式被啟動的次數。
但 GitHub 的 download_count 是累計值,沒有時間維度。要得到速率,只能取兩次樣相減。
2026-08-19 我隔了約 2.9 小時取樣兩次:
| 指標 | 增量 | 推估日速率 |
|---|---|---|
latest.yml(≈ 啟動次數) | +41 | 約 340 次/天 |
Setup.exe(新安裝) | +8 | 約 70 次/天 |
而 v1.326.0 發布至今 428 天,latest.yml 累積 256,607 次 → 歷史平均 600 次/天。所以它衰減到約六成,但每天還有 70 個新使用者裝上一個 14 個月沒更新的版本。
驗證這個解讀成立的方法:只有「當前 latest」那個 release 的 latest.yml 會繼續累加。兩次取樣期間 v1.325.0 的計數完全凍結在 177,920——符合預期。
誤差來源要誠實講:mirror、CI、爬蟲也會被算進 download_count(往上偏);取樣時段是台灣週三下午非尖峰(往下偏);41 個事件的 Poisson 誤差就有 ±16%。量級可信,精度不可信。
三個值得寫下來的技術發現
一、electron-updater 的更新來源綁在建置機器上
2025 年之後,一位貢獻者 a80093119 接手在 fork 上持續維護。到 2026 年 8 月,他的 fork 領先我的上游 18 個 commit:程式碼 +2,973 / −614,抽出了 9 個 src/utils/* 模組(heist 搜尋、ultimatum 搜尋、地圖搜尋重構、物品文本解析獨立成 copyText/、螢幕擷取 + OCR),還加了 CI 自動發版。
但他的修復觸及不到我的使用者:
| 累積安裝檔下載 | |
|---|---|
| 我的上游 repo | 501,911 |
| 他的 fork(11 個 release) | 3,537 ~ 4,335 |
約 0.7%。
原因在建置設定裡:兩邊都是 publish: ['github'](vue.config.js),而 package.json 的 repository 是 null。於是 electron-builder 在建置時從建置機器的 git remote 推導更新來源,把它烤進成品裡。
結論:只有從原始 repo 發版,才動得了原始 repo 的安裝基數。 fork 得再好,程式在跑,人不在上面。
這件事的實務含義是:開源專案的「交棒」如果只是 fork,對桌面應用的既有使用者等於沒發生。真正的交棒必須包含發行權。
二、每季的資料苦工有 90% 是可以刪掉的
repo 裡那 12 MB 的 JSON,其實 GGG 一直都免驗證、即時、以繁體中文提供:
https://pathofexile.tw/api/trade/data/stats 1,918,835 bytes
https://pathofexile.tw/api/trade/data/items 334,683 bytes
https://pathofexile.tw/api/trade2/data/stats 583,374 bytes ← POE2(2026-08 實測皆 HTTP 200。)
也就是說「每個賽季手動更新 12 MB JSON 並 commit」這件我做了六年的事,大部分可以換成一支帶快取的 API 呼叫。接手的維護者也走在同一個方向——他的資料檔 diff 是 +15,414 / −137,668 行,在大量刪減。
剩下那 10% 刪不掉:新物品、新詞綴的解析規則,以及一件現實——要修「某件道具搜不到」的 bug,你手上得有那件道具。 這是程式解決不了的部分,也是我最後決定交棒的真正原因。
三、3.29 的複製格式改版,三個工具的反應速度
2026 年 7 月 24-25 日,POE 3.29 上線,Ctrl+C 的行為改了——原本要按進階詞綴鍵才會附帶的資訊,變成一律附帶。所有依賴文本解析的工具同時壞掉。
| 工具 | 反應 |
|---|---|
| awakened-poe-trade | 上線當天修完(commit 2026-07-25「no longer need to press adanced mod button」,同日發 v3.29.101) |
| 接手者的 fork | 約一週(7/27 拆解 hybrid mod → 8/01 修殘存傳奇前綴,發 1.329.1) |
| 我的 v1.326.0 | 壞到今天 |
證據就在我自己的 issue tracker 裡。2026-07-31,issue #167,一位使用者貼了完整的新格式物品文本:
{ 傳奇詞綴— 傷害,物理,攻擊 }
增加 253(250-275)% 物理傷害我的解析器回:{"error":{"code":2,"message":"Unknown item base type"}}
順帶一提,這個新格式長期是好消息——詞綴分組有標註、數值範圍明確,遊戲把物品文本往機器可讀的方向推了。它只是在過渡期弄壞了所有舊解析器。
生態:三條路,三種結局
六年後回頭看那 24 天裡開始的三個專案:
awakened-poe-trade(SnosMe)
留在純開源。累積安裝檔下載 903 萬,2,566 stars,到 2026 年 8 月仍幾乎每天 push。
它有一個決定值得記錄。2024-12-08,在「要不要支援 POE2」的 issue 底下,作者本人的回覆:
「I'm evaluating the decision to support poe2 and leaning towards NOT to. I think it's better to pass the torch to those who are passionate about poe2 and actually play it... While I will continue to work on poe1.
p.s. It's not THAT hard to add support, it's hard to support both games at once.」
「加上去不難,難的是同時養兩個。」 這句話同時解釋了為什麼「二合一查價器」這個看起來明顯的產品六年來沒人做成。
變現的部分也值得寫下來:它的 Patreon 是 74 位付費會員 / 每月 $234.3——而那一個 Patreon 同時養 awakened 和它的 POE2 分支。以 903 萬次下載計,付費轉換率約 0.0008%。repo 裡的 patrons.json 有 247 筆終生紀錄,也就是曾經付費的人裡約 70% 已經停止,中位數付了 10 個月。
PoE Overlay(Kyusung4698)
這條路我原本記錯了,查證之後完全不同。
它沒有閉源——repo 到今天仍是 MIT、公開、未封存。它也不是後來「投靠」Overwolf:repo 描述從 2019-12-27 建立那天就寫著「Built with Overwolf and Angular」。它一開始就在 Overwolf 上。
當年的爭議是平台選擇。Overwolf 要另外安裝 client、有廣告、吃資源,遊戲社群長年不喜歡。所以 2020-06-10,社群建了一個 fork——而那個 fork 的描述把「Overwolf」拿掉了,只留「Built with Angular」。分裂的主題就在那行字裡。
值得注意的是那個 fork 建立時,原作者還在活躍開發(他一路 commit 到 2021-01)。所以那不是棄坑後的接手,是開發中期的路線分歧。
而結局是:他把專案公司化(Kyusung Interactive Co., Ltd.),做了 POE1 和 POE2 兩個版本,用免費加廣告加 Supporter 訂閱的模式,後來補上了 standalone 版本——也就是社群當年抗議的那個點,他最後自己解決了。到 2026-08,Overwolf 上兩個 app 合計超過 310 萬下載,前天還在更新。
rchin-poe-trade(我)
走進沒人服務的繁中/台服縫隙,做到 50 萬次安裝,然後在我不再是使用者的那一刻停下來。
三條路的分岔點都不是技術能力,是「你想跟這個東西維持什麼關係」。 SnosMe 想一直玩 POE1,所以他至今每天在修。Kyusung 想把它做成事業,所以他吃了罵聲、公司化、兩代都做。我想做一個自己要用的好工具——所以當我不用了,它就停了。
三個人都得到了自己要的東西。沒有一條路是錯的。
為什麼這個類別的時代結束了
2026-05-23,GGG 在 Path of Exile 2 的 0.5.0 更新公告裡寫(Steam 官方公告原文):
「Added the ability to quickly search the trade market with an item you have. Shift-Alt Clicking on an item will populate the filters for searching the trade market so you can see the current prices. For Rare items, you can enable and disable each modifier to easily determine the effect each one has on an item's price.」
官方內建了查價。 而且做的正是第三方工具的核心功能:一鍵把手上的物品轉成交易搜尋條件,稀有裝還能逐條開關詞綴看價格影響。
它取代的不只是功能,是取得動機:POE2 在 2026-12-12 以免費形式正式發布後湧進來的新玩家,會直接學到 Shift+Alt 是「官方查價的方式」,永遠不會想到要去找第三方工具。
有趣的是 POE1 目前沒有。我掃了 POE1 的 300 則 Steam 官方公告(2024-10 ~ 2026-08),Shift-Alt、price check、trade market 全部零命中。
(誠實的限制:POE1 的 Steam 頻道偏行銷,完整 patch notes 主要發在官方論壇,所以零命中是有力證據但不是證明。)
順帶記錄 GGG 政策的演變,因為它對整個類別是存在性的:
- 剪貼簿解析是明文允許的(開發者文件:讀 log 檔可以,只要使用者知道你拿那些資料做什麼;讀剪貼簿的許可來自官方 2020 年的論壇回覆)
- 但官方 API 文件裡沒有任何 trade search 端點——所有查價工具用的都是未文件化的網站內部 API,而文件本身寫著「逆向工程本文件之外的端點違反使用條款」
- OAuth 註冊在 2026-05-13 到 2026-08-19 之間關閉了,頁面現在寫「We are currently unable to process new applications」
- 同一個窗口新增了條款:「we cannot allow our Intellectual Property to be used to generate commercial revenue」(自舉的例子限於實體商品與素材挪用,未點名捐款或廣告)
一個新的查價工具,在 2026 年已經沒有辦法成為合規的註冊應用了。
交棒
我不玩 POE 了。而這個工具最需要的那項條件——修 bug 時手上有那件道具——正好是我唯一給不出來的。
接手的人已經證明了他的條件比我好:18 個 commit、模組化重構、CI 自動發版、5 天吃下 3.29 改版。而他一年來還把 README 裡的捐款連結指回我的帳號。
所以正確的動作不是我回來重構,是把發行權交出去——因為 fork 觸及不到那 0.7% 之外的人,而每天還有 70 個新使用者裝到壞掉的版本。
如果重來一次,我會做的三件事
一、第一天就寫 fixture 語料庫。 每一則「這件道具搜不到」的 issue 都是一條天然的回歸測試。六年下來我累積了幾十則這樣的 issue,如果每一則都變成測試案例,改版時的修復速度會是另一個量級。
二、解析失敗時自動(選擇性)回報物品文本。 這會讓使用者變成「手上有那件道具」的供給鏈——而那正好是單人維護者最缺、也最無法自己解決的東西。
三、不要把資料 commit 進 git。 12 MB 的 JSON 躺在 repo 裡六年,讓每次資料更新都變成一個巨大的 diff(接手者的一個 PR 是 +18,872 / −138,501 行),而它本來可以是一支帶快取的 API 呼叫。
資料來源與查證方法
這篇文章裡的每個數字都可以自己驗:
- 下載數、commit、release、issue:GitHub REST API(
/repos/{owner}/{repo}/releases的assets[].download_count) - 使用速率:同一個欄位,隔 2.9 小時取樣兩次相減
- 同時在線人數:Steam Web API
ISteamUserStats/GetNumberOfCurrentPlayers - GGG 更新公告:Steam Web API
ISteamNews/GetNewsForApp(appid 238960 / 2694490)——官方論壇有 Cloudflare 擋 curl,Steam 這條路沒有 - trade API 資料大小:直接
curl官方端點 - GGG 政策條文變動:開發者文件現況 + Wayback Machine 快照對比
標為「印象中」「推測」的部分就是我沒查到的部分。這篇文章裡我有兩個記錯的地方(PoE Overlay 的閉源與平台遷移),是查證之後才發現的——所以有些結論的初稿跟定稿完全相反。
工具的原始碼在 rChinnnn/rchin-poe-trade(GPL-3.0)。如果你在找一個現在還在維護的繁中查價工具,去看 a80093119 的 fork。