下面这两段代码是我在论坛内找的,根据淘宝商品链接输出标题和图片,但我是PHP小白,不知道怎么把两段代码整合为一个index.php页面,让他一起输出,最好是输出JSON格式。这样方便外部用“index.php?url=网址”的方法调用。
恳请大神伸出天使援助之手!
第一段:根据淘宝商品URL输出标题<?php
$url = 'https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-14918279126.20.2bb1180avinYau&id=37890690386';
echo getTitle($url);function getTitle($url){
    $header = array('user-agent:'.$_SERVER['HTTP_USER_AGENT']);
    $data = curl_https($url);
    preg_match('/<title>(.*)<\/title>/', $data, $matches);
    return $matches[1];
}/** curl 获取 https 请求 
* @param String $url        请求的url 
* @param Array  $data       要發送的數據 
* @param Array  $header     请求时发送的header 
* @param int    $timeout    超时时间,默认30s 
*/  
function curl_https($url, $data=array(), $header=array(), $timeout=30){  
  
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  
    //curl_setopt($ch, CURLOPT_POST, true);  
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
  
    $response = curl_exec($ch);  
  
    if($error=curl_error($ch)){  
        die($error);  
    }  
  
    curl_close($ch);  
  
    return $response;  
  
}  
第二段:根据淘宝商品URL输出宝贝图片
<?php
$url = 'https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-14918279126.20.2bb1180avinYau&id=37890690386';
echo getTitle($url);function getTitle($url){
    $header = array('user-agent:'.$_SERVER['HTTP_USER_AGENT']);
    $data = curl_https($url);
    preg_match('/<img[^>]*id="J_ImgBooth"[^r]*rc=\"([^"]*)\"[^>]*>/', $data, $img);
    return $img[1];
}/** curl 获取 https 请求 
* @param String $url        请求的url 
* @param Array  $data       要發送的數據 
* @param Array  $header     请求时发送的header 
* @param int    $timeout    超时时间,默认30s 
*/  
function curl_https($url, $data=array(), $header=array(), $timeout=30){  
  
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  
    //curl_setopt($ch, CURLOPT_POST, true);  
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
  
    $response = curl_exec($ch);  
  
    if($error=curl_error($ch)){  
        die($error);  
    }  
  
    curl_close($ch);  
  
    return $response;  
  
}  

解决方案 »

  1.   

    将第二段代码的 function getTitle($url) 改为 function getImage($url)
    这样就避免了合并两段代码时的定义冲突
    $url = 'https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-14918279126.20.2bb1180avinYau&id=37890690386';
    $res = array(
      'title' => getTitle($url),
      'img' => getImage($url),
    );
    Array
    (
        [title] => 在线考试系统题库软件导入试题章节练习自动评分成绩统计积分充值-淘宝网
        [img] => //gd3.alicdn.com/imgextra/i3/402134523/TB2U_HzXfMTUeJjSZFKXXagopXa_!!402134523.jpg_400x400.jpg
    )
      

  2.   

    考虑到你两次抓取使用的是同一 url,可以将解析合并在一起
    $s = curl_https($url);
    preg_match_all('/<title>(.*)<\/title>|<img[^>]*id="J_ImgBooth"[^r]*rc=\"([^"]*)\"[^>]*>/', $s, $m);
    $res = array(
      'title' => $m[1][0],
      'img' => $m[2][1],
    );
      

  3.   

    你好 我使用json_encode($res)来输出json,为什么汉字标题输出是空的,其他的却没问题啊?
    能告诉方法吗
      

  4.   

    php 的 json 函数只能处理 utf-8字符集 的数据
    你示例的网站有 <meta charset="gbk"/> 标记,显然是 gbk 字符集
    所以在 json_encode($res) 之前要对 $res 的值做转码处理
      

  5.   

    嗯可以了 ,我改成了'titles'=>iconv('gb2312','utf-8',getTitle($url)),