PHP嗅探youku视频的真实flv文件地址!
May 25, 2016 pm 04:44 PM认识几个做视频网站的站长他们的视频电影都是来自于我们国内的几大视频网站了,有一站长要我帮助它做一个可以自动测试出youku视频网站的flv真实地址,下面我整理了一下午解决了此问题非常的不错,大家可参考一下。
这个是借力打力,只是抓去朋友网的内容!!!
不过相当好用哦!
看代码:
<?php $videourl = 'http://v.youku.com/v_show/id_XMjA5MjQ0OTQ0.html'; function get_content($url, $data) { if (is_array($data)) { $data = http_build_query($data, '', '&'); } $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = curl_exec($ch); return $result; } $str = get_content('http://share.pengyou.com/json.php?mod=usershare&act=geturlinfo', array( 'url' => $videourl )); $str = json_decode($str); var_dump($str); ?>
这个测试出来的只是swf文件并不是我们要的flv文件了,后来参考一站长的写法进行了改进
核心代码:
<?php function fetch_youku_flv($url) { preg_match("#id_(.*?).html#", $url, $out); $id = $out[1]; $content = get_curl_contents('http://v.youku.com/player/getPlayList/VideoIDS/' . $id); $data = json_decode($content); foreach ($data->data[0]->streamfileids AS $k => $v) { $sid = getSid(); $fileid = getfileid($v, $data->data[0]->seed); $one = ($data->data[0]->segs->$k); if ($k == 'flv' || $k == 'mp4') return "http://f.youku.com/player/getFlvPath/sid/{$sid}_00/st/{$k}/fileid/{$fileid}?K={$one[0]->k}"; continue; } } function get_curl_contents($url, $second = 5) { if (!function_exists('curl_init')) die('php.ini未开启php_curl.dll'); $c = curl_init(); curl_setopt($c, CURLOPT_URL, $url); $UserAgent = $_SERVER['HTTP_USER_AGENT']; curl_setopt($c, CURLOPT_USERAGENT, $UserAgent); curl_setopt($c, CURLOPT_HEADER, 0); curl_setopt($c, CURLOPT_TIMEOUT, $second); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); $cnt = curl_exec($c); $cnt = mb_check_encoding($cnt, 'utf-8') ? iconv('gbk', 'utf-8//IGNORE', $cnt) : $cnt; //字符编码转换 curl_close($c); return $cnt; } function getSid() { $sid = time() . (rand(0, 9000) + 10000); return $sid; } function getkey($key1, $key2) { $a = hexdec($key1); $b = $a ^ 0xA55AA5A5; $b = dechex($b); return $key2 . $b; } function getfileid($fileId, $seed) { $mixed = getMixString($seed); $ids = explode("*", $fileId); unset($ids[count($ids) - 1]); $realId = ""; for ($i = 0; $i < count($ids); ++$i) { $idx = $ids[$i]; $realId.= substr($mixed, $idx, 1); } return $realId; } function getMixString($seed) { $mixed = ""; $source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/:._-1234567890"; $len = strlen($source); for ($i = 0; $i < $len; ++$i) { $seed = ($seed * 211 + 30031) % 65536; $index = ($seed / 65536 * strlen($source)); $c = substr($source, $index, 1); $mixed.= $c; $source = str_replace($c, "", $source); } return $mixed; } ?>
调用方法:
<?php $url = 'http://v.youku.com/v_show/id_XMzg2OTQ3MjQw.html'; echo fetch_youku_flv($url); ?>
访问: http://xiaomizhou.net/demo/flv.php?url=http://v.youku.com/v_show/id_XMzg2OTQ3MjQw.html
输出的结果是:http://f.youku.com/player/getFlvPath/sid/138035737110468_00/st/flv/fileid/03000201004F97EF4A2E350467A09DB266E872-5522-225F-DC45-40B4E1F9BE49?K=c2a4327df2bb5a65261d40ea
这个是可以直接下载的!!
教程链接:
随意转载~但请保留教程地址★

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList?

So bestimmen Sie die Anzahl der foreach-Schleifen in PHP

Empfohlene wesentliche Funktionen für die chinesische Verarbeitung: Detaillierte Erläuterung der PHP-Iconv-Funktion

PHP gibt ein Array mit umgedrehten Schlüsseln zurück

So verwenden Sie die PHP-Explosionsfunktion und beheben Fehler

Teilen und verschmelzen Sie Zeichenfolgen mit den Funktionen „Explodieren' und „Implodieren'.

Einführung in den Befehl iconv unter CentOS

PHP gibt den ASCII-Wert des ersten Zeichens der Zeichenfolge zurück
