{{userInfo.nickname}}
用户设置 退出登录

{{wikiTitle}}

商品采集

一、功能概述

本模块提供一号通和99api商品采集服务。通过商品URL快速复制平台商品信息的功能,主要流程包括:
1.权限校验 → 2. URL参数校验 → 3. 第三方服务调用 → 4. 数据格式转换→ 5. 返回商品结构

1.一号通

1.接口定义:
@PreAuthorize("hasAuthority('admin:product:copy:product')")
    @ApiOperation(value = "复制平台商品")
    @RequestMapping(value = "/copy/product", method = RequestMethod.POST)
    public CommonResult<Map<String, Object>> copyProduct(@RequestBody @Valid StoreCopyProductRequest request) {
        return CommonResult.success(storeProductService.copyProduct(request.getUrl()));
    }
2.服务层(StoreProductServiceImpl)
public MyRecord copyProduct(String url) {
    // 调用第三方采集服务
    JSONObject originData = onePassService.copyGoods(url);

    // 数据格式转换
    StoreProductRequest productRequest = ProductUtils.onePassCopyTransition(originData);

    // 返回结构化数据
    return new MyRecord().set("info", productRequest);
}

关键处理:
接口隔离:通过onePassService隔离第三方服务调用
适配器模式:ProductUtils实现数据格式转换

3. 第三方服务调用(OnePassServiceImpl)
public JSONObject copyGoods(String url) {
    // 构建请求头
    HashMap<String, String> header = onePassUtil.getCommonHeader(onePassUtil.getToken());

    // 设置请求参数
    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    params.add("url", url);

    // 发送POST请求
    JSONObject response = onePassUtil.postFrom(
        OnePassConstants.ONE_PASS_API_URL + OnePassConstants.ONE_PASS_API_COPY_GOODS_URI,
        params, 
        header
    );

    // 提取有效数据
    return response.getJSONObject("data");
}

2.99api

1.接口定义
  @PreAuthorize("hasAuthority('admin:product:import:product')")
    @ApiOperation(value = "导入99Api商品")
    @RequestMapping(value = "/importProduct", method = RequestMethod.POST)
    @ApiImplicitParams({
            @ApiImplicitParam(name = "form", value = "导入平台1=淘宝,2=京东,3=苏宁,4=拼多多, 5=天猫", dataType = "int",  required = true),
            @ApiImplicitParam(name = "url", value = "URL", dataType = "String", required = true),
    })
    public CommonResult<StoreProductRequest> importProduct(
            @RequestParam @Valid int form,
            @RequestParam @Valid String url) throws IOException, JSONException {
        StoreProductRequest productRequest = storeProductService.importProductFromUrl(url, form);
        return CommonResult.success(productRequest);
    }
2. 关键代码段
// 路由逻辑
public StoreProductRequest importProductFromUrl(String url, int tag) {
    switch (tag) {
        case 1: // 淘宝
            return productUtils.getTaobaoProductInfo(url, tag);
        case 2: // 京东
            return productUtils.getJDProductInfo(url, tag);
        // ...其他平台
        default:
            throw new CrmebException("不支持的平台类型");
    }
}

// 数据转换示例(淘宝)
public StoreProductRequest getTaobaoProductInfo(String url, int tag) {
    JSONObject tbJsonData = getApiResponse(url); 
    JSONObject item = tbJsonData.getJSONObject("item");

    StoreProductRequest request = new StoreProductRequest();
    request.setStoreName(item.getString("title"));
    request.setSliderImage(parseImages(item)); // 多图处理
    request.setAttr(parseSpecs(item));        // 规格解析
    return request;
}
{{cateWiki.like_num}}人点赞
0人点赞
评论({{cateWiki.comment_num}}) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} {{cateWiki.page_view_num}}人看过该文档
评论(0) {{commentWhere.order ? '评论从旧到新':'评论从新到旧'}} 165人看过该文档
评论
{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除
{{item.like ? item.like.like_num : 0}} {{replyIndex == index ? '取消回复' : '回复'}}
评论
{{items.user ? items.user.nickname : '暂无昵称'}} (自评)
{{items.content}}
{{items.create_time}} 删除
{{items.like ? items.like.like_num : 0}} {{replyIndexJ == (index+'|'+indexJ) ? '取消回复' : '回复'}}
评论
目录
  • {{item}}