Skip to content

PHP+wget+bat批量下载合并youku视频

2010 六月 6
by 荒野无灯

看到网上有个视频虽然是flv的,还比较清晰,于是想下载下来。
感谢感谢youku网,感谢CCTV ,MTV …………………
感谢PHP,感谢wget 这么强大的东东!特别是wget ,真的很好很强大。 :mrgreen:

方法简介:
通过PHP取得youku网视频的实际地址,然后生成相应的批处理代码(这里以WIN下的dos命令为例),批处理主要是调用wget下载视频,然后用copy简单合并成一个大文件(因为一个视频实际被分成了几个小的FLV文件)。

下面看下效果吧,哈哈,全是自动的 :mrgreen: ,方便省事:

生成批处理:

执行批处理,下载视频并合并:

PHP代码也帖出来下,哈哈,仅供测试,不得用于非法用途 :grin:

php文件的使用方法:
youku.php?id=视频id
视频ID你看网址就知道了,如:

http://v.youku.com/v_show/id_XMTM4MzkyMTI4.html

http://player.youku.com/player.php/sid/XOTUzMDI4MTY=/v.swf

id分别为:
XMTM4MzkyMTI4
XOTUzMDI4MTY=

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
<?php
//批量下载youku视频        by 荒野无灯  www.ihacklog.com
set_time_limit(3600*5);
function youku($key)
{
$time = time();
$auth =md5(time().' XOA== MWZlNWE4Y2Q4OWQ0NjEyMWJjZTJmMWNiYTVhNzQwZGM=');
$url="http://api.youku.com/api_rest?method=video.getvideofile&pid=XOA==&ctime=$time&auth=$auth&videoid=$key";
$file = file_get_contents($url,LOCK_EX);
preg_match_all('/url="(http.*)"/isU',$file,$url);
return $url[1];
}
//var_export(youku('XMTM4MzkyMTI4'));

function get_url($url)
{
$url=str_replace('http://f.youku.com','',$url);
$referer='http://v.youku.com';
$host='f.youku.com';
$ua='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5';
    $fp = @fsockopen($host, 80, $errno, $errstr, 30);
    if ($fp)
    {
       $out = "GET {$url} HTTP/1.1\r\n";
       $out .= "User-Agent: {$ua}\r\n";
       $out .= "Host: {$host}\r\n";
       $out .= "Referer: $referer\r\n";
       $out .= "Connection: Close\r\n\r\n";
   
       fwrite($fp, $out);
       
    $data='';
       while (!feof($fp))
       {
          $data .= fgets($fp,4096);
           if(false!==strpos($data,'Location:'))
                break;
       }
      fclose($fp);
     
       $flv_down_url=str_replace('Location: ','',$data);
       $flv_down_url=str_replace('HTTP/1.1 302 Found','',$flv_down_url);
       $flv_down_url=trim($flv_down_url);
       $flv_down_url=urldecode($flv_down_url);
       //file_put_contents('a.flv',$data);
       //var_dump($flv_down_url);
       return $flv_down_url;
    }
   
}



$id=$_GET['id'];
$urls=youku($id);
$str='copy /B ';
$wgets='';
$n=0;
foreach($urls as $i)
{
    $flv=get_url($i);
    //echo "<a href='$flv' target='_blank'>$flv</a><br />";
    $wgets.="wget --user-agent=\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5\" -O {$n}.flv {$flv}\r\n";
    $str.=$n.'.flv+';
    //var_dump($flv);exit;
    $n++;
}
$str=substr($str,0,strlen($str)-1);
$str.=' all.flv';
//echo $str;
$content=$wgets.$str;

// 生成bat
header('Content-Type: application/octet-stream;');
header('Content-Disposition: attachment; filename=a.bat;');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.strlen($content) );
echo $content;


另附wget常用参数:
-c 断点续传功能
-O 保存文件名
-P 保存目录
–user-agent 用户代理设置

注意到我这里添加了:

1
--user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5"

如果不加用户代理 ,让youku 检测到你在用工具下载它的视频,它直接给你返回个403 错误来,这样视频就下载不下来了。

本文中用到取得youku视频地址的函数来自:

http://www.zzxj.net/blog/fxs_2008/archive/2010/04/15/136.html

喜欢这篇文章吗?

请订阅本站 RSS feed填写您的邮件地址,订阅我们的精彩内容:,欢迎点击这里捐赠以支持荒野无灯转播到腾讯微博 转播到腾讯微博

作者:荒野无灯
出处:Hacklog【Hacklog】

声明: 本站遵循 署名-非商业性使用-相同方式共享 3.0 共享协议. 转载请注明转自Hacklog【荒野无灯weblog】

本文链接: http://ihacklog.com/?p=3877

6 Responses Post a comment
  1. 十一月 23, 2011

    太牛了,

  2. 六月 6, 2010

    局限于windows。。我要纯PHP的

    • 六月 6, 2010

      LINUX下修改下cp命令即可,纯PHP可以下载,不过既然用WGET下载更合适,为什么要纯PHP的?适用即可。

  3. 六月 6, 2010

    最近也在折腾wget,不过对一些网盘地址支持得不是很好-.-

  4. 六月 6, 2010

    巨强大!!

    • 六月 6, 2010

      用qqlive看过的电影缓存后的文件也可以简单地用copy命令合并为一个文件。 :mrgreen:

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <q cite=""> <strong>

 :wink:  :-|  :-x  :twisted:  :)  8-O  :(  :roll:  :-P  :oops:  :-o  :mrgreen:  :lol:  :idea:  :-D  :evil:  :cry:  8)  :arrow:  :-?  :?:  :!:

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS