1、從推廣方案中分析出價格及推廣碼
$keyword = " 【京東】長虹(CHANGHONG) L3 老人手機 移動/聯通2G 老年機 雙卡雙待 咖啡 原價:168.00元 券后價:163.00元 購買鏈接:https://union-click.jd.com/jdc?d=s7inaP --------------------------- 【領券下單,更便宜】關注 東購 公眾號,獲取更多優惠! "; $express_before = "/原價:(\d+.\d+)\s*元/i"; $express_after = "/券后價:(\d+.\d+) 元/i"; $express_url = "/jdc\?d=([a-zA-Z0-9]+)/i"; preg_match($express_before, $keyword, $matches_before); preg_match($express_after, $keyword, $matches_after); preg_match($express_url, $keyword, $matches_url); var_dump($matches_before); var_dump($matches_after); var_dump($matches_url);
2、302跳轉取新的地址,並分析出skuid
$url= "https://union-click.jd.com/jdc?d=".$matches_url[1]; $skuid = url2skuid($url); var_dump($skuid); // 推廣短鏈接轉skuid,並檢查是否有券的產品 https://union-click.jd.com/jdc?d=A3Cp11 function url2skuid($url) { $result1 = http_request($url, false); $express1 = "/hrl='(.+?)'/i"; preg_match($express1, $result1, $matches1); if (!isset($matches1[1])){ return array('errcode'=> 1, 'msg'=>"獲取跳轉1失敗"); } $jumpurl1 = $matches1[1]; // var_dump($jumpurl1); $result2 = http_request($jumpurl1, true); // var_dump($result2); if (!isset($result2["redirect_url"])){ return array('errcode'=> 2, 'msg'=>"獲取跳轉2失敗"); } $jumpurl2 = $result2["redirect_url"]; // var_dump($jumpurl2); $express2 = "/\.jd\.com\/[a-z\.\/\?\=]{0,}(\d+)(\.html|\&)/i"; // $express2 = "/jingfen\.jd\.com\/item\.html?sku=(\d+)&/i"; preg_match($express2, $jumpurl2, $matches2); // var_dump($matches2); if (!isset($matches2[1])){ return array('errcode'=> 3, 'msg'=>"獲取skuid失敗"); }else{ if (!stristr($jumpurl2,"jingfen")){ return array('errcode'=> 4, 'msg'=>$matches2[1]." 無券"); }else{ return array('errcode'=> 0, 'msg'=>$matches2[1]); } } } function http_request($url, $info = False) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $output = curl_exec($ch); if ($info){ $info = curl_getinfo($ch); // $retURL = $info['url']; curl_close($ch); return $info; }else{ curl_close($ch); return $output; } }