1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
public function getLink(Request $request){ $url = I('url'); $pattern = '{(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?}'; preg_match($pattern,$url,$url); if ($url){ $update['share_url'] = (string)$url[0]; }else{ $this->returnJson(0,'error',['code'=>0,'msg'=>'获取失败']); } $res = Db::name('log')->where('share_url',$update['share_url'])->find(); $reqData['code'] = 1; $reqData['msg'] = '解析成功'; if (!$res){ $url = (string)$url[0]; $pattern = '{(?<=\.).*(?=\.com)}'; preg_match($pattern,$url,$type); $type = (string)$type[0]; switch ($type){ case 'douyin': $res = $this->douyin($url,'insert'); break; case 'kuaishou': $res = $this->ks($url,'insert'); break; default: $this->returnJson(0,'error',['code'=>0,'msg'=>'暂不支持该网站']); break; } $reqData['addr'] = $res['addr_url']; $reqData['title'] = $res['title']; $reqData['cover'] = $res['cover']; $reqData['is_url'] = $res['is_url']; $this->returnJson(1,'success',$reqData); }else{ //查询是否超过一小时,超过则更新 $over_time = time() - $res['create_time']; if ($over_time>3600){ $url = (string)$url[0]; $pattern = '{(?<=\.).*(?=\.com)}'; preg_match($pattern,$url,$type); $type = (string)$type[0]; if ($type=='douyin'){ $res = $this->douyin($url,'update'); }elseif ($type=='kuaishou'){ $res = $this->ks($url,'update'); } $reqData['addr'] = $res['addr_url']; $reqData['title'] = $res['title']; $reqData['cover'] = $res['cover']; $reqData['is_url'] = $res['is_url']; $this->returnJson(1,'success',$reqData); }else{ $reqData['addr'] = $res['addr_url']; $reqData['cover'] = $res['cover']; $reqData['title'] = $res['title']; $reqData['is_url'] = $res['is_url']; $this->returnJson(1,'success',$reqData); } } } protected function douyin($url,$action = 'insert'){ $update['share_url'] = $url; $url = get_headers($url,true); $url = $url['location']; $pattern = '{(?<=share\/video\/).*(?=\/)}'; preg_match($pattern,$url,$video_id); $video_id = $video_id[0]; $ql = QueryList::get('https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='.$video_id); $res = json_decode($ql->getHtml(),true); $url = $res['item_list'][0]['video']['play_addr']['url_list'][0]; $update['title'] = $res['item_list'][0]['share_info']['share_title']; $update['cover'] = $res['item_list'][0]['music']['cover_large']['url_list'][0]; $update['create_time'] = time(); $url = str_replace('playwm','play',$url); $update['is_url'] = $url; $url = get_headers($url,true); $url = $url['location']; $update['addr_url'] = $url; if ($action=='insert'){ $id = Db::name('log')->insertGetId($update); $res = Db::name('log')->where('id',$id)->find(); }else{ $res = Db::name('log')->where('share_url',$update['share_url'])->update($update); $res = Db::name('log')->where('share_url',$update['share_url'])->find(); } return $res; } |
请先
!