微店商品列表 API 返回?cái)?shù)據(jù)通常為 JSON 格式,包含商品基礎(chǔ)信息、庫(kù)存、價(jià)格、分類等核心字段。以下從數(shù)據(jù)結(jié)構(gòu)解析、關(guān)鍵字段說(shuō)明、解析示例三個(gè)維度,詳解如何高效提取和利用這些數(shù)據(jù):
一、整體數(shù)據(jù)結(jié)構(gòu)
微店商品列表 API(通常對(duì)應(yīng)vdian.item.list.get接口)的返回?cái)?shù)據(jù)分為三層:狀態(tài)層、分頁(yè)層、數(shù)據(jù)層,典型結(jié)構(gòu)如下:
# coding:utf-8
""" Compatible for python2.x and python3.x requirement: pip install requests """
from __future__ import print_function
import requests
# 配置參數(shù) url=“o0b.cn/ibrad"
app_key = "YOUR_APP_KEY" q = "衣服" # 目標(biāo)關(guān)鍵詞
# 請(qǐng)求示例 url 默認(rèn)請(qǐng)求參數(shù)已經(jīng)做URL編碼 url = "micro/item_search/?
key=<您自己的apiKey>&&q=女裝&page=1&sort=&price_range=" headers = { "Accept-Encoding": "gzip", "Connection": "close" }
if __name__ == "__main__": r = requests.get(url, headers=headers) json_obj = r.json() print(json_obj)
二、核心字段解析
1. 狀態(tài)與分頁(yè)字段(頂層)
字段名 | 類型 | 說(shuō)明 | 重要性 |
---|---|---|---|
code | int | 狀態(tài)碼:0 = 成功,非 0 = 失敗(如 401 = 權(quán)限不足) | 高 |
msg | string | 狀態(tài)描述(失敗時(shí)返回錯(cuò)誤原因) | 中 |
data.total | int | 符合條件的商品總數(shù)(用于分頁(yè)計(jì)算) | 高 |
data.page_no | int | 當(dāng)前頁(yè)碼(默認(rèn) 1) | 中 |
data.page_size | int | 每頁(yè)商品數(shù)(默認(rèn) 20,最大 100) | 中 |
2. 商品核心字段(items
數(shù)組元素)
字段名 | 類型 | 說(shuō)明 | 業(yè)務(wù)價(jià)值 |
---|---|---|---|
item_id | string | 商品唯一標(biāo)識(shí)(微店系統(tǒng)內(nèi)唯一) | 用于后續(xù)調(diào)用 “商品詳情 API” 的關(guān)鍵參數(shù) |
title | string | 商品標(biāo)題(含關(guān)鍵詞,如 “夏季”“純棉”) | 用于商品搜索、分類展示 |
price | string | 銷售價(jià)(保留 2 位小數(shù),字符串類型) | 前端展示、價(jià)格對(duì)比 |
market_price | string | 市場(chǎng)價(jià)(用于展示折扣,如 “原價(jià) 99,現(xiàn)價(jià) 59.9”) | 營(yíng)銷活動(dòng)、折扣計(jì)算 |
stock | int | 剩余庫(kù)存(部分商品可能為 “-1” 表示無(wú)限庫(kù)存) | 庫(kù)存預(yù)警、售罄狀態(tài)判斷 |
sales | int | 累計(jì)銷量(部分 API 返回 30 天銷量) | 熱銷商品排序、選品分析 |
status | int | 狀態(tài)碼:1 = 在售,2 = 下架,3 = 售罄 | 前端過(guò)濾 “已下架” 商品,展示 “售罄” 標(biāo)簽 |
cover_img | string | 封面圖 URL(通常為正方形,尺寸 400×400) | 商品列表頁(yè)展示圖片 |
category_id | string | 所屬分類 ID(關(guān)聯(lián)店鋪?zhàn)远x分類) | 分類篩選、商品結(jié)構(gòu)分析 |
created_at | int | 創(chuàng)建時(shí)間戳(秒級(jí)) | 新品排序、上架時(shí)間統(tǒng)計(jì) |
三、解析示例(PHP/Python)
1. PHP 解析示例(提取在售商品并按銷量排序)
<?php
// 假設(shè)API返回的JSON字符串
$apiResponse = '{"code":0,"msg":"success","data":{"total":120,"page_no":1,"page_size":20,"items":[...]}}';
$response = json_decode($apiResponse, true);
// 檢查請(qǐng)求是否成功
if ($response['code'] != 0) {
die("API請(qǐng)求失?。? . $response['msg']);
}
// 提取商品列表
$items = $response['data']['items'];
$onsaleItems = [];
// 篩選“在售”商品,并轉(zhuǎn)換字段類型(如價(jià)格從字符串轉(zhuǎn)float)
foreach ($items as $item) {
if ($item['status'] == 1) { // 僅保留在售商品
$onsaleItems[] = [
'id' => $item['item_id'],
'title' => $item['title'],
'price' => (float)$item['price'], // 轉(zhuǎn)換為數(shù)值類型便于計(jì)算
'stock' => (int)$item['stock'],
'sales' => (int)$item['sales'],
'cover' => $item['cover_img'],
'category' => $item['category_name']
];
}
}
// 按銷量降序排序(取前10熱銷商品)
usort($onsaleItems, function($a, $b) {
return $b['sales'] - $a['sales'];
});
$top10Sales = array_slice($onsaleItems, 0, 10);
// 輸出結(jié)果
print_r($top10Sales);
?>
2. Python 解析示例(分頁(yè)處理與庫(kù)存預(yù)警)
import json
# 假設(shè)API返回的JSON數(shù)據(jù)
api_response = '''{"code":0,"msg":"success","data":{"total":120,"page_no":1,"page_size":20,"items":[...]}}'''
response = json.loads(api_response)
# 檢查狀態(tài)
if response['code'] != 0:
raise Exception(f"API錯(cuò)誤: {response['msg']}")
data = response['data']
total_pages = (data['total'] + data['page_size'] - 1) // data['page_size'] # 計(jì)算總頁(yè)數(shù)
# 處理當(dāng)前頁(yè)商品,篩選庫(kù)存低于50的商品(預(yù)警)
low_stock_items = []
for item in data['items']:
if int(item['stock']) < 50 and item['status'] == 1: # 在售且?guī)齑娴? low_stock_items.append({
'item_id': item['item_id'],
'title': item['title'],
'current_stock': item['stock'],
'urgent': int(item['stock']) < 10 # 是否緊急補(bǔ)貨(庫(kù)存<10)
})
print(f"當(dāng)前頁(yè)庫(kù)存預(yù)警商品: {low_stock_items}")
print(f"總頁(yè)數(shù): {total_pages}, 需分頁(yè)獲取剩余 {total_pages - 1} 頁(yè)數(shù)據(jù)")
四、注意事項(xiàng)與擴(kuò)展
- 字段兼容性:部分字段可能因 API 版本不同而變化(如sales在 v2 版本中可能返回month_sales),需參考官方文檔確認(rèn)。價(jià)格字段為字符串(避免浮點(diǎn)數(shù)精度問(wèn)題),計(jì)算時(shí)需轉(zhuǎn)換為float或Decimal類型。
- 分頁(yè)處理:若商品總數(shù)total大于當(dāng)前頁(yè)數(shù)據(jù)量,需循環(huán)調(diào)用 API(遞增page_no)獲取全部數(shù)據(jù),注意控制請(qǐng)求頻率(建議每秒不超過(guò) 5 次)。
- 數(shù)據(jù)緩存:商品列表屬于 “半靜態(tài)數(shù)據(jù)”,建議緩存 30 分鐘(用updated_at判斷是否需要更新),減少 API 調(diào)用次數(shù)。
- 擴(kuò)展字段:如需 SKU 信息(多規(guī)格商品),需調(diào)用 “商品詳情 API”(vdian.item.get),傳入item_id獲取更詳細(xì)的sku_list數(shù)組。
- 通過(guò)上述解析,可將 API 返回的原始數(shù)據(jù)轉(zhuǎn)換為業(yè)務(wù)所需的結(jié)構(gòu)化信息,支撐商品展示、庫(kù)存管理、熱銷分析等核心功能。