Python中如何应用Django集成1688和淘宝API

就和 yoybuy 一样的代购电商网站。通过输入商品的 URL 获取到 1688 和淘宝的商品信息。

之前没接触过,想自己啃下来发现有点难,哪位有过类似经验能给下指点啊~

或者帮忙开发一下(有偿的) 扣 3357212051 谢谢


Python中如何应用Django集成1688和淘宝API
1 回复

要集成1688和淘宝API到Django项目里,核心就是处理HTTP请求和API认证。1688用阿里云SDK,淘宝用Top API,两者都是OAuth流程。下面给个基础框架。

首先,安装必要的包:

pip install alibabacloud-sdk-core alibabacloud_tea_openapi alibabacloud_tea_util

对于1688,用阿里云SDK。在views.py里这么写:

from alibabacloud_sdk_core.client import Client
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

def alibaba_api_call(request):
    # 配置,从Django settings或环境变量读取
    config = Config(
        access_key_id=settings.ALIBABA_ACCESS_KEY,
        access_key_secret=settings.ALIBABA_SECRET_KEY,
        endpoint='1688openapi.aliyun.com'
    )
    client = Client(config)
    
    # 构建请求参数
    params = {
        'method': 'alibaba.product.list.get',
        'page_no': 1,
        'page_size': 20
    }
    
    try:
        response = client.call_api(params, 'GET', RuntimeOptions())
        return JsonResponse(response)
    except Exception as e:
        return JsonResponse({'error': str(e)}, status=500)

淘宝API需要先获取session_key。在views.py里加个OAuth回调:

import requests
from django.conf import settings

def taobao_oauth_callback(request):
    code = request.GET.get('code')
    token_url = 'https://oauth.taobao.com/token'
    data = {
        'client_id': settings.TAOBAO_APP_KEY,
        'client_secret': settings.TAOBAO_APP_SECRET,
        'code': code,
        'grant_type': 'authorization_code',
        'redirect_uri': settings.TAOBAO_REDIRECT_URI
    }
    
    resp = requests.post(token_url, data=data)
    if resp.status_code == 200:
        token_data = resp.json()
        # 把access_token存session或数据库
        request.session['taobao_access_token'] = token_data['access_token']
        return JsonResponse({'status': 'ok'})
    return JsonResponse({'error': 'auth failed'}, status=400)

def taobao_api_call(request):
    access_token = request.session.get('taobao_access_token')
    if not access_token:
        return JsonResponse({'error': 'need auth'}, status=401)
    
    url = 'https://eco.taobao.com/router/rest'
    params = {
        'method': 'taobao.items.onsale.get',
        'app_key': settings.TAOBAO_APP_KEY,
        'session': access_token,
        'timestamp': str(int(time.time())),
        'format': 'json',
        'v': '2.0',
        'sign_method': 'md5',
        'fields': 'num_iid,title,price',
        'page_no': 1,
        'page_size': 20
    }
    
    # 生成签名(这里省略签名逻辑,需要按淘宝规则实现)
    params['sign'] = generate_sign(params, settings.TAOBAO_APP_SECRET)
    
    resp = requests.get(url, params=params)
    return JsonResponse(resp.json())

记得在urls.py配路由:

from django.urls import path
from . import views

urlpatterns = [
    path('alibaba/', views.alibaba_api_call),
    path('taobao/callback/', views.taobao_oauth_callback),
    path('taobao/items/', views.taobao_api_call),
]

关键是把API密钥放环境变量,别硬编码。两个API的调用逻辑差不多,主要区别在认证方式和参数规则。建议把API调用封装成单独的服务类,别全堆在view里。

总结:装好SDK,处理好OAuth和签名,按需封装。

回到顶部