电子元件 API 接口主要服务于电子制造业、研发企业、供应链平台等,提供电子元件(如电阻、电容、芯片、传感器等)的**型号查询、库存实时查询、价格对比、供应商信息、 datasheet 下载** 等核心功能,支撑采购决策、库存管理、研发选型等场景。目前主流的电子元件 API 主要来自专业电子元件平台(如 Digikey、Mouser、RS Components)或国内供应链平台(如立创商城、华强电子网),其接口设计、认证机制和数据维度存在差异,但核心逻辑一致。
一、电子元件 API 核心特性分析
1. 主流 API 平台及接口体系
电子元件 API 按服务范围可分为**国际平台**(覆盖全球供应链)和**国内平台**(聚焦国内现货),核心平台及接口功能如下:
| 数据维度 | 关键字段 | 说明 |
|---|---|---|
| 元件基础信息 | part_number(型号)、manufacturer(原厂)、category(品类)、specs(规格参数) | 如芯片型号STM32F103C8T6、规格32位ARM Cortex-M3 |
| 库存信息 | stock_quantity(库存数量)、location(库存位置)、lead_time(交货周期) | 区分 “现货”(In Stock)和 “期货”(Pre-order) |
| 价格信息 | unit_price(单价)、moq(最小起订量)、price_break(阶梯价) | 如 “1-99 个:5 元 / 个;100-999 个:4.5 元 / 个” |
| 供应商信息 | supplier_id(供应商 ID)、supplier_rating(供应商评级)、shipping_method | 国内平台含 “是否支持包邮”“发货时效”,国际平台含 “关税预估” |
| 技术文档 | datasheet_url( datasheet 下载链接)、cad_model(CAD 模型链接) | 研发选型核心数据,部分平台需权限才能下载 |
3. 认证机制
- API Key 认证(国内平台常用):
开发者在平台注册账号并创建应用,获取
api_key(或app_key);调用接口时在请求头(如
Authorization: Bearer {api_key})或参数中携带api_key,无需用户授权,适合服务器端调用。- OAuth 2.0 认证(国际平台常用,如 Digikey):
需先申请
client_id和client_secret,引导用户授权(如采购账号授权);通过授权码获取
access_token,调用接口时携带令牌,支持权限细分(如 “仅查询库存”“可创建订单”)。
二、典型平台 API 深度解析(以立创商城 LCSC 为例)
1. 核心接口列表
| 接口名称 | 请求方式 | 核心参数 | 功能描述 | 响应数据示例(简化) |
|---|---|---|---|---|
/api/v1/part/search | GET | keyword(关键词)、page | 按型号 / 关键词搜索元件 | {"code":200,"data":{"total":120,"parts":[{"part_number":"STM32F103C8T6","stock":5000}]}} |
/api/v1/part/stock | GET | part_number(型号) | 查询指定型号的实时库存 | {"code":200,"data":{"stock_quantity":5000,"location":"深圳仓","lead_time":"1-2天"}} |
/api/v1/part/price | GET | part_number、quantity | 查询指定型号的阶梯价 | {"code":200,"data":{"moq":1,"price_break":[{"qty":1,"price":5.2},{"qty":100,"price":4.8}]}} |
/api/v1/bom/parse | POST | bom_content(BOM 文本) | 解析 BOM 清单,匹配现货元件 | {"code":200,"data":{"matched_count":8,"unmatched_count":2,"items":[...]}} |
2. 接口限制与合规性
调用频率:免费账号 QPS 限制为 1(每秒 1 次),企业账号可提升至 5;
数据权限:仅返回立创自营及合作供应商的现货数据,无期货信息;
合规要求:禁止用于 “批量爬取库存后加价转售”“恶意查询非采购需求的元件”,违反将封禁 API 权限。
三、Python 脚本实现(基于立创商城 API)
api_key。1. 完整代码实现
import requestsimport jsonimport loggingfrom typing import Dict, Optional, Listfrom requests.exceptions import RequestException# 配置日志(记录请求状态和错误)logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s")class LCSCAPI:
def __init__(self, api_key: str):
"""
初始化立创商城API客户端
:param api_key: 立创开放平台获取的api_key
"""
self.api_key = api_key
self.base_url = "https://open.lcsc.com/api/v1"
self.session = requests.Session()
# 设置默认请求头(携带api_key)
self.session.headers.update({
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json;charset=UTF-8"
})
def _handle_response(self, response: requests.Response) -> Optional[Dict]:
"""
统一处理接口响应(错误判断、JSON解析)
:param response: 接口响应对象
:return: 业务数据(无错误时)或None
"""
try:
response.raise_for_status() # 抛出HTTP错误(如404、500)
result = response.json()
# 立创API错误码:code=200为成功,其他为错误
if result.get("code") != 200:
error_msg = result.get("msg", "未知错误")
logging.error(f"API错误:{error_msg}(错误码:{result.get('code')})")
return None
return result.get("data", {}) # 返回业务数据
except RequestException as e:
logging.error(f"请求异常:{str(e)}")
return None
except json.JSONDecodeError:
logging.error(f"响应解析失败:{response.text[:200]}...")
return None
def search_part(self, keyword: str, page: int = 1, page_size: int = 20) -> Optional[Dict]:
"""
搜索电子元件(按型号/关键词)
:param keyword: 搜索关键词(如"STM32F103C8T6"、"0805电容")
:param page: 页码(默认第1页)
:param page_size: 每页数量(最大50)
:return: 搜索结果(含总条数、元件列表)
"""
url = f"{self.base_url}/part/search"
params = {
"keyword": keyword,
"page": page,
"pageSize": page_size }
try:
response = self.session.get(url, params=params, timeout=10)
data = self._handle_response(response)
if not data:
return None
# 格式化元件列表(提取核心字段)
formatted_parts = []
for part in data.get("parts", []):
formatted_parts.append({
"part_number": part.get("partNumber"), # 元件型号
"manufacturer": part.get("manufacturer"), # 原厂
"category": part.get("categoryName"), # 品类(如"MCU")
"stock_quantity": part.get("stockQuantity"), # 库存数量
"min_price": float(part.get("minPrice", 0)), # 最低单价
"moq": part.get("moq"), # 最小起订量
"datasheet_url": part.get("datasheetUrl"), # datasheet链接
"lcsc_part_number": part.get("lcscPartNumber") # 立创内部型号
})
return {
"total_count": data.get("totalCount", 0), # 总搜索结果数
"current_page": page,
"page_size": page_size,
"parts": formatted_parts }
except Exception as e:
logging.error(f"元件搜索失败:{str(e)}")
return None
def get_part_stock(self, part_number: str) -> Optional[Dict]:
"""
查询指定型号的实时库存
:param part_number: 元件型号(如"STM32F103C8T6")
:return: 库存信息(数量、位置、交货周期)
"""
url = f"{self.base_url}/part/stock"
params = {"partNumber": part_number}
try:
response = self.session.get(url, params=params, timeout=10)
data = self._handle_response(response)
if not data:
return None
# 格式化库存数据
return {
"part_number": part_number,
"stock_quantity": data.get("stockQuantity"), # 总库存
"stock_detail": [ # 分仓库库存详情
{
"location": warehouse.get("warehouseName"), # 仓库位置(如"深圳仓")
"quantity": warehouse.get("quantity"), # 该仓库库存
"lead_time": warehouse.get("leadTime") # 交货周期
} for warehouse in data.get("stockDetails", [])
],
"stock_status": "有货" if data.get("stockQuantity", 0) > 0 else "无货"
}
except Exception as e:
logging.error(f"库存查询失败:{str(e)}")
return None
def get_part_price(self, part_number: str) -> Optional[Dict]:
"""
查询指定型号的阶梯价格
:param part_number: 元件型号
:return: 价格信息(最小起订量、阶梯价)
"""
url = f"{self.base_url}/part/price"
params = {"partNumber": part_number}
try:
response = self.session.get(url, params=params, timeout=10)
data = self._handle_response(response)
if not data:
return None
# 格式化阶梯价数据
price_breaks = []
for pb in data.get("priceBreaks", []):
price_breaks.append({
"min_quantity": pb.get("minQuantity"), # 该阶梯最小数量
"max_quantity": pb.get("maxQuantity"), # 该阶梯最大数量(None表示无上限)
"unit_price": float(pb.get("unitPrice", 0)) # 该阶梯单价
})
return {
"part_number": part_number,
"moq": data.get("moq"), # 最小起订量
"currency": data.get("currency", "CNY"), # 货币类型(默认人民币)
"price_breaks": price_breaks }
except Exception as e:
logging.error(f"价格查询失败:{str(e)}")
return None# 示例调用if __name__ == "__main__":
# 1. 替换为你的立创API Key(从开放平台获取)
LCSC_API_KEY = "your_lcsc_api_key"
# 2. 初始化API客户端
lcsc_api = LCSCAPI(api_key=LCSC_API_KEY)
# 3. 搜索元件(以"STM32F103C8T6"为例)
search_keyword = "STM32F103C8T6"
search_result = lcsc_api.search_part(keyword=search_keyword, page=1, page_size=5)
if search_result:
print(f"=== 元件搜索结果(关键词:{search_keyword})===")
print(f"总找到 {search_result['total_count']} 个元件,当前第 {search_result['current_page']} 页\n")
for i, part in enumerate(search_result["parts"], 1):
print(f"{i}. 型号:{part['part_number']}")
print(f" 原厂:{part['manufacturer']} | 品类:{part['category']}")
print(f" 库存:{part['stock_quantity']} 件 | 最小单价:{part['min_price']} 元")
print(f" 起订量:{part['moq']} 件 | datasheet:{part['datasheet_url'][:50]}...")
print("-" * 100)
# 4. 查询第一个元件的库存和价格
if search_result and search_result["parts"]:
target_part = search_result["parts"][0]["part_number"]
print(f"\n=== 元件 {target_part} 详情 ===")
# 4.1 查询库存
stock_info = lcsc_api.get_part_stock(part_number=target_part)
if stock_info:
print(f"库存状态:{stock_info['stock_status']}(总库存:{stock_info['stock_quantity']} 件)")
print("分仓库库存:")
for warehouse in stock_info["stock_detail"]:
print(f" - {warehouse['location']}:{warehouse['quantity']} 件,交货周期:{warehouse['lead_time']}")
# 4.2 查询价格
price_info = lcsc_api.get_part_price(part_number=target_part)
if price_info:
print(f"\n价格信息(货币:{price_info['currency']}):")
print(f"最小起订量:{price_info['moq']} 件")
print("阶梯价:")
for pb in price_info["price_breaks"]:
max_qty = pb["max_quantity"] if pb["max_quantity"] else "不限"
print(f" - {pb['min_quantity']}-{max_qty} 件:{pb['unit_price']} 元/件")2. 代码说明
(1)核心模块
认证处理:通过请求头
Authorization: Bearer {api_key}携带认证信息,符合立创 API 规范;响应统一处理:
_handle_response函数封装 HTTP 错误、JSON 解析、错误码判断,减少重复代码;数据格式化:提取接口返回的核心字段(如型号、库存、单价),过滤冗余数据,便于后续使用。
(2)关键功能
元件搜索:支持按型号(精确)或关键词(模糊,如 “0805 电容”)搜索,返回分页结果;
库存查询:返回总库存及分仓库详情(如深圳仓、上海仓的库存分布);
价格查询:解析阶梯价,帮助采购判断 “批量采购的成本优势”。
四、国际平台 API 扩展(以 Digikey 为例)
认证方式:采用 OAuth 2.