拼多多按图搜索商品API技术实践指南

4 阅读2分钟

一、接口基础信息

  1. 请求方式:POST
  2. 认证机制:需使用平台分配的 client_idclient_secret
  3. 请求地址
https://open-api.pinduoduo.com/api/image_search

二、请求参数说明

{
  "image": "Base64编码的图片数据",
  "image_url": "可选图片URL",
  "size_type": 1, // 图片尺寸类型
  "page": 1,      // 分页页码
  "page_size": 20 // 每页数量
}

⚠️ 注意:imageimage_url 参数二选一,图片需满足:

  • 格式:JPG/PNG
  • 大小:≤500KB
  • 分辨率:建议 800×600 以上

三、签名验证机制

请求需携带签名参数: sign = MD5(\text{client_secret} + \text{params_string} + \text{client_secret})

import hashlib
def generate_sign(params, secret):
    param_str = '&'.join([f'{k}{v}' for k,v in sorted(params.items())])
    return hashlib.md5((secret + param_str + secret).encode()).hexdigest()

四、返回数据结构

{
  "result": {
    "goods_list": [
      {
        "goods_id": "商品ID",
        "goods_name": "商品名称",
        "price": 2990, // 单位分
        "image_url": "主图URL"
      }
    ],
    "total_count": 100 // 匹配商品总数
  },
  "error_code": 0 // 错误码
}

五、完整调用示例(Python)

import requests
import base64

API_URL = "https://open-api.pinduoduo.com/api/image_search"
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_secret"

def search_by_image(image_path):
    with open(image_path, "rb") as f:
        img_base64 = base64.b64encode(f.read()).decode()
    
    params = {
        "client_id": CLIENT_ID,
        "type": "image_search",
        "image": img_base64,
        "page": 1,
        "page_size": 10,
        "timestamp": int(time.time())
    }
    params["sign"] = generate_sign(params, CLIENT_SECRET)
    
    response = requests.post(API_URL, json=params)
    return response.json()

# 调用示例
result = search_by_image("product.jpg")
print(result["result"]["goods_list"])

六、常见问题处理

  1. 错误码 1001:图片格式/大小不符合要求
  2. 错误码 2001:签名验证失败
  3. 返回空列表:建议尝试不同角度商品主图
  4. 限流处理:需控制调用频率 ≤ 5次/秒

最佳实践提示:建议搭配商品类目过滤参数 cat_id 使用,可提升搜索准确率30%以上。实时监控接口返回的 X-RateLimit-Remaining 头部可避免触发限流。