PHP嗅探youku视频的真实flv文件地址!
认识几个做视频网站的站长他们的视频电影都是来自于我们国内的几大视频网站了,有一站长要我帮助它做一个可以自动测试出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
这个是可以直接下载的!!
教程链接:
随意转载~但请保留教程地址★

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











1. Iterator と foreach の違いはポリモーフィックな違いです (foreach の最下層は Iterator です) Iterator はインターフェイス型であり、コレクションや配列の型を気にしません; for と foreach の両方がコレクションの型を知る必要がありますまず、コレクション内の要素の種類についても; 1. foreach の最下層はイテレータによって記述されたコードであると言われる理由: 逆コンパイルされたコード: 2. foreach の削除とイテレータの違い まず、Alibaba を見てください。 Java 開発マニュアル。ただし、ケース 1 ではエラーは報告されず、ケース 2 (java.util.ConcurrentModificationException) では最初にエラーが報告されます。

PHP が foreach ループの数を決定する手順: 1. "$fruits" の配列を作成します; 2. 初期値 0 でカウンタ変数 "$counter" を作成します; 3. "foreach" を使用してループします配列を介してループ本体内のカウンタ変数の値を増加させ、各要素とそのインデックスを出力します; 4. foreach ループの外側にカウンタ変数の値を出力し、ループがどの要素に到達したかを確認します。

テキスト処理中に、文字列をさまざまなエンコード形式に変換するのは一般的な要件です。 PHP 言語で提供される iconv (InternationalizationConversion) 関数は、このニーズに非常に便利に応えます。この記事では、iconv 関数の使い方を次の側面から詳しく紹介します。 iconv 関数の定義と共通パラメーターの紹介 デモ例: GBK エンコード文字列を UTF-8 エンコード文字列に変換する デモ例: UTF を変換する

この記事では、PHP がどのようにしてキー値を反転した後に配列を返すのかについて詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP キー値フリップ 配列キー値フリップは、配列内のキーと値を交換して、元のキーを値として、元の値をキーとして持つ新しい配列を生成する配列に対する操作です。実装方法 PHP では、次の方法で配列のキーと値の反転を実行できます。 array_flip() 関数: array_flip() 関数は、キーと値の反転操作に特に使用されます。引数として配列を受け取り、キーと値が交換された新しい配列を返します。 $original_array=[

PHP のexplode関数は、文字列を配列に分割するために使用される関数で、非常に一般的で柔軟性があります。分解関数を使用する過程で、エラーや問題が発生することがよくありますが、この記事では、分解関数の基本的な使用方法を紹介し、エラー報告を解決するいくつかの方法を紹介します。 1.explode関数の基本的な使い方 PHPでは、explode関数の基本的な構文は次のとおりです。explode(string$separator,string$stri

iconv-fencoding[-tencoding][inputfile]...[機能] 指定されたファイルの内容をあるエンコーディングから別のエンコーディングに変換します。 [説明]-fencoding: 文字をエンコーディングからエンコーディングに変換します。 -tencoding: 文字をエンコーディングに変換します。 -l: 既知のエンコード文字セットをリストします -ofile: 出力ファイルを指定します -c: 出力内の不正な文字を無視します -s: 警告メッセージを抑制しますが、エラー メッセージは抑制しません --verbose: 進行状況情報を表示します -f および -t は実行できます指定された有効な文字は、-l オプションを使用してコマンドにリストされます。 【例】* 現在サポートされている文字コードの一覧

PHP プログラミングでは、文字列の処理は頻繁に必要な操作です。その中で、文字列の分割と結合は 2 つの一般的な要件です。これらの操作をより便利に実行するために、PHP は 2 つの非常に実用的な関数、つまり、explode 関数と implode 関数を提供します。この記事では、これら2つの機能の使い方と実践スキルを紹介します。 1.explode関数explode関数は、指定された区切り文字に従って文字列を分割し、配列を返すために使用されます。その関数プロトタイプは次のとおりです。

この記事では、PHP が返す文字列の最初の文字の ASCII 値について詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP は文字列の最初の文字の ASCII 値を返します はじめに PHP では、文字列の最初の文字の ASCII 値を取得することは、文字列処理と文字エンコーディングの基本的な知識を必要とする一般的な操作です。 ASCII 値は、コンピュータ システムで文字の数値を表すために使用され、文字の比較、データの送信、および保存に重要です。文字列の最初の文字の ASCII 値を取得するプロセスには、次の手順が含まれます。 文字列の取得: ASCII 値を取得する文字列を決定します。変数または文字列定数を指定できます
