下面这两段代码是我在论坛内找的,根据淘宝商品链接输出标题和图片,但我是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;
}
恳请大神伸出天使援助之手!
第一段:根据淘宝商品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;
}
这样就避免了合并两段代码时的定义冲突
$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
)
$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],
);
能告诉方法吗
你示例的网站有 <meta charset="gbk"/> 标记,显然是 gbk 字符集
所以在 json_encode($res) 之前要对 $res 的值做转码处理