解析京东商品详情 API 返回的商品价格信息是常见的需求之一。以下是详细的步骤和代码示例,展示如何从 API 返回的 JSON 数据中提取商品的价格信息。
一、API 返回值中的价格字段
在京东商品详情 API 的返回值中,价格信息通常包含以下字段:
- price:商品当前价格。
- original_price:商品原价(如果有)。
- discount_price:商品折扣价(如果有)。
- promotion_info:促销信息,如满减、折扣等。
二、解析价格信息的步骤
1. 获取 API 返回的 JSON 数据
首先,调用京东商品详情 API 并获取返回的 JSON 数据。以下是一个示例代码,展示如何发送请求并获取数据:
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_jd_product_detail($app_key, $app_secret, $sku_id) {
$timestamp = date('Y-m-d H:i:s');
$params = [
'method' => 'jd.item.get',
'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.jd.com/routerjson', [
'query' => $params,
]);
return json_decode($response->getBody(), true);
}
$app_key = 'your_app_key'; // 替换为你的 App Key
$app_secret = 'your_app_secret'; // 替换为你的 App Secret
$sku_id = '123456'; // 替换为商品的 SKU ID
$response_data = get_jd_product_detail($app_key, $app_secret, $sku_id);
?>
2. 解析 JSON 数据中的价格信息
从返回的 JSON 数据中提取价格信息。以下是一个示例代码,展示如何解析价格信息:
php
<?php
function parse_price_info($data) {
if ($data['code'] == '0') {
$items = $data['jingdong_item_detail_response']['items'];
foreach ($items as $item) {
$price = $item['price'];
$original_price = $item['original_price'] ?? 'N/A'; // 如果没有原价,则显示 N/A
$discount_price = $item['discount_price'] ?? 'N/A'; // 如果没有折扣价,则显示 N/A
$promotion_info = $item['promotion_info'] ?? '无促销信息'; // 如果没有促销信息,则显示默认值
echo "商品当前价格: $price\n";
echo "商品原价: $original_price\n";
echo "商品折扣价: $discount_price\n";
echo "促销信息: $promotion_info\n";
}
} else {
echo "API 请求失败,错误信息: " . $data['errorMessage'] . "\n";
}
}
if ($response_data) {
parse_price_info($response_data);
}
?>
三、完整代码示例
将上述代码片段组合起来,形成一个完整的 PHP 脚本:
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_jd_product_detail($app_key, $app_secret, $sku_id) {
$timestamp = date('Y-m-d H:i:s');
$params = [
'method' => 'jd.item.get',
'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.jd.com/routerjson', [
'query' => $params,
]);
return json_decode($response->getBody(), true);
}
function parse_price_info($data) {
if ($data['code'] == '0') {
$items = $data['jingdong_item_detail_response']['items'];
foreach ($items as $item) {
$price = $item['price'];
$original_price = $item['original_price'] ?? 'N/A'; // 如果没有原价,则显示 N/A
$discount_price = $item['discount_price'] ?? 'N/A'; // 如果没有折扣价,则显示 N/A
$promotion_info = $item['promotion_info'] ?? '无促销信息'; // 如果没有促销信息,则显示默认值
echo "商品当前价格: $price\n";
echo "商品原价: $original_price\n";
echo "商品折扣价: $discount_price\n";
echo "促销信息: $promotion_info\n";
}
} else {
echo "API 请求失败,错误信息: " . $data['errorMessage'] . "\n";
}
}
$app_key = 'your_app_key'; // 替换为你的 App Key
$app_secret = 'your_app_secret'; // 替换为你的 App Secret
$sku_id = '123456'; // 替换为商品的 SKU ID
$response_data = get_jd_product_detail($app_key, $app_secret, $sku_id);
if ($response_data) {
parse_price_info($response_data);
}
?>
四、注意事项
-
API 使用限制:
- 京东 API 可能对请求频率和数据量有限制。建议在实际使用中合理安排请求间隔,避免被封禁。
-
数据隐私:
- 确保遵守京东开放平台的使用条款,不要滥用数据。
-
异常处理:
- 在请求过程中可能会遇到网络问题、API 限制或其他错误。建议使用
try-catch
语句捕获异常,并合理处理。
- 在请求过程中可能会遇到网络问题、API 限制或其他错误。建议使用
-
签名生成:
- 根据京东 API 文档,生成签名是调用 API 的必要步骤。确保正确实现签名生成逻辑。
五、总结
通过上述步骤和代码,你可以使用 PHP 爬虫技术获取京东商品的详细信息,并解析返回的 JSON 数据中的价格信息。希望这个示例对你有所帮助!