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

利用 PHP 爬虫获取商品详情 API 返回值说明

管理 管理 编辑 删除

在电商领域,获取商品详情信息是数据分析、价格监控、商品推荐等场景中的常见需求。通过调用商品详情 API,可以高效地获取商品的标题、价格、图片、描述等详细信息。本文将详细介绍如何使用 PHP 爬虫技术调用商品详情 API,并对返回值进行详细说明。

一、准备工作

1. 注册 API 账号

要使用商品详情 API,首先需要在相应的开放平台注册账号,并创建应用以获取 App KeyApp Secret。这些是调用 API 所必需的凭证。

2. 安装必要的 PHP 库

确保你的 PHP 环境中已经安装了以下库:

  • GuzzleHttp\Client:用于发送 HTTP 请求。
  • json:用于处理 JSON 数据。
  • 如果尚未安装这些库,可以通过以下命令进行安装:

bash


composer require guzzlehttp/guzzle

二、代码实现

以下是一个完整的 PHP 示例代码,展示如何调用商品详情 API,并处理返回的数据。

1. 发送 HTTP 请求

使用 GuzzleHttp\Client 发送请求,并获取 API 返回的数据。

php


<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;

function generate_signature($app_key, $app_secret, $timestamp, $params) {
    ksort($params);
    $sign_str = $app_key . $timestamp . $app_secret;
    foreach ($params as $key => $value) {
        $sign_str .= $key . $value;
    }
    return md5($sign_str);
}

function get_product_detail($app_key, $app_secret, $sku_id) {
    $timestamp = date('Y-m-d H:i:s');
    $params = [
        'method' => 'item.get',  // 替换为实际的 API 方法名
        'app_key' => $app_key,
        'timestamp' => $timestamp,
        'v' => '2.0',
        'sku' => $sku_id,
        'sign_method' => 'md5',
    ];
    $params['sign'] = generate_signature($app_key, $app_secret, $timestamp, $params);

    $client = new Client();
    $response = $client->request('GET', 'https://api.example.com/routerjson', [
        'query' => $params,
    ]);

    if ($response->getStatusCode() == 200) {
        return json_decode($response->getBody(), true);
    } else {
        echo "请求失败,状态码:" . $response->getStatusCode() . "\n";
        return null;
    }
}

2. 解析返回的 JSON 数据

解析 API 返回的 JSON 数据,并提取商品的详细信息

php


function parse_response($data) {
    if ($data['code'] == '0') {
        $items = $data['item_detail_response']['items'];
        foreach ($items as $item) {
            echo "商品标题: " . $item['title'] . "\n";
            echo "商品价格: " . $item['price'] . "\n";
            echo "商品图片: " . $item['pic_url'] . "\n";
            echo "商品描述: " . $item['description'] . "\n";
            echo "品牌: " . $item['brand'] . "\n";
            echo "分类: " . $item['category'] . "\n";
            echo "产地: " . $item['origin'] . "\n";
            echo "库存数量: " . $item['stock_quantity'] . "\n";
            echo "销量: " . $item['sales_volume'] . "\n";
            echo "用户评分: " . $item['rating'] . "\n";
            echo "评论数量: " . $item['comment_count'] . "\n";

            if (isset($item['comments'])) {
                echo "评论列表:\n";
                foreach ($item['comments'] as $comment) {
                    echo "  用户名: " . $comment['username'] . "\n";
                    echo "  评分: " . $comment['rating'] . "\n";
                    echo "  评论内容: " . $comment['comment'] . "\n";
                    echo "  评论时间: " . $comment['comment_time'] . "\n";
                }
            }

            if (isset($item['props_list'])) {
                echo "商品属性:\n";
                foreach ($item['props_list'] as $key => $value) {
                    echo "  $key: $value\n";
                }
            }

            if (isset($item['sku_list'])) {
                echo "SKU 列表:\n";
                foreach ($item['sku_list'] as $sku) {
                    echo "  SKU ID: " . $sku['sku_id'] . "\n";
                    echo "  名称: " . $sku['name'] . "\n";
                    echo "  价格: " . $sku['price'] . "\n";
                    echo "  库存: " . $sku['stock'] . "\n";
                }
            }

            if (isset($item['seller_info'])) {
                echo "卖家信息:\n";
                echo "  卖家 ID: " . $item['seller_info']['seller_id'] . "\n";
                echo "  店铺 ID: " . $item['seller_info']['shop_id'] . "\n";
                echo "  店铺名称: " . $item['seller_info']['shop_name'] . "\n";
            }

            echo "商品详情页 URL: " . $item['detail_url'] . "\n";
        }
    } else {
        echo "API 请求失败,错误信息: " . $data['errorMessage'] . "\n";
    }
}

3. 主程序

在主程序中调用上述函数,获取并展示商品的详细信息

php


<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;

function generate_signature($app_key, $app_secret, $timestamp, $params) {
    ksort($params);
    $sign_str = $app_key . $timestamp . $app_secret;
    foreach ($params as $key => $value) {
        $sign_str .= $key . $value;
    }
    return md5($sign_str);
}

function get_product_detail($app_key, $app_secret, $sku_id) {
    $timestamp = date('Y-m-d H:i:s');
    $params = [
        'method' => 'item.get',  // 替换为实际的 API 方法名
        'app_key' => $app_key,
        'timestamp' => $timestamp,
        'v' => '2.0',
        'sku' => $sku_id,
        'sign_method' => 'md5',
    ];
    $params['sign'] = generate_signature($app_key, $app_secret, $timestamp, $params);

    $client = new Client();
    $response = $client->request('GET', 'https://api.example.com/routerjson', [
        'query' => $params,
    ]);

    if ($response->getStatusCode() == 200) {
        return json_decode($response->getBody(), true);
    } else {
        echo "请求失败,状态码:" . $response->getStatusCode() . "\n";
        return null;
    }
}

function parse_response($data) {
    if ($data['code'] == '0') {
        $items = $data['item_detail_response']['items'];
        foreach ($items as $item) {
            echo "商品标题: " . $item['title'] . "\n";
            echo "商品价格: " . $item['price'] . "\n";
            echo "商品图片: " . $item['pic_url'] . "\n";
            echo "商品描述: " . $item['description'] . "\n";
            echo "品牌: " . $item['brand'] . "\n";
            echo "分类: " . $item['category'] . "\n";
            echo "产地: " . $item['origin'] . "\n";
            echo "库存数量: " . $item['stock_quantity'] . "\n";
            echo "销量: " . $item['sales_volume'] . "\n";
            echo "用户评分: " . $item['rating'] . "\n";
            echo "评论数量: " . $item['comment_count'] . "\n";

            if (isset($item['comments'])) {
                echo "评论列表:\n";
                foreach ($item['comments'] as $comment) {
                    echo "  用户名: " . $comment['username'] . "\n";
                    echo "  评分: " . $comment['rating'] . "\n";
                    echo "  评论内容: " . $comment['comment'] . "\n";
                    echo "  评论时间: " . $comment['comment_time'] . "\n";
                }
            }

            if (isset($item['props_list'])) {
                echo "商品属性:\n";
                foreach ($item['props_list'] as $key => $value) {
                    echo "  $key: $value\n";
                }
            }

            if (isset($item['sku_list'])) {
                echo "SKU 列表:\n";
                foreach ($item['sku_list'] as $sku) {
                    echo "  SKU ID: " . $sku['sku_id'] . "\n";
                    echo "  名称: " . $sku['name'] . "\n";
                    echo "  价格: " . $sku['price'] . "\n";
                    echo "  库存: " . $sku['stock'] . "\n";
                }
            }

            if (isset($item['seller_info'])) {
                echo "卖家信息:\n";
                echo "  卖家 ID: " . $item['seller_info']['seller_id'] . "\n";
                echo "  店铺 ID: " . $item['seller_info']['shop_id'] . "\n";
                echo "  店铺名称: " . $item['seller_info']['shop_name'] . "\n";
            }

            echo "商品详情页 URL: " . $item['detail_url'] . "\n";
        }
    } else {
        echo "API 请求失败,错误信息: " . $data['errorMessage'] . "\n";
    }
}

if (__FILE__ == __FILE__) {
    $app_key = 'your_app_key';  // 替换为你的 App Key
    $app_secret = 'your_app_secret';  // 替换为你的 App Secret
    $sku_id = '123456';  // 替换为商品的 SKU ID

    $response_data = get_product_detail($app_key, $app_secret, $sku_id);
    if ($response_data) {
        parse_response($response_data);
    }
}
?>

三、API 返回值说明

商品详情 API 的返回值是一个 JSON 对象,其结构如下:

返回值示例

JSON


{
    "code": "0",
    "errorMessage": "success",
    "item_detail_response": {
        "items": [
            {
                "sku_id": "1234567890",
                "title": "商品标题",
                "price": "120.00",
                "original_price": "150.00",
                "discount_price": "100.00",
                "pic_url": "https://example.com/image.jpg",
                "description": "商品详细描述",
                "brand": "品牌名称",
                "category": "分类名称",
                "origin": "产地",
                "stock_quantity": 100,
                "sales_volume": 500,
                "rating": 4.5,
                "comment_count": 200,
                "comments": [
                    {
                        "user_id": "user123",
                        "username": "用户名",
                        "rating": 5,
                        "comment": "好评内容",
                        "comment_time": "2024-10-10T12:00:00Z"
                    }
                ],
                "props_list": {
                    "color": "红色",
                    "size": "L"
                },
                "sku_list": [
                    {
                        "sku_id": "123456",
                        "name": "红色",
                        "price": "120.00",
                        "stock": 50
                    }
                ],
                "seller_info": {
                    "seller_id": "seller123",
                    "shop_id": "shop456",
                    "shop_name": "店铺名称"
                },
                "detail_url": "https://item.example.com/1234567890.html"
            }
        ]
    }
}

返回值字段说明

  • code:返回的状态码,表示请求的结果。0 表示成功,其他值表示失败。
  • errorMessage:错误信息,描述了返回状态码对应的错误原因。
  • item_detail_response:商品详情信息的响应数据。items:商品列表,包含多个商品的详细信息。sku_id:商品的唯一标识 ID。title:商品标题。price:商品当前价格。original_price:商品原价(如果有)。discount_price:商品折扣价(如果有)。pic_url:商品图片的 URL。description:商品详细描述。brand:商品品牌。category:商品分类。origin:商品产地。stock_quantity:当前库存数量。sales_volume:销量。rating:用户评分。comment_count:评论数量。comments:评论内容列表。user_id:用户 ID。username:用户名。rating:用户评分。comment:评论内容。comment_time:评论时间。props_list:商品属性列表,如尺码、颜色等。sku_list:商品的 SKU 列表,每个 SKU 代表一个具体的商品规格和价格组合。sku_id:SKU 的 ID。name:SKU 的名称。price:SKU 的价格。stock:SKU 的库存数量。seller_info:卖家信息。seller_id:卖家 ID。shop_id:店铺 ID。shop_name:店铺名称。detail_url:商品详情页 URL。

四、注意事项

1. API 使用限制

API 提供商可能对请求频率和数据量有限制。建议在实际使用中合理安排请求间隔,避免被封禁。

2. 数据隐私

确保遵守 API 提供商的使用条款,不要滥用数据。

3. 异常处理

在请求过程中可能会遇到网络问题、API 限制或其他错误。建议使用 try-catch 语句捕获异常,并合理处理。

4. 签名生成

根据 API 文档,生成签名是调用 API 的必要步骤。确保正确实现签名生成逻辑。

五、总结

通过上述步骤和代码,你可以使用 PHP 爬虫技术获取商品的详细信息,并解析返回的 JSON 数据。希望这个示例对你有所帮助!


请登录后查看

one-Jason 最后编辑于2025-04-15 13:58:21

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

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.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.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
59
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

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

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

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

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