作者 刘锟

询盘数据采集

... ... @@ -5,10 +5,14 @@
* Date: 2025/2/13
* Time: 16:45
*/
namespace App\Console\Commands\Inquiry;
use App\Helper\Translate;
use App\Models\Inquiry\InquiryInfo;
use App\Services\InquiryRelayService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class SyncInquiryRelay extends Command
{
... ... @@ -36,39 +40,125 @@ class SyncInquiryRelay extends Command
parent::__construct();
}
/**
* @return bool
*/
public function handle()
{
$this->getInquiryForm();
$this->getInquirySzcm();
return true;
}
/**
* 获取表单系统中询盘信息
* message_sign唯一值:md5(name+email+phone+ip+time)
*/
public function getInquiryForm()
{}
{
$service = new InquiryRelayService();
$result = $service->getInquiryRelay();
if (isset($result['status']) && $result['status'] == 200) {
$data = $result['data'] ?? [];
foreach ($data as $item) {
$this->saveDate($item, $item['source_type']);
}
}
}
/**
* 获取秋哥asp采集询盘信息
* type固定4
* message_sign唯一值:md5(name+email+phone+ip+time)
* 先查数据库最大origin_key,再获取数据
*/
public function getInquirySzcm()
{
$serveice = new InquiryRelayService();
$result = $serveice->getInquirySzcm(1);
dd($result);
$max_origin_key = InquiryInfo::where('type', 4)->orderBy('origin_key', 'desc')->value('origin_key');
if ($max_origin_key) {
$start_id = $max_origin_key + 1;
} else {
$start_id = 65029;
}
public function saveDate($data)
{
// 数据里面 可能没有 IP 这时候需要通过 submit_country 字段获取对应国家,在通过国家随机获取IP , 如果IP submit_country 都没有就原样记录
if (empty($data['ip'])) {
$service = new InquiryRelayService();
while ($start_id > 0) {
$result = $service->getInquirySzcm($start_id);
if ($result) {
$this->saveDate($result, 4);
$start_id += 1;
} else {
$start_id = 0;
}
}
}
public function saveDate($data, $type)
{
$model = new InquiryInfo();
$message_sign = md5($data['name'] . $data['email'] . $data['phone'] . $data['ip'] . $data['time']);
$inquiry_info = $model->where('message_sign', $message_sign)->first();
if (!$inquiry_info) {
//没有IP,根据submit_country获取
if (empty($data['ip']) && isset($data['submit_country']) && $data['submit_country']) {
$chinese_name = DB::table('gl_world_country_city')->where('pid', 0)->where('iso2', $data['submit_country'])->value('chinese_name');
$data['ip'] = $this->getIpData($chinese_name);
}
//获取country
$country = '';
if ($data['ip']) {
$country = file_get_contents("http://ip.globalso.com?ip=" . $data['ip']);
}
//翻译message
$message_cn = '';
$re_message_trans = Translate::translate($data['message'], 'zh');
if (isset($re_message_trans[0]['code']) && $re_message_trans[0]['code'] == 200) {
$message_cn = $re_message_trans[0]['texts'];
}
//获取页面上title和keywords
$html = curl_c($data['refer'], false);
if (empty($data['title'])) {
preg_match_all('/<title>([\w\W]*?)<\/title>/', $html, $matches);
if (!empty($matches[1])) {
$data['title'] = substr($matches[1][0], 0, 255);
}
}
$keywords = '';
preg_match_all('/<meta\s+[^>]*?name=[\'|\"]keywords[\'|\"]\s+[^>]*?content=[\'|\"]([\w\W]*?)[\'|\"]/', $html, $matches);
if (!empty($matches[1])) {
$keywords = substr($matches[1][0], 0, 255);
}
if (empty($data['origin_key'])) {
$data['origin_key'] = 0;
}
if (empty($data['image'])) {
$data['image'] = '';
}
$model->createInquiry($data['name'], $data['phone'], $data['email'], $data['ip'], $country, $data['message'], $message_cn, $type, $data['time'], $data['refer'], $data['title'], $keywords, $message_sign, $data['origin_key'], $data['image']);
}
}
/**
* 获取国家随机ip
* @param $country_name
* @return mixed|string
* @author Akun
* @date 2025/02/14 14:19
*/
public function getIpData($country_name)
{
// 有国家 通过国家查询, 如果没有获取到就随机获取
$where = [];
$country_name && $where['ip_area'] = $country_name;
$ip = DB::table('gl_xunpan_ipdata')->where($where)->inRandomOrder()->value('ip');
if (empty($ip_data)) {
$ip = DB::table('gl_xunpan_ipdata')->inRandomOrder()->value('ip');
}
return $ip;
}
}
... ...