| outman |
2012-02-06 09:22 |
土豆网视频播放数查看器
就为了写这个小程序居然花了我一下午的时间……这让我情何以堪
先上示例:(没有任何防黑措施,仅供技术交流之用)http://www.catrio.tk/tudou/
源码:
----------------------------------------------------------------------------------------------------------------
<html>
<head><meta charset="gbk"></head>
<title>查询土豆网视频播放次数</title>
<body>
<form method="get">
请输入土豆网视频地址:<input type="text" name="u">
<button type="submit">查询播放次数</button>
</form>
<?php
if(isset($_GET['u'])){
if(substr($_GET['u'],0,7)!="http://")$_GET['u']="http://".$_GET['u'];
$result = @file_get_contents("compress.zlib://".$_GET['u']);
$istart=stripos($result,"iid",0)+5;
$iend=stripos($result,",",$istart)-$istart;
$a=substr($result,$istart,$iend-1);
$istart=stripos($result,"oid",0)+5;
$iend=stripos($result,",",$istart)-$istart;
$b=substr($result,$istart,$iend-1);
$c="http://istat.tudou.com/itemSum.srv?iabcdefg=".$a."&uabcdefg=".$b;
$c=str_replace(" ","",$c);
$u=file_get_contents($c);
$istart=stripos($u,"playNum",0)+9;
$iend=stripos($u,",",$istart)-$istart;
echo "<p>该视频播放数:".substr($u,$istart,$iend)."</p>";
}
?>
</body>
</html>
----------------------------------------------------------------------------------------------------------------
原以为可以通过获取视频播放页的播放数达到目的,但是经过我非常精密的研究发现,在打开视频播放页面的初期播放数显示为0,后期才更改为实际播放数,这就是说土豆是通过js获取播放数的,于是自告奋勇打开其js文件研究……一小时后证实无效。
灵机一动打开抓包软件,经过筛选终于筛出一个有用的地址:http://istat.tudou.com/itemSum.srv?iabcdefg=118871182&uabcdefg=84991497
这里的iabcdefg就是视频的编号,而uabcdefg则不知道是什么意思,随便更改数字都可以,就是不能为空
难题又来了,如何获得视频编号?
……
一小时后,很无语的发现在视频播放页的源码中原来就有明文的视频编号-、-
欢呼雀跃,以为用curl获取页面源码即可,没想到获取回来的竟然是乱码;据资料显示似乎是编码问题,于是用iconv转码之,无效;
又经过一小时,终于知道了真相:原来土豆网使用了gzip技术,导致直接获取回来的数据是经过压缩的,要解码gzip,可以用php的file_get_contents函数:
file_get_contents("compress.zlib://".$url);//即可获得解码的网页数据
难题全部解决,于是剩下的工作就很简单了。(我一下午的光阴啊……) |
|