在电商领域,按图搜索商品(类似于淘宝的拍立淘)是一种非常实用的功能,尤其适合用户通过图片快速查找相似商品。1688 开放平台提供了按图搜索商品的 API 接口,允许开发者通过图片获取相关的商品信息。本文将详细介绍如何使用 Python 调用 1688 的按图搜索 API 接口,并解析返回的数据。

一、前期准备

(一)注册开发者账号

访问1688平台,使用企业账号注册成为开发者。需提交营业执照、法人身份证等资质,完成企业认证。

(二)创建应用并获取 API 密钥

在开放平台控制台创建应用(如 “供应链分析系统”),获取 App KeyApp Secret。这两个凭证后续会用于身份验证。

(三)申请接口权限

申请 com.alibaba.product.search 接口权限。在申请时,需说明数据用途(如 “采购比价系统”),避免涉及用户隐私。

二、技术实现

(一)生成签名

1688 采用 HMAC-SHA1 签名,需严格遵循参数排序规则。以下是 Python 示例代码,用于生成签名:

import hashlib
import hmac
import urllib.parse

def generate_sign(params, app_secret):
    sorted_params = sorted(params.items())
    query_str = urllib.parse.urlencode(sorted_params)
    signature = hmac.new(
        app_secret.encode('utf-8'),
        query_str.encode('utf-8'),
        hashlib.sha1
    ).hexdigest().upper()
    return signature

(二)上传图片并获取图片标识

1688 的按图搜索接口需要传入图片的 URL 或 ID。因此,首先需要将图片上传到 1688 的图片服务器,并获取图片的标识。

import requests
import json
import time

def upload_img_to_1688(app_key, app_secret, image_path):
    url = "https://api.1688.com/router/rest"
    params = {
        'app_key': app_key,
        'method': '1688.upload.img',
        'format': 'json',
        'v': '2.0',
        'timestamp': int(time.time()),
        'sign_method': 'md5'
    }
    files = {'file': open(image_path, 'rb')}
    params['sign'] = generate_sign(params, app_secret)
    response = requests.post(url, files=files, params=params)
    if response.status_code == 200:
        response_data = response.json()
        if 'pic_url' in response_data:
            pic_url = response_data['pic_url']
            print("上传成功, 图片URL为:", pic_url)
            return pic_url
        else:
            print("上传成功, 但未找到图片URL")
    else:
        print("请求失败, 状态码:", response.status_code)
    return None

(三)调用按图搜索接口

上传图片并获取图片标识后,可以使用 1688 的 API 接口进行按图搜索。

def search_items_by_img(app_key, app_secret, img_url, cat=None, page=1):
    url = "https://api.1688.com/router/rest"
    params = {
        'app_key': app_key,
        'method': '1688.item_search_img',
        'format': 'json',
        'v': '2.0',
        'timestamp': int(time.time()),
        'sign_method': 'md5',
        'imgid': img_url,
        'cat': cat if cat else '',
        'page': page
    }
    params['sign'] = generate_sign(params, app_secret)
    response = requests.get(url, params=params)
    if response.status_code == 200:
        response_data = response.json()
        for item in response_data.get('items', {}).get('item', []):
            print("商品标题:", item['title'])
            print("商品图片URL:", item['pic_url'])
            print("价格:", item['price'])
            print("销量:", item['sales'])
            print("商品链接:", item['detail_url'])
            print("-" * 40)
    else:
        print("请求失败, 状态码:", response.status_code)

(四)解析响应数据

API 接口返回的响应数据通常为 JSON 格式,包含与上传图片相似的商品信息。响应内容通常包括商品标题、价格、销量、链接等。

三、注意事项

(一)频率限制

1688 对 API 的调用频率有限制,通常为每秒 1-2 次。在开发中需合理控制请求频率,避免被限流。

(二)数据安全

确保在处理敏感信息时遵守相关隐私和安全法规。

(三)错误处理

在实际应用中,要对可能出现的错误进行捕获和处理,如网络请求异常、数据解析错误等。

(四)数据合规

禁止存储用户隐私数据(如手机号、地址),不得直接展示商品价格,需通过电商平台的链接跳转。

四、总结

通过以上步骤,你可以使用 Python 编写程序高效地获取并处理 1688 平台的按图搜索结果数据。希望本文能为开发者提供有价值的参考,帮助他们更好地利用 1688 的 API 接口获取数据。

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐