<?php
include(mvc::$cfg['PATH_MVC'].'lib/lib/Sunra/PhpSimple/HtmlDomParser.php');
use Sunra\PhpSimple\HtmlDomParser;
/**
*采集接口
*/
class catchAction extends baseAction
{
	/**
	  * @method 保存Partslink24的vin数据
	  * @http  post
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  vin        int [必填] VIN
	  * @param  html       string [必填] 页面内容信息
	  * @author soul
	  * @copyright 
	  */
	public function saveVinPartslink24()
	{
		$vin = LibFc::FormatVin($_POST['vin']);
		if(strlen($vin) == 17 && !empty($_POST['html']))
		{
			$arr = $this->formatCatchData($vin, $_POST['html']);
			LibFc::EchoJson([true, $arr]);
		}
		LibFc::EchoJson([false, '获取VIN信息失败！']);
	}

	
	private function formatCatchData($vin, $html)
	{
		$BaseDb = new BaseDb(mvc::$cfg['DB']['YPCAR67']);
		$table = 'vw_links JOIN vw_brand ON vbra_id = lnk_bra_id JOIN vw_catch ON lnk_cat_id = cat_id left join vm_param on pam_lnk_id = lnk_id';
		$res = $BaseDb->get($table, ['*'], sprintf(" and cat_vin='%s' limit 1", $vin), true);
		if(empty($res['data'])) LibFc::ReturnJson(false, 'VIN不存在！');
		$vinArr = $res['data'];
		$sBrand = $vinArr['vbra_prefix'];
	
		if(strpos($html, '</html>') === false)
		{
			$arr = ['status'=>false, 'read'=>3, 'text'=>'数据不完整'];
		}
		else if (strpos($html, 'registration-data.action') !== false || strpos($sGuzzle, '您需要订阅才能使用该配件目录的全部功能') !==false)
		{
			$arr = ['status'=>false, 'read'=>1, 'text'=>'不在状态'];
		}
		else if(strpos($html, '没有找到您搜索的车辆识别代码的数据。该车辆识别代码不存在或者尚未输入相关车辆数据。') !== false)
		{
			$arr = ['status'=>false, 'read'=>4, 'text'=>'没有找到您搜索的车辆识别代码的数据'];
		}
		else
		{
			if(strpos($html, 'id="vinTabsGeneral"') !== false)
			{
				// 正确取得数据
				$aValue = [];
				$sReader = 2;
				$sTarGet = '';
				$oContent = HtmlDomParser::str_get_html($html);

				// get tabs
				$aTabs = [];
				foreach ($oContent->find('#vinTabs', 0)->find('ul', 0)->find('li') as $oItem) {
					$aTabs[$oItem->find('a', 0)->getAttribute('href')] = $oItem->text();
				}

				
				if ($aTabs)
				{
					foreach ($aTabs as $sTabsSel => $sTabsTxt)
					{
						if ($sTabsTxt == '车辆数据')
						{
							if ($sBrand == 'volvo_parts')
							{
								foreach ($oContent->find($sTabsSel.' td.caption') as $oValue) {
									$aValue[$sTabsTxt][] = ['label' => $oValue->text(), 'value' => $oValue->next_sibling()->text()];
								}
							} else
							{
								foreach ($oContent->find($sTabsSel.' tbody', 0)->find('tr') as $oValue)
								{
									if ($oValue->parent()->tag == 'thead') {
										continue;
									}

									if (is_object($oValue->find('th', 0)))
									{
										$aValue[$sTabsTxt][] = [
											'label' => $oValue->find('th', 0)->text(),
											'value' => $oValue->find('td', 0)->innertext()
										];
									} else
									{
										$aValue[$sTabsTxt][] = [
											'label' => $oValue->find('td', 0)->text(),
											'value' => $oValue->find('td', 1)->innertext()
										];
									}
								}
							}
						} else
						{
							foreach ($oContent->find($sTabsSel.' tr') as $oValue)
							{
								if ($oValue->parent()->tag == 'thead') {
									continue;
								}

								$sRow = 0;
								$aRow = [];
								if (is_object($oValue->find('th', 0)))
								{
									$aRow[$sRow] = $oValue->find('th', 0)->innertext();
									$sRow ++;
								}

								$sCol = count($oValue->find('td'));
								for ($sRun = 0; $sRun < $sCol; $sRun ++)
								{
									$aRow[$sRow] = $oValue->find('td', $sRun)->innertext();
									$sRow ++;
								}
								$aValue[$sTabsTxt][] = $aRow;
							}
						}
					}
				}
				$arr = ['status'=>true, 'read'=>0, 'text'=>$aValue];
				$oContent->clear();
			}
		}
		$linkSet = ['lnk_chajian_time'=>time()];
		
		$catArr = [];
		if($arr['status'] && is_array($arr['text']) && !empty($arr['text']))
		{
			foreach($arr['text']['车辆数据'] as $k=>$v)
			{
				$v['value'] = str_replace(['<br>','<br/>'], ' ', $v['value']);
				$v['value'] = strip_tags(htmlspecialchars_decode($v['value']));
				if(trim($v['value']) == '') continue;
				switch($v['label'])
				{
					case '车型':
						$catArr['cat_model'] = $v['value'];
					break;
					case '销售类型':
						$catArr['cat_modcode'] = $v['value'];
					break;
					case '车型年份':
						$catArr['cat_year'] = (int) $v['value'];
					break;
					case '生产日期':
						$catArr['cat_yearm'] = date('Ymd', strtotime($v['value']));
					break;
					case '前后桥标识':
						$catArr['cat_bridge'] = $v['value'];
					break;
					case '发动机代码':
						$catArr['cat_engine'] = $v['value'];
					break;
					case '变速器代码':
						$catArr['cat_transmission'] = $v['value'];
					break;
				}
			}
			
		}
		if(!empty($catArr['cat_modcode']))
		{
			$linkSet['lnk_rpe_id'] = 1;
			$BaseDb->set('vw_catch', $catArr, sprintf(" and cat_id=%d", $vinArr['cat_id']));

			$paArr = [
				'pam_lnk_id'=>$vinArr['lnk_id'],
				'pam_json'=>json_encode($arr['text'])
			];
			if(empty($vinArr['pam_lnk_id']))
			{
				$BaseDb->add('vm_param', $paArr);
			}
			else
			{
				$BaseDb->set('vm_param', $paArr, sprintf(" and pam_lnk_id=%d", $vinArr['lnk_id']));
			}
		}
		else
		{
			//$saveFile = mvc::$cfg['PATH_ROOT'].'catch/partslink24/'.$vinArr['cat_vin'].'.html';
			//file_put_contents($saveFile, $html);
		}
		if(!empty($arr['read']) && $arr['read'] == 4) $linkSet['lnk_rpe_id'] = 1;
		$BaseDb->add('catch_vin_temp', ['vt_vin'=>$vinArr['cat_vin'], 'vt_atime'=>time(), 'vt_html'=>$html]);
		$BaseDb->set('vw_links', $linkSet, sprintf(" and lnk_rpe_id = 0 and lnk_id=%d and lnk_cat_id=%d", $vinArr['lnk_id'], $vinArr['lnk_cat_id']));
		return $arr;
	}

	/**
	  * @method 获取Partslink24的需要爬取的vin
	  * @http  post
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @author soul
	  * @copyright 
	  */
	public function getCatchVinPartslink24()
	{
		$BaseDb = new BaseDb(mvc::$cfg['DB']['YPCAR67']);
		$table = "(SELECT vbra_prefix, cat_vin FROM vw_links JOIN vw_brand ON vbra_id = lnk_bra_id JOIN vw_catch ON lnk_cat_id = cat_id WHERE left(cat_18, 1) ='L' AND cat_10 IN ('J','K','L','M') AND lnk_rpe_id = 0 AND cat_error = 2 LIMIT 1000) AS a";
		$where = '';
		if(!empty($_POST['vbra_prefix'])) $where .= sprintf(" and vbra_prefix='%s'", LibFc::Escape($_POST['vbra_prefix']));
		$res = $BaseDb->get($table, ['*'], $where.' ORDER BY RAND() LIMIT 1');
		if(empty($res['data'])) $res = $BaseDb->get($table, ['*'], ' ORDER BY RAND() LIMIT 1');
		echo json_encode($res['data']);
	}
	



	//采集附近的商家【跑街令】
	function catchPjlAroundShop()
	{
		$LibHttp = new LibHttp();
		$PjlBase = new PjlBase();
		/*$host = 'http://qxc.bsqipei.com/';
		for($page = 1; $page < 1000; $page++)
		{
			$url = $host.'list-0-0-'.$page.'.html';
			$html = $LibHttp->fetch($url);
			if(preg_match_all('/<li><a href="(\/repair\/[0-9a-zA-Z]+\.html)">([^<]+)<\/a>\(([^\)]*)\)<\/li>/i', $html, $match))
			{
				$res = $PjlBase->get('pl_around_shop', ['ars_name'], sprintf(" and ars_name in ('%s')", implode("','", $match[2])));
				$hasArr = array_column($res['data'], 'ars_name');
				$addArr = [];
				foreach($match[2] as $k=>$v)
				{
					if(in_array($v, $hasArr)) continue;
					$addArr[] = [
						'ars_style'=>'汽修厂',
						'ars_url'=>$host.ltrim($match[1][$k], '/'),
						'ars_name'=>$match[2][$k],
						'ars_tel'=>$match[3][$k]
					];
					$hasArr[] = $v;
				}
				if(!empty($addArr))
				{
					$PjlBase->addAny('pl_around_shop', array_keys($addArr[0]), $addArr);
				}
				echo $url, 'ok<br>';
			}
			else
			{
				echo $url, '匹配失败<br>';
			}
		}

		$host = 'http://qpc.bsqipei.com/';
		for($page = 1; $page < 2500; $page++)
		{
			$url = $host.'list-0-0-'.$page.'.html';
			$html = $LibHttp->fetch($url);
			
			if(preg_match_all('/<li><a href="(\/shangpu\/[0-9a-zA-Z]+\.html)">([^<]+)<\/a>\(([^\)]*)\)<\/li>/i', $html, $match))
			{
				$res = $PjlBase->get('pl_around_shop', ['ars_name'], sprintf(" and ars_name in ('%s')", implode("','", $match[2])));
				$hasArr = array_column($res['data'], 'ars_name');
				
				$addArr = [];
				foreach($match[2] as $k=>$v)
				{
					if(in_array($v, $hasArr)) continue;
					$addArr[] = [
						'ars_style'=>'汽配商',
						'ars_url'=>$host.ltrim($match[1][$k], '/'),
						'ars_name'=>$match[2][$k],
						'ars_tel'=>$match[3][$k]
					];
					$hasArr[] = $v;
					
				}
				if(!empty($addArr))
				{
					$PjlBase->addAny('pl_around_shop', array_keys($addArr[0]), $addArr);
				}
				echo $url, 'ok<br>';
			}
			else
			{
				echo $url, '匹配失败<br>';
			}
		}*/

		//匹配详细信息
		while(1)
		{
			$res = $PjlBase->get('pl_around_shop', ['*'], " and ars_addr = '' order by rand() limit 50");
			if(empty($res['data'])) break;
			$cArr = $res['data'];
			foreach($cArr as $v)
			{
				$html = $LibHttp->fetch($v['ars_url']);
				if(preg_match_all('/<tr>[\s]*<td class="table_one">([^<]*)<\/td>[\s]*<td class="table_two">([^<]*)<\/td>[\s]*<\/tr>/', $html, $match))
				{
					$temp = [];
					foreach($match[1] as $kk=>$vv)
					{
						$temp[$vv] = $match[2][$kk];
					}
					if($temp['名称'] == $v['ars_name'])
					{
						$setArr = [
							'ars_contacts'=>empty($temp['联系人']) || trim($temp['联系人']) == '空' ? '': $temp['联系人'],
							'ars_tel'=>empty($temp['电话']) || trim($temp['电话']) == '空' ? '': $temp['电话'],
							'ars_addr'=>empty($temp['地址']) || trim($temp['地址']) == '空' ? '': $temp['地址']
						];
						if(!empty($temp['主营']) && trim($temp['地址']) != '空') $setArr['ars_scope'] = $temp['主营'];
						if(!preg_match('/^1\d{10}$/', $setArr['ars_tel'], $match))
						{
							if(preg_match('/^\d{2,5}-(1\d{10})$/', $setArr['ars_tel'], $match))
							{
								$setArr['ars_tel'] = $match[1];
							}
							else if(stripos($v['ars_tel'], '-') !== false && stripos($setArr['ars_tel'], '-') === false)
							{
								$setArr['ars_tel'] = $v['ars_tel'];
							}
							else if($setArr['ars_tel'] != $v['ars_tel'] && strlen($v['ars_tel']) > strlen($setArr['ars_tel']))
							{
								$setArr['ars_tel'] = str_replace($setArr['ars_tel'], '-'.ltrim($setArr['ars_tel'], '-'), $v['ars_tel']);
							}
						}
						$PjlBase->set('pl_around_shop', $setArr, ' and ars_id='.$v['ars_id']);
					}
					else
					{
						echo $v['ars_url'], '匹配失败<br>';
					}
				}
				else
				{
					echo $v['ars_url'], '匹配失败<br>';
				}
			}
		}
	}
}