最近再写随机图片API时,没有找到有效的外部url链接,用自己的域名也不划算,服务器带宽问题,还有CDN/OSS存储也是个大问题,所以采集王者荣耀壁纸的url作为随机图片的url。返回图片URL经过处理,是1920x1080的壁纸
,还有一个搜索页面:https://www.hueoo.com/s/wzry/
aPIUrl: https://api.hueoo.com/v1/img/get?type=wzry
<?php
// 基础URL,用于请求数据
$baseUrl = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi';
// 活动ID
$activityId = 2735;
// 验证码
$verifyCode = 'ABCD';
// 数据类型,这里是JSON
$sDataType = 'JSON';
// 每页获取的数据数量
$iListNum = 20;
// 排序顺序,0可能表示默认顺序
$iOrder = 0;
// 某种排序相关的标志,值为1
$iSortNumClose = 1;
// 另一个活动相关的ID
$iAMSActivityId = 51991;
// 类型ID
$iTypeId = 2;
// 流程ID
$iFlowId = 267733;
// 活动ID,与上面的activityId可能重复定义
$iActId = 2735;
// 模块ID,与上面的activityId可能重复定义
$iModuleId = 2735;
// 可能表示每次都读取的标志,值为'true'
$everyRead = 'true';
// 用于存储处理后的数据的数组
$processedData = [];
// 假设初始获取第一页数据来确定总页数,页码从0开始
$page = 0;
// 构建请求URL,包含各种参数,总页数先设为0,时间戳用于防止缓存
$url = "{$baseUrl}?activityId={$activityId}&sVerifyCode={$verifyCode}&sDataType={$sDataType}&iListNum={$iListNum}&totalpage=0&page={$page}&iOrder={$iOrder}&iSortNumClose={$iSortNumClose}&iAMSActivityId={$iAMSActivityId}&_everyRead={$everyRead}&iTypeId={$iTypeId}&iFlowId={$iFlowId}&iActId={$iActId}&iModuleId={$iModuleId}&_=". time();
// 发送HTTP请求获取数据
$response = file_get_contents($url);
// 如果请求失败,输出错误信息并终止脚本
if ($response === false) {
die("请求失败");
}
// 将获取到的JSON数据解码为PHP数组
$firstPageData = json_decode($response, true);
// 检查JSON解码是否成功,如果失败,输出错误信息并终止脚本
if (json_last_error()!== JSON_ERROR_NONE) {
die("JSON解析错误: ". json_last_error_msg());
}
// 获取总页数
$totalPages = $firstPageData['iTotalPages'];
// 遍历所有页码,从0到总页数减1
for ($page = 0; $page < $totalPages; $page++) {
// 构建请求URL,包含各种参数,总页数设为之前获取到的总页数,时间戳用于防止缓存
$url = "{$baseUrl}?activityId={$activityId}&sVerifyCode={$verifyCode}&sDataType={$sDataType}&iListNum={$iListNum}&totalpage={$totalPages}&page={$page}&iOrder={$iOrder}&iSortNumClose={$iSortNumClose}&iAMSActivityId={$iAMSActivityId}&_everyRead={$everyRead}&iTypeId={$iTypeId}&iFlowId={$iFlowId}&iActId={$iActId}&iModuleId={$iModuleId}&_=". time();
// 发送HTTP请求获取数据
$response = file_get_contents($url);
// 如果请求失败,输出错误信息并继续下一页
if ($response === false) {
echo "第 $page 页请求失败<br>";
continue;
}
// 将获取到的JSON数据解码为PHP数组
$pageData = json_decode($response, true);
// 检查JSON解码是否成功,如果失败,输出错误信息并继续下一页
if (json_last_error()!== JSON_ERROR_NONE) {
echo "第 $page 页JSON解析错误: ". json_last_error_msg(). "<br>";
continue;
}
// 遍历当前页的数据列表
foreach ($pageData['List'] as $item) {
// 获取产品ID
$iProdId = $item['iProdId'];
// 对产品名称字段进行URL解码
$sProdName = urldecode($item['sProdName']);
// 如果产品ID在处理后的数据中还未定义,则初始化其数组
if (!isset($processedData[$iProdId])) {
$processedData[$iProdId] = [];
}
// 如果产品名称在对应产品ID的数组中还未定义,则初始化其数组
if (!isset($processedData[$iProdId][$sProdName])) {
$processedData[$iProdId][$sProdName] = [];
// 遍历8个可能的图片字段
for ($imgIndex = 1; $imgIndex <= 8; $imgIndex++) {
$imgKey = "sProdImgNo_{$imgIndex}";
// 检查图片字段是否包含URL编码的字符,如果是则解码
if (strpos($item[$imgKey], '%')!== false) {
$processedData[$iProdId][$sProdName][$imgKey] = urldecode($item[$imgKey]);
} else {
// 如果不包含URL编码的字符,则直接使用原始值
$processedData[$iProdId][$sProdName][$imgKey] = $item[$imgKey];
}
}
}
}
}
// 将处理后的数据编码为JSON格式,使用格式化输出、不转义斜杠和不转义Unicode字符
$jsonData = json_encode($processedData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
// 检查JSON编码是否成功,如果失败,输出错误信息
if ($jsonData === false) {
echo "JSON编码错误: ". json_last_error_msg();
} else {
// 要写入的本地文件路径
$filePath = 'heroes.json';
// 将JSON数据写入文件
$writeResult = file_put_contents($filePath, $jsonData);
// 检查写入是否成功,如果失败,输出错误信息;否则输出成功信息
if ($writeResult === false) {
echo "写入文件失败";
} else {
echo "数据已成功写入 $filePath";
}
}
python 代码:import requests
import json
import time
baseUrl = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi'
activityId = 2735
verifyCode = 'ABCD'
sDataType = 'JSON'
iListNum = 20
iOrder = 0
iSortNumClose = 1
iAMSActivityId = 51991
iTypeId = 2
iFlowId = 267733
iActId = 2735
iModuleId = 2735
everyRead = 'true'
# 用于存储处理后的数据
processedData = {}
# 假设初始获取第一页数据来确定总页数
page = 0
url = f"{baseUrl}?activityId={activityId}&sVerifyCode={verifyCode}&sDataType={sDataType}&iListNum={iListNum}&totalpage=0&page={page}&iOrder={iOrder}&iSortNumClose={iSortNumClose}&iAMSActivityId={iAMSActivityId}&_everyRead={everyRead}&iTypeId={iTypeId}&iFlowId={iFlowId}&iActId={iActId}&iModuleId={iModuleId}&_={int(time.time())}"
response = requests.get(url)
if response.status_code != 200:
print("请求失败")
exit(1)
firstPageData = response.json()
totalPages = firstPageData['iTotalPages']
# 遍历所有页码
for page in range(totalPages):
url = f"{baseUrl}?activityId={activityId}&sVerifyCode={verifyCode}&sDataType={sDataType}&iListNum={iListNum}&totalpage={totalPages}&page={page}&iOrder={iOrder}&iSortNumClose={iSortNumClose}&iAMSActivityId={iAMSActivityId}&_everyRead={everyRead}&iTypeId={iTypeId}&iFlowId={iFlowId}&iActId={iActId}&iModuleId={iModuleId}&_={int(time.time())}"
response = requests.get(url)
if response.status_code != 200:
print(f"第 {page} 页请求失败")
continue
pageData = response.json()
for item in pageData['List']:
iProdId = item['iProdId']
sProdName = item['sProdName']
if iProdId not in processedData:
processedData[iProdId] = {}
if sProdName not in processedData[iProdId]:
processedData[iProdId][sProdName] = {}
for imgIndex in range(1, 9):
imgKey = f"sProdImgNo_{imgIndex}"
imgValue = item[imgKey]
processedData[iProdId][sProdName][imgKey] = imgValue
# 将处理后的数据编码为JSON格式
jsonData = json.dumps(processedData, indent=4, ensure_ascii=False)
# 写入本地heroes.json文件
with open('heroes.json', 'w', encoding='utf-8') as file:
file.write(jsonData)
print("数据已成功写入 heroes.json")
暂无点赞