代码拉取完成,页面将自动刷新
<?php
function httpGet($url){
//初始化curl
$curl = curl_init();
//配置curl
//1.获取的信息以文件流的形式返回
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
//2.超时时间
curl_setopt($curl,CURLOPT_TIMEOUT,500);
//3.请求的url
curl_setopt($curl,CURLOPT_URL,$url);
//如果支持https
//4.开启ssl验证s
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
//5.允许所有主机地址,2代表所有
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
//执行url,并获取数据
$response = curl_exec($curl);
//断开连接
curl_close($curl);
//返回数据
return $response;
}
class Huya
{
//检测开播状态(通过直播间页面content暴力搜索唯一的state字段) 简单粗暴 不优雅 但有效
public function isHuyaLiving($room_id)
{
$response = httpGet("https://www.huya.com/" . $room_id);
$flag_content = ltrim(stristr($response, "\"state\":\""), "\"state\":\"");
return stristr($flag_content, "\"", true) == "ON" ? true : false;
}
//同理 获取整个直播间页面之后遍历内容
//下面整段代码只是为了抓取一万个接口中的一万条数据中的其中一条
//现在大家对「爬虫为什么这么吃资源」应该有形象的认识了
public function parseHuya($room_id)
{
if ($this->isHuyaLiving($room_id)) {
$response = httpGet("https://m.huya.com/" . $room_id);
$info_content = ltrim(stristr($response, "window.HNF_GLOBAL_INIT = "), "window.HNF_GLOBAL_INIT = ");
$json_str = stristr($info_content, "</script>", true);
$info = json_decode($json_str, true);
$roomInfo = $info['roomInfo'];
//抓取真实推流url
//注意 拿到的直播源是个数组 可能是为了有比赛时「同一直播间不同第一视角」那种需求
$streams = $roomInfo["tLiveInfo"]["tLiveStreamInfo"]["vStreamInfo"]["value"];
//按理我们也应该用一个数组存 这里没用是暂时没那个需求 什么事都不可能一蹴而就的 先跑起来
$urlflv = null;$urlhls=null;
//但处理还是当成数组处理的 方便以后二次开发
foreach ($streams as $k => $stream) {
//遍历所有直播源并处理成长期直播源
if ($stream['sCdnType'] == "AL") {
$urlflv = $stream['sFlvUrl'] . "/" . $stream['sStreamName'] . "." . $stream['sFlvUrlSuffix'] . "?" .$stream['sFlvAntiCode'];
$urlhls = $stream['sHlsUrl'] . "/" . $stream['sStreamName'] . "." . $stream['sHlsUrlSuffix'] . "?" .$stream['sFlvAntiCode'];
}
}
//这个循环出来 如果有多个直播源的话 $url应该是最后一个直播源
$raw_data = $roomInfo['tLiveInfo'];
//打包解析结果 把抓取到的直播间信息尽量包装成斗鱼接口那样 保持接口的一致性
$parse_result = ["type" => "strjson", "Rendata" => ["media_type" => "live", "data" => [
"roomName" => $raw_data['sRoomName'],
"nickname" => $raw_data['sNick'],
"avatar" => $raw_data['sAvatar180'],
"roomimg" => $raw_data['sScreenshot'],
"roominfo" => $raw_data['sIntroduction']
], "flvlink" => $urlflv, "hlslink" => $urlhls,"time" => time()], "info" => "Check-OK", "state" => "SUCCESS"];
//存入数据库 略
} else {
return null;
}
return $parse_result;
}
}
$parser = new Huya();
var_dump($parser->parseHuya(937430));
var_dump($parser->parseHuya(584260));
?>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。