如何使用 Taobao API 實作商品價格追蹤與變動提醒功能
前言
在電商應用中,商品價格追蹤與變動提醒 是極具價值的功能。無論是協助用戶比價、設定購買時機,還是建立促銷通知系統,Taobao API 都提供了穩定的商品資料來源來實作這些功能。
本篇文章將會深入介紹:
如何使用
taobao.item.get
查詢即時商品價格如何設計一個簡單的價格追蹤系統
如何儲存與比對歷史價格
實作變動提醒機制(Email、LINE Notify、Webhook 等)
Python 與 Node.js 的實作範例與詳盡說明
1. 價格追蹤的基本概念
價格追蹤是指「定期自動查詢某商品的價格,若有變動則觸發通知」,這種功能常應用在以下場景:
比價網站或 App
電商導購平台
聰明購物提醒工具
聯盟行銷精準推播
其典型流程為:
[ 定時任務 Scheduler ]↓
[ 查詢價格 API(taobao.item.get) ]
↓
[ 比對價格(與資料庫記錄比對) ]
↓
[ 若變動 → 發送通知 ]
↓
[ 更新價格記錄 ]
2. 使用 taobao.item.get
查詢即時價格
Taobao 提供的 taobao.item.get
API 可以查詢指定商品 ID 的資訊,包含價格、標題、圖片、賣家 ID 等。
常用參數說明
參數 | 說明 |
---|---|
| 固定為 |
| 商品唯一編號 |
| 欲回傳的欄位,如: |
API 返回結果範例:
{"item_get_response": {
"item": {
"title": "運動無線耳機",
"price": "89.00",
"pic_url": "https://image.taobao.com/img/abc.jpg",
"num_iid": 321654987123,
"seller_id": "seller_abc"
}
}
}
這段 JSON 表示我們成功取得該商品的標題、售價與圖片網址。
3. Python 實作:商品價格追蹤腳本
以下是一個用 Python 撰寫的基本價格追蹤腳本,具備價格查詢、比對、變動通知與紀錄功能。
步驟一:基本設定與簽名產生函式
import requestsimport hashlib
import time
import json
import os
API_URL = 'https://api.taobao.com/endpoint'
API_KEY = 'YOUR_API_KEY'
API_SECRET = 'YOUR_API_SECRET'
DATA_FILE = 'price_log.json'
這段程式碼是設定 API 的相關參數與紀錄檔路徑(儲存價格變化用)。
def generate_signature(params):sorted_keys = sorted(params.keys())
base = API_SECRET + ''.join(f"{k}{params[k]}" for k in sorted_keys) + API_SECRET
return hashlib.md5(base.encode()).hexdigest().upper()
這裡是計算簽名(Signature)的方法。許多第三方 API(包括淘寶)都要求所有請求具備簽名以驗證合法性。
步驟二:查詢商品即時價格
def get_price(num_iid):params = {
'method': 'taobao.item.get',
'api_key': API_KEY,
'num_iid': num_iid,
'fields': 'title,price',
'timestamp': int(time.time())
}
params['signature'] = generate_signature(params)
response = requests.get(API_URL, params=params)
return response.json()['item_get_response']['item']
這段會呼叫 Taobao API,傳入商品 ID,並回傳商品標題與價格的 JSON 結果。這是整個追蹤流程的核心。
步驟三:讀取與儲存本地價格記錄
def load_price_history():if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r') as f:
return json.load(f)
return {}
def save_price_history(data):
with open(DATA_FILE, 'w') as f:
json.dump(data, f)
使用 JSON 檔案儲存歷史價格。若檔案存在就載入;若不存在則建立空字典。這是判斷價格是否變化的依據。
步驟四:變動通知與價格比對邏輯
def notify(title, old_price, new_price):print(f"[提醒]『{title}』價格由 NT${old_price} → NT${new_price}!")
這裡簡單地以 print
模擬通知功能。實際應用中可改為發送 email、LINE Notify、Web Push 等。
def track_price(num_iid):data = load_price_history()
item = get_price(num_iid)
title = item['title']
current_price = float(item['price'])
prev_price = float(data.get(str(num_iid), {}).get('price', current_price))
if current_price != prev_price:
notify(title, prev_price, current_price)
data[str(num_iid)] = {'title': title, 'price': current_price}
save_price_history(data)
這段是追蹤流程的整合:查詢新價格、與上次比較、如變化則提醒並更新記錄。
4. Node.js 實作:結合排程與 Webhook 通知
以下為 Node.js 範例,並搭配 node-cron
套件定時執行查詢,每 10 分鐘檢查一次。
設定與簽名
const axios = require('axios');const crypto = require('crypto');
const fs = require('fs');
const cron = require('node-cron');
const API_KEY = 'YOUR_API_KEY';
const API_SECRET = 'YOUR_API_SECRET';
const API_URL = 'https://api.taobao.com/endpoint';
const ITEM_ID = '321654987123';
const PRICE_FILE = './price_record.json';
function generateSignature(params) {
const sortedKeys = Object.keys(params).sort();
let base = API_SECRET;
sortedKeys.forEach(k => { base += k + params[k]; });
base += API_SECRET;
return crypto.createHash('md5').update(base).digest('hex').toUpperCase();
}
這裡與 Python 相同,用於 API 認證與簽名。
查詢價格與紀錄處理
async function getPrice(numIid) {const params = {
method: 'taobao.item.get',
api_key: API_KEY,
num_iid: numIid,
fields: 'title,price',
timestamp: Math.floor(Date.now() / 1000)
};
params.signature = generateSignature(params);
const { data } = await axios.get(API_URL, { params });
return data.item_get_response.item;
}
function loadHistory() {
if (fs.existsSync(PRICE_FILE)) {
return JSON.parse(fs.readFileSync(PRICE_FILE));
}
return {};
}
function saveHistory(record) {
fs.writeFileSync(PRICE_FILE, JSON.stringify(record));
}
這段處理資料的抓取與本地快取,邏輯與 Python 類似。
發送通知與排程追蹤
function sendWebhook(title, oldPrice, newPrice) {axios.post('https://your-webhook-url.com', {
text: `[Price Alert] "${title}" dropped from NT$${oldPrice} to NT$${newPrice}!`
});
}
cron.schedule('*/10 * * * *', async () => {
const record = loadHistory();
const item = await getPrice(ITEM_ID);
const current = parseFloat(item.price);
const previous = parseFloat(record.price || current);
if (current !== previous) {
sendWebhook(item.title, previous, current);
saveHistory({ title: item.title, price: current });
console.log(`Price change detected: ${previous} → ${current}`);
} else {
console.log('No change.');
}
});
每 10 分鐘執行一次查詢
若價格變化 → 發送 Webhook 到你指定的平台(如 Slack、LINE Bot、Discord 等)
5. 延伸建議與優化方向
建議項目 | 說明 |
---|---|
批次追蹤多個商品 | 可使用商品清單 Array 進行迴圈追蹤 |
將通知模組抽離 | 可封裝為通知中心,支援多種通道(Email、LINE、SMS) |
建立 Web 管理介面 | 用戶可自行設定追蹤商品與目標價格 |
加入降價才提醒 | 只在價格「下降」時才推播 |
整合資料庫 | 使用 MongoDB 或 SQLite 替代 JSON 儲存,更適合多用戶應用 |
結語
本篇文章完整介紹了如何使用 Taobao API 建構一個商品價格追蹤系統,並透過範例代碼一步步展示核心功能的實現方式。不論是開發個人小工具還是商業級應用,本方法皆可靈活擴充與整合。
Articles related to APIs :
Introduction to Taobao API: Basic Concepts and Application Scenarios
Taobao API: Authentication & Request Flow Explained with Code Examples
Using the Taobao API to Retrieve Product Information and Implement Keyword Search
如您需要 Taobao API 可聯係我們:support@luckdata.com