在電商數(shù)據(jù)分析、用戶體驗(yàn)優(yōu)化和競(jìng)品分析中,獲取商品評(píng)論是一項(xiàng)重要的功能。淘寶開(kāi)放平臺(tái)提供了商品評(píng)論的 API 接口,允許開(kāi)發(fā)者通過(guò)合法的方式獲取商品的用戶評(píng)論數(shù)據(jù)。本文將詳細(xì)介紹如何使用 Python 調(diào)用淘寶商品評(píng)論 API 接口,并解析返回的數(shù)據(jù)。
一、淘寶商品評(píng)論接口簡(jiǎn)介
淘寶開(kāi)放平臺(tái)提供了 taobao.traderate.items.get 接口,用于獲取商品的評(píng)論數(shù)據(jù)。該接口支持分頁(yè)查詢,可以獲取用戶的評(píng)分、評(píng)論內(nèi)容、評(píng)論時(shí)間等信息。開(kāi)發(fā)者需要在淘寶開(kāi)放平臺(tái)注冊(cè)賬號(hào)并創(chuàng)建應(yīng)用,獲取 App Key 和 App Secret,用于身份驗(yàn)證和簽名生成。
二、Python 示例代碼解析
以下是一個(gè)完整的 Python 示例代碼,展示如何調(diào)用淘寶商品評(píng)論 API 接口并解析返回的數(shù)據(jù)。
1. 準(zhǔn)備工作
在開(kāi)始之前,請(qǐng)確保你已經(jīng):
- 在淘寶開(kāi)放平臺(tái)注冊(cè)賬號(hào)并創(chuàng)建應(yīng)用,獲取 App Key 和 App Secret。
- 閱讀了淘寶開(kāi)放平臺(tái)的接口文檔,了解請(qǐng)求參數(shù)和返回值的結(jié)構(gòu)。
2. 示例代碼
import requests
import hashlib
import time
import urllib.parse
# 淘寶開(kāi)放平臺(tái)相關(guān)信息
APP_KEY = 'your_app_key' # 替換為你的 App Key
APP_SECRET = 'your_app_secret' # 替換為你的 App Secret
METHOD = 'taobao.traderate.items.get' # 接口名稱
FORMAT = 'json' # 返回?cái)?shù)據(jù)格式
V = '2.0' # API 版本
SIGN_METHOD = 'hmac' # 簽名方法
# 業(yè)務(wù)參數(shù)
PARAMS = {
'item_id': '1234567890', # 商品 ID
'page_no': '1', # 頁(yè)碼
'page_size': '10' # 每頁(yè)顯示的評(píng)論數(shù)量
}
# 生成簽名函數(shù)
def generate_sign(params, app_secret):
"""
生成簽名
:param params: 請(qǐng)求參數(shù)(字典格式)
:param app_secret: 應(yīng)用的 App Secret
:return: 簽名字符串
"""
sorted_params = sorted(params.items())
query_string = '&'.join(['{0}={1}'.format(urllib.parse.quote(k), urllib.parse.quote(v)) for k, v in sorted_params])
base_string = f"{app_secret}&{query_string}"
sign = hashlib.md5(base_string.encode('utf-8')).hexdigest().upper()
return sign
# 構(gòu)造請(qǐng)求參數(shù)
def get_request_params(app_key, app_secret, method, params):
"""
構(gòu)造請(qǐng)求參數(shù)
:param app_key: 應(yīng)用的 App Key
:param app_secret: 應(yīng)用的 App Secret
:param method: 接口名稱
:param params: 業(yè)務(wù)參數(shù)
:return: 完整的請(qǐng)求參數(shù)
"""
timestamp = str(int(time.time() * 1000)) # 時(shí)間戳(毫秒)
full_params = {
'app_key': app_key,
'method': method,
'timestamp': timestamp,
'v': V,
'format': FORMAT,
'sign_method': SIGN_METHOD,
**params
}
full_params['sign'] = generate_sign(full_params, app_secret)
return full_params
# 獲取商品評(píng)論
def get_item_reviews(app_key, app_secret, item_id, page_no=1, page_size=10):
"""
獲取商品評(píng)論
:param app_key: 應(yīng)用的 App Key
:param app_secret: 應(yīng)用的 App Secret
:param item_id: 商品 ID
:param page_no: 頁(yè)碼
:param page_size: 每頁(yè)顯示的評(píng)論數(shù)量
:return: 評(píng)論數(shù)據(jù)
"""
params = {
'item_id': item_id,
'page_no': page_no,
'page_size': page_size
}
request_params = get_request_params(app_key, app_secret, METHOD, params)
url = 'https://eco.taobao.com/router/rest'
response = requests.get(url, params=request_params)
if response.status_code == 200:
result = response.json()
if 'trade_rate_items_get_response' in result:
comments = result['trade_rate_items_get_response']['rate_list']['rate']
return comments
else:
print("調(diào)用失?。?, result.get('error_response', {}).get('msg'))
else:
print("請(qǐng)求失敗,狀態(tài)碼:", response.status_code)
return None
# 測(cè)試代碼
if __name__ == "__main__":
item_id = '1234567890' # 替換為商品 ID
comments = get_item_reviews(APP_KEY, APP_SECRET, item_id)
if comments:
for comment in comments:
print(f"用戶:{comment['user_nick']}")
print(f"評(píng)分:{comment['score']}")
print(f"評(píng)論內(nèi)容:{comment['content']}")
print(f"評(píng)論時(shí)間:{comment['rate_date']}")
print("-" * 40)
else:
print("未能獲取評(píng)論數(shù)據(jù),請(qǐng)檢查商品 ID 或參數(shù)是否正確。")
三、代碼解析
- 生成簽名簽名是調(diào)用淘寶 API 的關(guān)鍵步驟。通過(guò) generate_sign 函數(shù),我們將請(qǐng)求參數(shù)按字典順序排序并拼接成字符串,然后在前面加上 App Secret,最后使用 MD5 算法生成簽名。
- 構(gòu)造請(qǐng)求參數(shù)在 get_request_params 函數(shù)中,我們構(gòu)造了所有必要的請(qǐng)求參數(shù),包括 app_key、method、timestamp、sign 等。
- 發(fā)送請(qǐng)求使用 requests.get 方法發(fā)送請(qǐng)求,并解析返回的 JSON 數(shù)據(jù)。如果請(qǐng)求成功,返回商品評(píng)論數(shù)據(jù);如果失敗,打印錯(cuò)誤信息。
- 處理返回?cái)?shù)據(jù)淘寶返回的評(píng)論數(shù)據(jù)是一個(gè) JSON 格式的列表,包含用戶昵稱、評(píng)分、評(píng)論內(nèi)容、評(píng)論時(shí)間等字段。
四、注意事項(xiàng)
- 時(shí)間戳格式時(shí)間戳必須是毫秒級(jí)的時(shí)間戳,格式為 int(time.time() * 1000)。
- 簽名方法簽名方法必須與接口要求一致(通常是 MD5),并且簽名字符串的拼接規(guī)則必須嚴(yán)格遵守。
- 請(qǐng)求頻率限制淘寶 API 有調(diào)用頻率限制,開(kāi)發(fā)者需要合理安排請(qǐng)求頻率,避免因頻繁調(diào)用導(dǎo)致賬號(hào)被限制。
- 數(shù)據(jù)隱私評(píng)論數(shù)據(jù)涉及用戶隱私,開(kāi)發(fā)者需遵守相關(guān)法律法規(guī),合理使用數(shù)據(jù)。
五、總結(jié)
通過(guò)上述代碼,我們成功實(shí)現(xiàn)了使用 Python 調(diào)用淘寶商品評(píng)論 API 接口并獲取評(píng)論數(shù)據(jù)的功能。開(kāi)發(fā)者可以根據(jù)實(shí)際需求對(duì)代碼進(jìn)行擴(kuò)展,例如批量獲取多個(gè)商品的評(píng)論、分析評(píng)論內(nèi)容的情感傾向等。希望本文的示例代碼和解析能夠幫助你更好地理解和使用淘寶 API 接口。
如遇任何疑問(wèn)或有進(jìn)一步的需求,請(qǐng)隨時(shí)與我私信或者評(píng)論聯(lián)系。