Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@
<img src="./docs/banner.png" alt="pchome-cli" width="600" />
</p>

快速、易於整合腳本的 PChome 24h 購物命令列工具。支援商品搜尋、檢視商品詳情、比較多項商品以及取得商品推薦。內建 JSON 優先輸出、適合人類閱讀的表格格式,以及標準化的資料結構(Schema)。
快速且易於整合腳本的 PChome 24h 商品查詢 CLI 工具。支援商品搜尋、檢視商品詳情、商品比較與推薦功能。內建 JSON 優先輸出、人類可讀的表格格式,以及標準化的資料結構(Schema)。

## 功能特色

- **搜尋 (Search)** - 支援透過關鍵字搜尋商品,並可依照品牌、價格區間、評價、庫存狀態、24h 到貨、排序方式進行篩選,同時支援自訂輸出欄位
- **檢視 (View)** - 顯示詳細的商品資訊,包含規格、圖片以及相關警告提示
- **推薦 (Recommend)** - 根據指定商品取得相關的推薦商品,並可選擇顯示推薦原因
- **比較 (Compare)** - 並排比較多項商品,支援自訂顯示欄位
- **建議 (Suggest)** - 提供搜尋關鍵字的自動補全與建議
- **多種輸出格式** - 支援適合閱讀的文字表格格式、供腳本使用的 JSON 格式,以及適合串流或 AI 代理程式(Agent)整合的 NDJSON 格式
- **標準化資料結構 (Schema)** - 無論語系為何,皆維持穩定的英文欄位鍵值(`v1`),確保 AI 代理程式或腳本整合不會因語系切換而失效
- **搜尋 (Search)** - 透過關鍵字搜尋商品,可依照品牌、價格區間、評價、庫存狀態、24h 到貨、排序方式進行篩選,同時支援自訂輸出欄位
- **檢視 (View)** - 顯示商品資訊,包含規格、圖片以及相關警告
- **推薦 (Recommend)** - 根據商品取得相關商品推薦,並可選擇顯示推薦原因
- **比較 (Compare)** - 比較多項商品,支援自訂顯示欄位
- **建議 (Suggest)** - 關鍵字自動補全與建議
- **多種輸出格式** - 包含適合閱讀的文字表格、供腳本使用的 JSON 格式,以及供串流或 AI agent 整合的 NDJSON 格式
- **標準化資料結構 (Schema)** - 無論語系皆維持英文欄位鍵值(`v1`),確保 agent 或腳本整合不受語系切換影響
- **多國語系 (i18n)** - 支援繁體中文(預設)與英文介面
- **彈性的商品輸入格式** - 支援直接輸入商品編號(例如 `DRAA5K-A900JOK9O`)、帶有後綴的編號(例如 `DRAA5K-A900JOK9O-000`),或是完整的 PChome 商品網址
- **高度可設定** - 可透過 `~/.pchome/config.toml` 設定各指令的預設值、欄位排序以及輸出偏好
- **商品輸入格式** - 支援直接輸入商品編號(例如 `DRAA5K-A900JOK9O`)、含後綴的編號(例如 `DRAA5K-A900JOK9O-000`),或是完整的 PChome 商品網址
- **設定** - 可透過 `~/.pchome/config.toml` 設定各指令預設值、欄位排序以及輸出偏好

## 安裝方式

Expand All @@ -34,9 +34,9 @@ scoop bucket add oliyy https://github.com/oliyy/scoop-bucket.git
scoop install oliyy/pchome-cli
```

### 預先編譯的二進位檔 (Prebuilt Binaries)
### 執行檔 (Prebuilt Binaries)

您可以從 [GitHub Releases](https://github.com/oliy/pchome-cli/releases) 下載符合您作業系統的壓縮檔,解壓縮後將 `pchome` 放置於系統的 `PATH` 路徑下。
[GitHub Releases](https://github.com/oliy/pchome-cli/releases) 下載壓縮檔,解壓縮後將 `pchome` 放置於系統 `PATH` 路徑下。

### 從原始碼編譯

Expand All @@ -60,8 +60,8 @@ go install github.com/oliy/pchome-cli/cmd/pchome@latest

取得協助:

- `pchome --help` 會顯示最上層的指令群組
- 若要查看特定指令的說明,可使用 `pchome <command> --help`。
- `pchome --help` 顯示最上層的指令群組
- 使用 `pchome <command> --help` 查看特定指令說明

## 快速開始

Expand Down Expand Up @@ -118,7 +118,7 @@ pchome view https://24h.pchome.com.tw/prod/DRAA5K-A900JOK9O
# 基本推薦
pchome recommend DMBL53-A900JDNJS --top 8

# 顯示每項商品的推薦原因
# 顯示商品的推薦原因
pchome recommend DMAB3X-A900EVNNM --top 10 --why
```

Expand All @@ -139,22 +139,22 @@ pchome suggest "掃地機"
`PRODUCT` 參數支援以下格式:

- 原始商品編號:`DRAA5K-A900JOK9O`
- 帶後綴的商品編號:`DRAA5K-A900JOK9O-000`
- 完整的 PChome 商品網址:`https://24h.pchome.com.tw/prod/DRAA5K-A900JOK9O`
- 有後綴的商品編號:`DRAA5K-A900JOK9O-000`
- PChome 商品網址:`https://24h.pchome.com.tw/prod/DRAA5K-A900JOK9O`

## 輸出格式

### 文字 (Text)

預設選項,以簡潔的表格呈現適合人類閱讀的格式
以簡潔的表格呈現,方便人類閱讀 (預設)

```bash
pchome search "掃地機器人" --limit 3
```

### JSON

適合腳本與自動化流程的機器可讀格式
輸出機器可讀格式,方便腳本與自動化流程使用

```bash
pchome search "掃地機器人" --limit 3 --format json
Expand All @@ -163,7 +163,7 @@ pchome view DRAA5K-A900JOK9O --format json

### NDJSON

每行一個 JSON 物件,非常適合串流處理與 AI 代理程式整合
每行一筆資料,適用於串流處理與 agent 整合

```bash
pchome search "掃地機器人" --limit 5 --format ndjson
Expand All @@ -172,21 +172,21 @@ pchome recommend DMBL53-A900JDNJS --top 5 --format ndjson

`ndjson` 格式支援 `search`、`recommend`、`compare` 與 `suggest` 指令。

資料輸出至 stdout,錯誤訊息與進度則輸出至 stderr,方便您進行管線(Piping)處理:
將資料輸出至 stdout,錯誤訊息與進度則輸出至 stderr,方便進行管線(Piping)處理:

```bash
pchome search "掃地機器人" --format json | jq '.products[] | select(.price < 10000)'
```

## 設定與組態

在啟動時,`pchome` 會確認以下路徑的設定檔是否存在
在啟動時,`pchome`會確認設定檔是否存在以下路徑

```bash
~/.pchome/config.toml
```

若檔案不存在,系統會自動建立並填入所有預設設定
若檔案不存在,系統會自動建立並填入所有預設值

設定優先順序:

Expand Down Expand Up @@ -236,17 +236,17 @@ token = ""

備註:

- `columns = []` 代表「使用該指令的內建預設欄位排序」。
- 若您設定了 `columns`,該列表將會成為該指令的預設顯示欄位
- `columns = []` 代表「使用該指令的預設欄位排序」。
- 更改 `columns` 後,該列表即為預設欄位順序
- `i18n.language` 目前支援 `zh-TW` 與 `en`。
- 設定載入器會拒絕未知的鍵值,以防止拼寫錯誤被靜默忽略
- 為避免拼寫錯誤被靜默忽略,載入器會拒絕未知鍵值

## 實際應用範例

### 搜尋並篩選商品

```bash
# 帶有價格區間與庫存篩選的搜尋
# 價格區間與庫存篩選的搜尋
pchome search "掃地機器人" --min-price 5000 --max-price 15000 --in-stock

# 依照品牌與最低評價進行篩選
Expand All @@ -256,16 +256,16 @@ pchome search "掃地機器人" --brand Roborock --min-rating 4.8
pchome search "掃地機器人" --arrival-24h --sort price-asc
```

### 取得附帶原因的推薦商品
### 取得推薦商品的原因

```bash
pchome recommend DMAB3X-A900EVNNM --top 10 --why
```

### 將 JSON 輸出管線連接至 jq
### 將 JSON 輸出給 jq 處理

```bash
# 擷取低於特定價格門檻的商品名稱
# 取得低於特定價格的商品名稱
pchome search "掃地機器人" --format json | jq '.products[] | select(.price < 10000) | .name'
```

Expand Down
2 changes: 1 addition & 1 deletion cmd/testdata/help/root_zh_tw.golden
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
選項:
--format string 輸出格式:text|json|ndjson (default "text")
-h, --help 顯示 pchome 的說明
--name-width int 文字輸出時的商品名稱欄位寬度 (default 30)
--name-width int 商品名稱欄位寬度 (default 30)
--schema-version string 機器可讀輸出的 schema 版本 (default "v1")
--timeout duration API 請求逾時時間 (default 20s)
-v, --version 顯示 pchome 的版本資訊
Expand Down
6 changes: 3 additions & 3 deletions cmd/testdata/render/product_detail_zh_tw.golden
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ Micron Crucial X10
網址: https://24h.pchome.com.tw/prod/DRAA5K-A900JOK9O
品牌: Micron
商品名稱: Crucial X10 1TB
網路價: 4,340
市價: 5,999
售價: 4,340
原價: 5,999
折扣: 28%
評價: 5(4 則評價)
供貨狀態: 庫存=9 | 24h=Y | 出貨=Consign
庫存狀態: 庫存=9 | 24h=Y | 出貨=Consign
品牌別名: Micron, 美光
主圖: https://example.com/image.jpg
6 changes: 3 additions & 3 deletions cmd/testdata/render/search_zh_tw.golden
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
搜尋 "掃地機器人" | 傳回 1 筆(共 100 筆)| 第 1 頁 | 已掃描 1 頁 | 排序=relevance
# | 網路價 | 評價 | 評價數 | 24h | 庫存 | 品牌 | 商品名稱 | 商品編號
---|--------|------|--------|-----|------|--------|---------------------------|------------------
1 | 6,999 | 4.9 | 33 | Y | 20 | Xiaomi | 小米 Xiaomi 掃拖機器人H40 | DMBL53-A900JDNJS
# | 網路價 | 評價 | 評價數量 | 24h | 庫存 | 品牌 | 商品名稱 | 商品編號
---|--------|------|----------|-----|------|--------|---------------------------|------------------
1 | 6,999 | 4.9 | 33 | Y | 20 | Xiaomi | 小米 Xiaomi 掃拖機器人H40 | DMBL53-A900JDNJS
30 changes: 15 additions & 15 deletions pkg/i18n/i18n.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,11 @@ var translations = map[Language]map[Key]string{
RootFlagFormat: "輸出格式:text|json|ndjson",
RootFlagSchemaVersion: "機器可讀輸出的 schema 版本",
RootFlagTimeout: "API 請求逾時時間",
RootFlagNameWidth: "文字輸出時的商品名稱欄位寬度",
RootFlagNameWidth: "商品名稱欄位寬度",

SearchShort: "搜尋商品",
SearchExample: " pchome search \"掃地機器人\" --min-price 5000 --max-price 15000 --in-stock",
SearchFlagCategory: "分類編號",
SearchFlagCategory: "分類識別碼",
SearchFlagBrand: "品牌篩選(部分符合即可)",
SearchFlagSort: "排序方式:relevance(相關度)|price-asc(價格低至高)|price-desc(價格高至低)|newest(最新上架)|best-selling(最暢銷)",
SearchFlagPage: "起始頁碼",
Expand All @@ -247,8 +247,8 @@ var translations = map[Language]map[Key]string{
SearchFlagArrival24h: "只顯示支援 24h 到貨的商品",
SearchFlagColumns: "以逗號分隔的顯示欄位 (#,price,list,discount,rating,reviews,24h,qty,stock,brand,name,id,url,desc)",
SearchFlagShowURL: "在文字輸出中包含商品網址",
SearchFlagCompact: "在文字輸出中縮減商品名稱欄位寬度",
SearchFlagWide: "在文字輸出中增加商品名稱欄位寬度",
SearchFlagCompact: "使用較窄的商品名稱欄位",
SearchFlagWide: "使用較寬的商品名稱欄位",

ViewShort: "檢視商品詳情",
ViewExample: " pchome view https://24h.pchome.com.tw/prod/DRAA5K-A900JOK9O",
Expand All @@ -260,15 +260,15 @@ var translations = map[Language]map[Key]string{
RecommendFlagColumns: "以逗號分隔的顯示欄位 (#,score,price,list,discount,rating,reviews,24h,qty,stock,brand,name,id,url,why)",
RecommendFlagShowURL: "在文字輸出中包含商品網址",
RecommendFlagShowWhy: "在文字輸出中顯示推薦原因",
RecommendFlagCompact: "在文字輸出中縮減商品名稱欄位寬度",
RecommendFlagWide: "在文字輸出中增加商品名稱欄位寬度",
RecommendFlagCompact: "使用較窄的推薦商品名稱欄位",
RecommendFlagWide: "使用較寬的推薦商品名稱欄位",

CompareShort: "比較多項商品",
CompareExample: " pchome compare DMBL53-A900JDNJS DMBL1C-A900JA04J",
CompareFlagColumns: "以逗號分隔的顯示欄位 (#,price,list,discount,rating,reviews,24h,qty,stock,brand,name,id,url)",
CompareFlagShowURL: "在文字輸出中包含商品網址",
CompareFlagCompact: "在文字輸出中縮減商品名稱欄位寬度",
CompareFlagWide: "在文字輸出中增加商品名稱欄位寬度",
CompareFlagCompact: "使用較窄的比較商品名稱欄位",
CompareFlagWide: "使用較寬的比較商品名稱欄位",

SuggestShort: "提供搜尋建議",
SuggestExample: " pchome suggest \"掃地機\"",
Expand All @@ -287,13 +287,13 @@ var translations = map[Language]map[Key]string{
FieldSalesName: "商品名稱",
FieldNick: "簡稱",
FieldTagline: "促銷標語",
FieldDescription: "商品特色",
FieldPrice: "網路價",
FieldListPrice: "市價",
FieldDescription: "商品描述",
FieldPrice: "售價",
FieldListPrice: "原價",
FieldLowestObserved: "歷史低價",
FieldDiscount: "折扣",
FieldRating: "評價",
FieldAvailability: "供貨狀態",
FieldAvailability: "庫存狀態",
FieldFlags: "活動標籤",
FieldCategories: "分類",
FieldBrandAliases: "品牌別名",
Expand All @@ -316,21 +316,21 @@ var translations = map[Language]map[Key]string{
FilterMaxPrice: "最高價",
FilterMinRating: "最低評價",
FilterInStock: "有庫存",
FilterArrival24h: "24h 到貨",
FilterArrival24h: "24h到貨",

HeaderIndex: "#",
HeaderPrice: "網路價",
HeaderList: "市價",
HeaderDiscount: "折扣%",
HeaderRating: "評價",
HeaderReviews: "評價數",
HeaderReviews: "評價數量",
Header24h: "24h",
HeaderQty: "庫存",
HeaderBrand: "品牌",
HeaderName: "商品名稱",
HeaderProductID: "商品編號",
HeaderURL: "網址",
HeaderDescription: "商品特色",
HeaderDescription: "商品描述",
HeaderScore: "相關度",
HeaderWhy: "推薦原因",
HeaderSuggestion: "搜尋建議",
Expand Down