宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見(jiàn)問(wèn)題
產(chǎn)品動(dòng)態(tài)
精選推薦

拼多多的增強(qiáng)版 SDK實(shí)現(xiàn)自動(dòng)分頁(yè)抓取商品列表

管理 管理 編輯 刪除

增強(qiáng)版 Python SDK,可以完整對(duì)接你的獨(dú)立商城,功能包括:

  • 自動(dòng)分頁(yè)抓取商品列表并同步到本地?cái)?shù)據(jù)庫(kù)
  • 商品詳情同步
  • 訂單增量同步
  • 多多客推廣鏈接生成與傭金計(jì)算
  • 可配置定時(shí)任務(wù)或后臺(tái)管理調(diào)用

下面給你一個(gè) 可直接使用的模板,我會(huì)帶上數(shù)據(jù)庫(kù)示例(SQLite 方便演示,也可換 MySQL/PostgreSQL)。

增強(qiáng)版拼多多 Python SDK + 獨(dú)立商城同步模板

import hashlib
import time
import requests
import json
import sqlite3


class PinduoduoSDK:
    """
    拼多多開(kāi)放平臺(tái)增強(qiáng)版 SDK
    支持:
    - 商品搜索 + 自動(dòng)分頁(yè)同步
    - 商品詳情同步
    - 訂單增量同步
    - 多多客推廣鏈接生成
    """

    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()

    # =========================
    # 數(shù)據(jù)庫(kù)初始化
    # =========================
    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()

    # =========================
    # 簽名函數(shù)
    # =========================
    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 請(qǐng)求
    # =========================
    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}

    # =========================
    # 商品搜索 + 自動(dòng)分頁(yè)同步
    # =========================
    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} 頁(yè)完成,共 {len(goods_list)} 條")

    # =========================
    # 保存商品到本地?cái)?shù)據(jù)庫(kù)
    # =========================
    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?? 自動(dòng)分頁(yè)同步商品
    sdk.sync_goods(keyword="藍(lán)牙耳機(jī)", max_pages=3, page_size=20)

    # 2?? 同步某個(gè)商品詳情
    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"同步訂單數(shù)量: {total_orders}")

    # 4?? 多多客推廣商品搜索
    ddk_result = sdk.ddk_goods_search(keyword="藍(lán)牙耳機(jī)")
    print(json.dumps(ddk_result, indent=2, ensure_ascii=False))


功能亮點(diǎn)

  1. 自動(dòng)分頁(yè):批量同步商品,支持指定頁(yè)數(shù)和每頁(yè)數(shù)量
  2. 本地?cái)?shù)據(jù)庫(kù)緩存:SQLite,可換 MySQL/PostgreSQL
  3. 商品詳情同步:確保本地商品信息完整
  4. 訂單增量同步:只同步指定時(shí)間段的訂單
  5. 推廣鏈接搜索:方便生成傭金鏈接、獨(dú)立商城分銷(xiāo)
  6. 統(tǒng)一簽名:自動(dòng)處理拼多多簽名,無(wú)需手動(dòng)拼接
請(qǐng)登錄后查看

小碼二開(kāi) 最后編輯于2025-10-06 10:41:22

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點(diǎn)贊倒序

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

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無(wú)簡(jiǎn)介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
185
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見(jiàn)問(wèn)題 產(chǎn)品動(dòng)態(tài) 精選推薦 首頁(yè)頭條 首頁(yè)動(dòng)態(tài) 首頁(yè)推薦
取 消 確 定
回復(fù)
回復(fù)
問(wèn)題:
問(wèn)題自動(dòng)獲取的帖子內(nèi)容,不準(zhǔn)確時(shí)需要手動(dòng)修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請(qǐng)輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊(cè)

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

{{codeText}}
切換微信登錄/注冊(cè)
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開(kāi)源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服