求大神帮忙 把两个php代码整合到一起,一个是根据淘宝商品链接获取标题,一个是获取图片,我想把二者整合到一个页面,一起输出为json格式

贝恩斯 2018-10-24 12:30:19
下面这两段代码是我在论坛内找的,根据淘宝商品链接输出标题和图片,但我是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;

}
...全文
233 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝恩斯 2018-12-08
  • 打赏
  • 举报
回复
嗯可以了 ,我改成了'titles'=>iconv('gb2312','utf-8',getTitle($url)),
xuzuning 2018-10-26
  • 打赏
  • 举报
回复
php 的 json 函数只能处理 utf-8字符集 的数据
你示例的网站有 <meta charset="gbk"/> 标记,显然是 gbk 字符集
所以在 json_encode($res) 之前要对 $res 的值做转码处理
贝恩斯 2018-10-26
  • 打赏
  • 举报
回复
你好 我使用json_encode($res)来输出json,为什么汉字标题输出是空的,其他的却没问题啊?
能告诉方法吗

xuzuning 2018-10-24
  • 打赏
  • 举报
回复
考虑到你两次抓取使用的是同一 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],
);
xuzuning 2018-10-24
  • 打赏
  • 举报
回复
将第二段代码的 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
)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧