当前位置:站易网首页 > 建站教程 > 网站开发 > PHP教程 > PHP将淘宝客链接转换提取成普通淘宝链接

PHP将淘宝客链接转换提取成普通淘宝链接

文章TAG:
时间:2016-01-14来源:未知 作者:admin 文章热度:
本着分享精神,不说废话了,直奔主题:
1,先获取淘宝客链接一枚:
  1. $clickurl="http://s.click.taobao.com/t?e=m%3D2%26s%3D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%2B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%2FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%2B2Cp2Y4AZdQRGST%2FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%2FWo6QkJXpnEKIlIBiOAf%2BiEiH3X0n4yiZ%2BQMlGz6FQ%3D%3D";
复制代码
2,PHP获取初步跳转后的URL:
  1. $headers = get_headers($clickurl, TRUE);
  2. $tu = $headers['Location'];
复制代码
得到链接如下:
  1. $tu="http://s.click.taobao.com/t_js?tu=http%3A%2F%2Fs.click.taobao.com%2Ft%3Fe%3Dm%253D2%2526s%253D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%252B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%252FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%252B2Cp2Y4AZdQRGST%252FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%252FWo6QkJXpnEKIlIBiOAf%252BiEiH3X0n4yiZ%252BQMlGz6FQ%253D%253D%26ref%3D%26et%3DU1NBEMyybRSMZqT%252FAdx5AObU6XqsSK9q";
复制代码
因此链接中带有一个参数tu,后面要用到,所以将此链接取名为tu,继续第三步。

3,取得tu链接中的tu参数,也就是等号后面的内容:
  1. http%3A%2F%2Fs.click.taobao.com%2Ft%3Fe%3Dm%253D2%2526s%253D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%252B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%252FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%252B2Cp2Y4AZdQRGST%252FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%252FWo6QkJXpnEKIlIBiOAf%252BiEiH3X0n4yiZ%252BQMlGz6FQ%253D%253D%26ref%3D%26et%3DU1NBEMyybRSMZqT%252FAdx5AObU6XqsSK9q
复制代码
对编码熟悉的同学应该看出来了这其实是一条URL地址被escape编码了,我们使用PHP自定义一个解码函数对其进行处理一下,网上找到的unescape解码函数:
  1. function unescape($str) { 
  2.     $ret = ''; 
  3.     $len = strlen($str); 
  4.     for ($i = 0; $i < $len; $i ++) 
  5.     { 
  6.         if ($str[$i] == '%' && $str[$i + 1] == 'u') 
  7.         { 
  8.             $val = hexdec(substr($str, $i + 2, 4)); 
  9.             if ($val < 0x7f) 
  10.                 $ret .= chr($val); 
  11.             else  
  12.                 if ($val < 0x800) 
  13.                     $ret .= chr(0xc0 | ($val >> 6)) . 
  14.                      chr(0x80 | ($val & 0x3f)); 
  15.                 else 
  16.                     $ret .= chr(0xe0 | ($val >> 12)) . 
  17.                      chr(0x80 | (($val >> 6) & 0x3f)) . 
  18.                      chr(0x80 | ($val & 0x3f)); 
  19.             $i += 5; 
  20.         } else  
  21.             if ($str[$i] == '%') 
  22.             { 
  23.                 $ret .= urldecode(substr($str, $i, 3)); 
  24.                 $i += 2; 
  25.             } else 
  26.                 $ret .= $str[$i]; 
  27.     } 
  28.        return $ret; 
  29.     }
复制代码
解码后得到的URL地址为:
  1. $ref="http://s.click.taobao.com/t?e=m%3D2%26s%3D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%2B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%2FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%2B2Cp2Y4AZdQRGST%2FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%2FWo6QkJXpnEKIlIBiOAf%2BiEiH3X0n4yiZ%2BQMlGz6FQ%3D%3D&ref=&et=Tu9eFLz3gxx7bGejK8KgtemqA%2BR0RX35";
复制代码
这地址跟我们获取的淘宝客链接几乎相同,就是后面多了两个参数,一个ref,一个et,这里我们把这个地址命名为ref。

淘宝客链接的跳转其实就是一个封装的JS程序,通过JS发起带有header参数的请求从而达到跳转的,这个header参数中最重要的就是referer,下面我就用PHP模拟请求一下这个地址:
  1. curl_setopt($ch, CURLOPT_URL, $ref); 
  2. curl_setopt($ch, CURLOPT_REFERER, $tu); 
  3. curl_setopt($ch, CURLOPT_HEADER, true); //获取header信息
  4. $text= curl_exec($ch); 
  5. curl_close($ch);
  6. echo $text;//输出header信息
复制代码
请求后的结果输出跳转后的302头部信息,里面已经有我们想要的淘宝商品实际地址了。

以下是完整的提取淘宝URL函数

  1. function geturl($clickurl){        
  2.                 $headers = get_headers($clickurl, TRUE);
  3.                 $tu = $headers['Location'];
  4.                 $eturl = unescape($tu);
  5.                 $u = parse_url($eturl);
  6.                $param = $u['query'];                
  7.                 $ref = str_replace('tu=', '', $param);
  8.                 $ch = curl_init();  
  9.                 curl_setopt($ch, CURLOPT_URL, $ref);                  
  10.                 curl_setopt($ch, CURLOPT_REFERER, $tu);   
  11.                 curl_setopt($ch, CURLOPT_HEADER, false);  
  12.                 curl_setopt($ch, CURLOPT_NOBODY,1);
  13.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  14.                 curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
  15.                 curl_setopt($ch, CURLOPT_MAXREDIRS,2);                
  16.                 $out = curl_exec($ch);  
  17.                 $dd =  curl_getinfo($ch);
  18.                 curl_close($ch);  
  19.                 $item_url = $dd['url'];
  20.                 return $item_url; 
  21. }
复制代码
 

    相关PHP教程