You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plazavea商品API技术咨询:折扣价格缺失、未知价格字段来源及批量请求400错误问题

解决Plazavea API数据获取的三个问题

让我们一步步拆解你遇到的问题,同时给出可运行的改进方案:

1. 为什么请求&_from=0&_to=540返回400 Bad Request?

绝大多数电商API都会限制单页返回的最大数据量,Plazavea的这个接口也不例外——它大概率有单页数据条数的上限(比如你之前用的20条)。直接把_to设为540会超出接口允许的范围,所以返回400错误。

解决办法是分页循环请求:先获取总商品数,然后按每页20条(或接口允许的最大条数)循环请求所有页,最后合并数据。

2. 找不到折扣价格?看这些字段映射

从你解析后的字段来看,接口其实已经返回了价格相关的核心数据,对应关系通常是:

  • ListPrice:商品的原价(price before)
  • Price:当前的折扣价格(也就是实际售卖价)
  • PriceWithoutDiscount:如果有阶梯折扣/会员价,这个字段可能对应无折扣的基准价(和ListPrice可能一致,也可能不同,取决于促销规则)

你可以在代码里明确映射这些字段,比如:

w <- y %>% 
  select(
    商品名称 = productName,
    原价 = ListPrice,
    折扣价 = Price,
    无折扣基准价 = PriceWithoutDiscount
  )

3. 关于price Oh字段的来源

这个字段大概率是前端页面渲染时计算出来的,而不是API直接返回的。常见的情况有两种:

  • 它可能是Price字段的另一种展示格式(比如加上货币符号、千位分隔符)
  • 或者是结合了其他促销规则的计算值(比如满减后的预估价)

如果是前者,你可以自己用R格式化Price字段得到;如果是后者,你需要检查前端页面的JS逻辑,看它是用哪些API返回的字段计算出来的(比如是否用到了installments字段里的分期信息,或者其他促销字段)。

改进后的完整代码(分页获取所有数据)

library(rvest)
library(tidyverse)
library(jsonlite)
library(httr)

# 第一步:获取总商品数,确定分页次数
base_url <- "https://www.plazavea.com.pe/api/catalog_system/pub/products/search?fq=C:/678/687/&O=OrderByScoreDESC"
initial_req <- GET(paste0(base_url, "&_from=0&_to=0"))
initial_data <- content(initial_req, as = "text") %>% parse_json()
total_items <- initial_data$pagination$total # 获取总商品数

# 第二步:分页循环请求所有数据
all_data <- list()
page_size <- 20 # 接口允许的单页最大条数,保持20是安全的
for (i in seq(0, total_items - 1, by = page_size)) {
  from <- i
  to <- i + page_size - 1
  req_url <- paste0(base_url, "&_from=", from, "&_to=", to)
  response <- GET(req_url)
  
  # 检查请求是否成功
  if (http_status(response)$category != "Success") {
    warning(paste("请求分页", from, "-", to, "失败"))
    next
  }
  
  # 解析数据并添加到列表
  parsed_data <- content(response, as = "text") %>% 
    parse_json() %>% 
    tibble() %>% 
    unnest_wider(1) %>% 
    unnest_longer(items) %>% 
    unnest_wider(items) %>% 
    unnest_longer(sellers) %>% 
    unnest_wider(sellers) %>% 
    unnest_wider(commertialOffer)
  
  all_data[[length(all_data) + 1]] <- parsed_data
}

# 合并所有分页数据
final_data <- bind_rows(all_data)

# 提取所需字段(包括价格映射)
result <- final_data %>% 
  select(
    品牌 = brandName, # 补充你需要的品牌字段
    商品名称 = productName,
    原价 = ListPrice,
    折扣价 = Price,
    无折扣基准价 = PriceWithoutDiscount
  )

# 查看结果
head(result)

额外提示

  • 如果你不确定brandName是否是正确的品牌字段,可以运行colnames(final_data)查看所有可用字段,找到对应的品牌字段
  • 有些电商API会有请求频率限制,如果你循环请求太快可能被封IP,建议在循环里加Sys.sleep(1)延迟1秒

内容的提问来源于stack exchange,提问作者Omar Gonzales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 13:57:48