如何使用 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 等。

常用參數說明

參數

說明

method

固定為 taobao.item.get

num_iid

商品唯一編號

fields

欲回傳的欄位,如:title,price,pic_url

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 requests

import 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 :

如您需要 Taobao API 可聯係我們:support@luckdata.com