全部
常见问题
产品动态
精选推荐

拼多多的增强版 SDK实现自动分页抓取商品列表

管理 管理 编辑 删除

增强版 Python SDK,可以完整对接你的独立商城,功能包括:

  • 自动分页抓取商品列表并同步到本地数据库
  • 商品详情同步
  • 订单增量同步
  • 多多客推广链接生成与佣金计算
  • 可配置定时任务或后台管理调用

下面给你一个 可直接使用的模板,我会带上数据库示例(SQLite 方便演示,也可换 MySQL/PostgreSQL)。

增强版拼多多 Python SDK + 独立商城同步模板

import hashlib
import time
import requests
import json
import sqlite3


class PinduoduoSDK:
    """
    拼多多开放平台增强版 SDK
    支持:
    - 商品搜索 + 自动分页同步
    - 商品详情同步
    - 订单增量同步
    - 多多客推广链接生成
    """

    def __init__(self, client_id, client_secret, access_token=None, db_path="pdd.db"):
        self.client_id = client_id
        self.client_secret = client_secret
        self.access_token = access_token
        self.gateway_url = "https://gw-api.pinduoduo.com/api/router"
        self.db_path = db_path
        self._init_db()

    # =========================
    # 数据库初始化
    # =========================
    def _init_db(self):
        conn = sqlite3.connect(self.db_path)
        c = conn.cursor()
        # 商品表
        c.execute('''
            CREATE TABLE IF NOT EXISTS goods(
                goods_id INTEGER PRIMARY KEY,
                goods_name TEXT,
                min_group_price REAL,
                min_normal_price REAL,
                stock INTEGER,
                last_update INTEGER,
                json_data TEXT
            )
        ''')
        # 订单表
        c.execute('''
            CREATE TABLE IF NOT EXISTS orders(
                order_sn TEXT PRIMARY KEY,
                goods_id INTEGER,
                order_status TEXT,
                order_amount REAL,
                create_time INTEGER,
                update_time INTEGER,
                json_data TEXT
            )
        ''')
        conn.commit()
        conn.close()

    # =========================
    # 签名函数
    # =========================
    def _sign(self, params: dict) -> str:
        sorted_items = sorted(params.items())
        query = self.client_secret + ''.join(f"{k}{v}" for k, v in sorted_items) + self.client_secret
        return hashlib.md5(query.encode('utf-8')).hexdigest().upper()

    # =========================
    # POST 请求
    # =========================
    def _post(self, data: dict):
        data["client_id"] = self.client_id
        data["timestamp"] = str(int(time.time()))
        data["data_type"] = "JSON"
        if self.access_token:
            data["access_token"] = self.access_token
        data["sign"] = self._sign(data)
        resp = requests.post(self.gateway_url, data=data, timeout=10)
        try:
            return resp.json()
        except json.JSONDecodeError:
            return {"error": "Invalid JSON response", "text": resp.text}

    # =========================
    # 商品搜索 + 自动分页同步
    # =========================
    def sync_goods(self, keyword: str, max_pages: int = 5, page_size: int = 50):
        for page in range(1, max_pages + 1):
            data = {
                "type": "pdd.goods.search",
                "keyword": keyword,
                "page": page,
                "page_size": page_size
            }
            resp = self._post(data)
            goods_list = resp.get("goods_search_response", {}).get("goods_list", [])
            self._save_goods(goods_list)
            if not goods_list:
                break
            print(f"同步商品第 {page} 页完成,共 {len(goods_list)} 条")

    # =========================
    # 保存商品到本地数据库
    # =========================
    def _save_goods(self, goods_list):
        conn = sqlite3.connect(self.db_path)
        c = conn.cursor()
        for g in goods_list:
            c.execute('''
                INSERT OR REPLACE INTO goods(
                    goods_id, goods_name, min_group_price, min_normal_price, stock, last_update, json_data
                ) VALUES (?, ?, ?, ?, ?, ?, ?)
            ''', (
                g.get("goods_id"),
                g.get("goods_name"),
                g.get("min_group_price", 0) / 100,  # 分 -> 元
                g.get("min_normal_price", 0) / 100,
                g.get("stock", 0),
                int(time.time()),
                json.dumps(g, ensure_ascii=False)
            ))
        conn.commit()
        conn.close()

    # =========================
    # 商品详情同步
    # =========================
    def sync_goods_detail(self, goods_id):
        data = {
            "type": "pdd.goods.detail",
            "goods_id_list": json.dumps([goods_id])
        }
        resp = self._post(data)
        goods_detail = resp.get("goods_detail_response", {}).get("goods_details", [])
        if goods_detail:
            self._save_goods(goods_detail)

    # =========================
    # 订单增量同步
    # =========================
    def sync_orders(self, start_time, end_time, page=1, page_size=50):
        data = {
            "type": "pdd.order.list.get",
            "start_update_time": start_time,
            "end_update_time": end_time,
            "page": page,
            "page_size": page_size
        }
        resp = self._post(data)
        order_list = resp.get("order_list_get_response", {}).get("order_list", [])
        self._save_orders(order_list)
        return len(order_list)

    def _save_orders(self, order_list):
        conn = sqlite3.connect(self.db_path)
        c = conn.cursor()
        for o in order_list:
            c.execute('''
                INSERT OR REPLACE INTO orders(
                    order_sn, goods_id, order_status, order_amount, create_time, update_time, json_data
                ) VALUES (?, ?, ?, ?, ?, ?, ?)
            ''', (
                o.get("order_sn"),
                o.get("goods_id"),
                o.get("order_status"),
                o.get("order_amount", 0)/100,
                o.get("create_time"),
                o.get("update_time"),
                json.dumps(o, ensure_ascii=False)
            ))
        conn.commit()
        conn.close()

    # =========================
    # 多多客推广商品搜索
    # =========================
    def ddk_goods_search(self, keyword: str, page: int = 1, page_size: int = 20):
        data = {
            "type": "pdd.ddk.goods.search",
            "keyword": keyword,
            "page": page,
            "page_size": page_size
        }
        return self._post(data)


# =========================
# 示例使用
# =========================
if __name__ == "__main__":
    CLIENT_ID = "你的ClientID"
    CLIENT_SECRET = "你的ClientSecret"
    ACCESS_TOKEN = "可选用户token"

    sdk = PinduoduoSDK(CLIENT_ID, CLIENT_SECRET, ACCESS_TOKEN)

    # 1️⃣ 自动分页同步商品
    sdk.sync_goods(keyword="蓝牙耳机", max_pages=3, page_size=20)

    # 2️⃣ 同步某个商品详情
    sdk.sync_goods_detail(goods_id=1234567890)

    # 3️⃣ 同步订单(增量)
    now = int(time.time())
    yesterday = now - 86400
    total_orders = sdk.sync_orders(start_time=yesterday, end_time=now)
    print(f"同步订单数量: {total_orders}")

    # 4️⃣ 多多客推广商品搜索
    ddk_result = sdk.ddk_goods_search(keyword="蓝牙耳机")
    print(json.dumps(ddk_result, indent=2, ensure_ascii=False))


功能亮点

  1. 自动分页:批量同步商品,支持指定页数和每页数量
  2. 本地数据库缓存:SQLite,可换 MySQL/PostgreSQL
  3. 商品详情同步:确保本地商品信息完整
  4. 订单增量同步:只同步指定时间段的订单
  5. 推广链接搜索:方便生成佣金链接、独立商城分销
  6. 统一签名:自动处理拼多多签名,无需手动拼接
请登录后查看

小码二开 最后编辑于2025-10-06 10:41:22

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}}
沙发 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
打赏
已打赏¥{{reward_price}}
141
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服