×

中国制造网关键词搜索接口:业务过滤与分页偏移问题实战处理

Ace Ace 发表于2026-08-27 15:11:03 浏览15 评论0

抢沙发发表评论

前言

中国制造网作为 B2B 外贸采购平台,关键词搜索接口和普通电商平台存在明显差异。接口返回数据混杂工厂、贸易商、中间商多种类型商家商品,同时存在分页偏移漂移、部分字段缺失、多语言字段混用等问题。网上多数示例只简单演示请求调用,缺少业务侧过滤逻辑。本文侧重工程落地,增加商家类型过滤、分页边界校验、结果数据清洗,给出可直接用于业务系统的调用示例。

前置准备

对接前需要在平台开发者后台创建应用,获取app_keyapp_secret,接口调用需要生成签名,同时获取访问令牌 access_token。接口有调用频次限制,B2B 平台对 QPS 管控严格,生产环境必须增加休眠限流,避免触发接口封禁。

搜索接口入参核心:关键词、页码、每页条数、筛选条件;返回包含商品 ID、标题、价格、起订量、供应商信息、产地等字段。原始返回字段冗余,大量字段业务不需要,需要做裁剪处理。

点击获取key和secret

核心 Python 代码示例

python

import requests
import time
import hashlib

class MadeInChinaSearchClient:
    def __init__(self, app_key, app_secret, access_token):
        self.app_key = app_key
        self.app_secret = app_secret
        self.access_token = access_token
        self.base_url = "https://api.made‑in‑china.com/openapi/search/goods"
        self.session = requests.Session()

    def gen_sign(self, params):
        sort_str = "".join([f"{k}{v}" for k, v in sorted(params.items())])
        sign_raw = self.app_secret + sort_str + self.app_secret
        return hashlib.md5(sign_raw.encode("utf‑8")).hexdigest().upper()

    def search_goods(self, keyword, page=1, page_size=20, factory_filter=True):
        params = {
            "app_key": self.app_key,
            "access_token": self.access_token,
            "keyword": keyword,
            "page": page,
            "page_size": page_size,
            "timestamp": int(time.time())
        }
        params["sign"] = self.gen_sign(params)
        resp = self.session.get(self.base_url, params=params, timeout=15)
        res_json = resp.json()
        if res_json.get("code") != 0:
            return {"error": res_json.get("msg"), "data": []}
        raw_list = res_json.get("data", {}).get("goods_list", [])
        result = []
        for item in raw_list:
            # B2B业务过滤:只保留工厂类型供应商
            supplier_type = item.get("supplier_type", "")
            if factory_filter and supplier_type != "factory":
                continue
            clean_item = {
                "goods_id": item.get("goods_id"),
                "title": item.get("title"),
                "price": item.get("price_range"),
                "moq": item.get("min_order"),
                "supplier_name": item.get("supplier_name"),
                "supplier_type": supplier_type
            }
            result.append(clean_item)
        time.sleep(0.8)
        return {"error": None, "data": result}

if __name__ == "__main__":
    client = MadeInChinaSearchClient("your_key", "your_secret", "your_token")
    ret = client.search_goods("usb charger", page=1, factory_filter=True)
    print(ret["data"])

代码逻辑解读


  1. 封装请求类统一管理签名、会话、限流休眠,避免重复代码;签名按照平台规则对参数排序后 MD5 加密。

  2. 增加factory_filter开关,B2B 场景经常只需要工厂货源,过滤贸易商数据,减少后续业务处理压力。

  3. 做数据裁剪,剔除大量无用返回字段,只保留业务核心字段,降低内存占用。

  4. 增加超时、错误码判断,简单休眠控制 QPS,防止短时间高频调用被限制。


线上踩坑总结


  1. 分页漂移:平台搜索结果会实时变化,翻页时会出现重复商品,业务层需要用 goods_id 做去重,不能单纯依赖分页。

  2. 价格字段为空:部分商品不公开报价,price_range 会返回 null,业务代码要做空值判断,直接取值会抛出异常。

  3. 供应商类型字段不稳定:部分老商品供应商类型字段缺失,需要做好兜底。

  4. 令牌过期:access_token 具备有效期,生产环境需要增加自动刷新逻辑,示例中未展示。

群贤毕至

访客