接下来就是获取每日物品销售量(因为没有找到日均收单、卖单价格数据,如ESI有,请告知),计算市场日均贸易量(最近一个月日均)和贸易额,因为数量量大,物品数量多,要是按照上面的方法一次性拉取网页会卡死,所以采用一次获取一个物品的历史数据,需要注意的预估利润其实为日贸易额,懒得改数据库了,使用者自行注意,下面先贴获取单项物品数据的代码:
<?php
//处理单个物品历史成交数据
$mysqli = new mysqli('127.0.0.1', 'root', '', 'new');
set_time_limit(0);
echo '<pre>';
$type_id=$_GET['type_id'];
$data=[];
$url = '
https://esi.evepc.163.com/latest/markets/10000002/history/?datasource=serenity&type_id='.$type_id;
$data[]['url'] = $url;
function getMultiCurlResult($data = [], $timeout = 120)
{
$request = [];
$requestResource = curl_multi_init();
foreach ($data as $k => $v) {
$option = [
CURLOPT_TIMEOUT => $timeout,//请求超时时间,防止死循环
CURLOPT_RETURNTRANSFER => true,//获取的信息以文件流的形式返回,而不是直接输出。
];
if (!isset($v['url']) || !$v['url']) return null;
$option[CURLOPT_URL] = trim($v['url']);
if (stripos($v['url'], 'https') === 0) $option[CURLOPT_SSL_VERIFYPEER] = false;
if (isset($v['data'])) {//如果设置了请求参数,则是POST请求
$option[CURLOPT_POST] = true;
$option[CURLOPT_POSTFIELDS] = http_build_query($v['data']);
}
//启动一个curl会话
$request[$k] = curl_init();
//设置请求选项
curl_setopt_array($request[$k], $option);
//添加请求句柄
curl_multi_add_handle($requestResource, $request[$k]);
}
$running = null;
$result = [];
do {//执行批处理句柄
//CURLOPT_RETURNTRANSFER如果为0,这里会直接输出获取到的内容.如果为1,后面可以用curl_multi_getcontent获取内容.
curl_multi_exec($requestResource, $running);
//阻塞直到cURL批处理连接中有活动连接,不加这个会导致CPU负载超过90%.
curl_multi_select($requestResource);
} while ($running > 0);
foreach ($request as $k => $v) {
$result[$k] = curl_multi_getcontent($v);
curl_multi_remove_handle($requestResource, $v);
}
curl_multi_close($requestResource);
return $result;
}
$res = getMultiCurlResult($data);
unset($data);
$data=[];
//print_r($res);
foreach($res as $k => $v)
{
$arr=json_decode($v,true);
$arr=array_slice($arr,-30);
//print_r($arr);
foreach($arr as $key => $value)
{
$volume=$value['volume'];
$average=$value['average'];
if(!isset($data['highest']))
{
$data['近期日均交易量']=$volume;
$data['日销售额']=$average*$volume;
}else{
$data['近期日均交易量']=$data['近期日均交易量']+$volume;
$data['日销售额']=$data['日销售额']+$average*$volume;
}
}
}
$data['近期日均售价']=$data['日销售额']/$data['近期日均交易量'];
$data['近期日均交易量']=round($data['近期日均交易量']/30);
$t=time();
$sql="UPDATE eve SET 近期日均交易量='".$data['近期日均交易量']."',近期日均价格='".$data['近期日均售价']."' WHERE typeID=$type_id";
echo $sql.'<br>';
$query=$mysqli->query($sql);
?>