淘宝订单销售报表本地化实战指南
作者:鲨鱼 | 时间:2025年7月18日
原创文章,首发于CSDN,如需转载,请注明出处。
目录
一、前言
在电商运营中,及时准确地生成销售报表是至关重要的。手动从淘宝后台导出订单数据并进行分析不仅耗时,还容易出错。通过淘宝开放平台提供的API接口,我们可以自动化这一过程,将订单数据同步到本地系统,并生成详细的销售报表。
本文将详细介绍如何使用淘宝API获取订单数据,并将其转化为有用的销售报表,帮助你更好地分析业务表现。
二、获取淘宝订单数据
2.1 API调用流程
首先,我们需要通过淘宝API获取订单数据。这里我们继续使用 taobao.trades.sold.get
接口来批量拉取订单列表。
import time
import requests
from hashlib import md5
def generate_sign(params, secret):
"""生成签名"""
sorted_params = sorted(params.items())
query_string = '&'.join([f"{k}{v}" for k, v in sorted_params])
sign_str = secret + query_string + secret
return md5(sign_str.encode()).hexdigest().upper()
def get_trades_sold_list(app_key, app_secret, session_key):
url = "https://eco.taobao.com/router/rest"
timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params = {
'method': 'taobao.trades.sold.get',
'app_key': app_key,
'session': session_key,
'timestamp': timestamp,
'format': 'json',
'v': '2.0',
'sign_method': 'md5',
'fields': 'tid,status,pay_time,receiver_name,receiver_mobile,receiver_address,buyer_message,total_fee,payment,num_iid,title,price,num',
'start_created': '2025-07-01 00:00:00',
'end_created': '2025-07-31 23:59:59',
'page_no': 1,
'page_size': 50
}
params['sign'] = generate_sign(params, app_secret)
response = requests.post(url, data=params)
return response.json()
# 示例调用
app_key = 'your_app_key'
app_secret = 'your_app_secret'
session_key = 'your_session_key'
trades = get_trades_sold_list(app_key, app_secret, session_key)
print(trades)
2.2 解析订单数据
接下来,我们将解析返回的订单数据,提取关键信息用于生成销售报表。
def parse_order(order):
return {
'tid': order.get('tid'),
'status': order.get('status'),
'pay_time': order.get('pay_time'),
'receiver_name': order.get('receiver_name'),
'receiver_mobile': order.get('receiver_mobile'),
'receiver_address': order.get('receiver_address'),
'buyer_message': order.get('buyer_message'),
'total_fee': float(order.get('total_fee', 0)),
'payment': float(order.get('payment', 0)),
'items': [
{
'num_iid': item.get('num_iid'),
'title': item.get('title'),
'price': float(item.get('price', 0)),
'num': int(item.get('num', 0))
}
for item in order.get('orders', [])
]
}
# 解析并打印
parsed_orders = [parse_order(trade) for trade in trades.get('trades_sold_get_response', {}).get('trades', [])]
for parsed in parsed_orders:
print(parsed)
三、生成销售报表
3.1 数据聚合与分析
为了生成销售报表,我们需要对订单数据进行聚合和分析。以下是一个简单的示例,展示如何计算总销售额、订单数量、平均订单金额等。
def generate_sales_report(orders):
total_sales = sum(order['payment'] for order in orders)
order_count = len(orders)
average_order_value = total_sales / order_count if order_count > 0 else 0
# 商品销售统计
sales_by_item = {}
for order in orders:
for item in order['items']:
key = (item['num_iid'], item['title'])
if key not in sales_by_item:
sales_by_item[key] = {
'quantity': 0,
'revenue': 0
}
sales_by_item[key]['quantity'] += item['num']
sales_by_item[key]['revenue'] += item['price'] * item['num']
return {
'total_sales': total_sales,
'order_count': order_count,
'average_order_value': average_order_value,
'sales_by_item': sales_by_item
}
# 生成报表
sales_report = generate_sales_report(parsed_orders)
print(sales_report)
3.2 输出报表
我们可以将生成的报表输出为CSV文件,方便后续查看和分析。
import csv
def export_to_csv(report, filename='sales_report.csv'):
with open(filename, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
# 写入表头
writer.writerow(['Total Sales', 'Order Count', 'Average Order Value'])
writer.writerow([report['total_sales'], report['order_count'], report['average_order_value']])
# 写入商品销售统计
writer.writerow([])
writer.writerow(['Item ID', 'Item Title', 'Quantity Sold', 'Revenue'])
for (item_id, title), stats in report['sales_by_item'].items():
writer.writerow([item_id, title, stats['quantity'], stats['revenue']])
# 导出报表
export_to_csv(sales_report)
四、将报表写入数据库(可选)
如果你希望将报表数据存储到数据库中以便长期保存和查询,可以参考以下代码示例:
创建数据库表
假设我们使用MySQL数据库,首先需要创建一个表来存储销售报表数据。
CREATE TABLE sales_reports (
id INT AUTO_INCREMENT PRIMARY KEY,
total_sales DECIMAL(10, 2),
order_count INT,
average_order_value DECIMAL(10, 2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE sales_by_items (
id INT AUTO_INCREMENT PRIMARY KEY,
report_id INT,
item_id BIGINT,
item_title VARCHAR(255),
quantity_sold INT,
revenue DECIMAL(10, 2),
FOREIGN KEY (report_id) REFERENCES sales_reports(id)
);
插入数据到数据库
import mysql.connector
def insert_into_db(report):
conn = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="sales_db"
)
cursor = conn.cursor()
# 插入总销售数据
insert_report_query = """
INSERT INTO sales_reports (total_sales, order_count, average_order_value)
VALUES (%s, %s, %s)
"""
cursor.execute(insert_report_query, (
report['total_sales'],
report['order_count'],
report['average_order_value']
))
report_id = cursor.lastrowid
# 插入商品销售统计
insert_item_query = """
INSERT INTO sales_by_items (report_id, item_id, item_title, quantity_sold, revenue)
VALUES (%s, %s, %s, %s, %s)
"""
for (item_id, title), stats in report['sales_by_item'].items():
cursor.execute(insert_item_query, (
report_id,
item_id,
title,
stats['quantity'],
stats['revenue']
))
conn.commit()
cursor.close()
conn.close()
# 插入报表数据
insert_into_db(sales_report)
五、总结
通过本文的介绍,你应该已经掌握了如何使用淘宝开放平台API获取订单数据,并将其转化为有用的销售报表。无论是手动导出还是自动同步,都可以根据你的需求灵活调整。
从此告别繁琐的手动操作,实现订单数据的自动化处理,提升工作效率,优化业务决策。