天天动听外链php源码

作者:Matrix 发布时间:2014年3月30日星期日 分类:兼容并蓄 零零星星

天天动听

接口一:http://ting.hotchanson.com/detail.do?neid=音乐ID&size=0

接口二:http://ting.hotchanson.com/website/ting?song_id=音乐ID&code=音乐ID的KEY&from=search

使用接口二较为费劲,需要得到key。

以接口一示例:

打开http://ting.hotchanson.com/detail.do?neid=574285&size=0可以看到

{"code":1,"msg":"OK","data":{"hotList":[],"num":79230,"singerId":4140,"albumName":"Versus","source":"http://lty.bla.enligner.com","count":79095,"singerName":"Usher","itemList":[{"fileType":"压缩品质","dType":1,"downUrl":"http://ws.cs.hotchanson.com/mp3_64_5/52/d4/52ca1c3dcb8e4895de7024b115e45ed4.mp3?k=347f92be0b97ffb3&t=1396579062","size":"1.70M","duration":"03:42"},{"fileType":"标准品质","dType":2,"downUrl":"http://jdlbqc.tgg.yymommy.com/m4a_96_5/52/d4/52ca1c3dcb8e4895de7024b115e45ed4.m4a?k=347f92be0b97ffb3&t=1396579062","size":"2.55M","duration":"03:42"},{"fileType":"标准品质","dType":3,"downUrl":"http://nie.dfe.yymommy.com/mp3_128_5/52/d4/52ca1c3dcb8e4895de7024b115e45ed4.mp3?k=347f92be0b97ffb3&t=1396579062","size":"3.39M","duration":"03:42"}],"publish":"","songName":"DJ Got Us Fallin' In Love","neid":574285}}
之后再从中匹配到需要的mp3链接跳转下载,这就做到外链了。

php代码: 150323修改

  1. <?php    
  2. if($_GET['u']){    
  3.     $id = (is_numeric($_GET['u']))?$_GET['u']:die('Do not see the expected value');//如果没有数字型的GET参数则退出    
  4.     $url = "http://ting.hotchanson.com/detail.do?neid=$id&size=0";//拼接数据地址    
  5.     $con = file_get_contents($url);//获取音乐ID的数据    
  6.     $obj = json_decode($con);//准备提取json数据    
  7.     $d = ($obj->data->itemList) ? $obj->data->itemList : die('Not Found "itemList"') ;//如果没有mp3的数据则退出    
  8.     foreach($d as $a){//开始foreach循环遍历每个MP3链接    
  9.         if(strpos($a->downUrl, ".mp3")  &&  ($a->fileType == '压缩品质' || '标准品质'))//如果有.mp3且为'压缩品质' || '标准品质'则302跳转,否则继续找    
  10.             {    
  11.                 header('Location: '.$a->downUrl);    
  12.                 break;    
  13.             }    
  14.             else{    
  15.                 continue;    
  16.             }    
  17.         }    
  18.     }    
  19. ?>    

说明:

上面代码保存为.php文件。

调用格式:http://XXXX/*.php?u=音乐ID

各行都有注释,不再细说。

再说接口二:

这接口二的玩意有些麻烦,不建议使用。

需要的话只是多一个步骤,得到key。

之前我也没注意这key是哪里来的,后来才晓得是js函数算出来的。

  1. var u = {  
  2.     song_id: t.song_id,  
  3.     code: $.CRC32(t.song_id),  
  4.     from: "search"  
  5. };  

上面的第三行的CRC32()就是获取key的相关函数,里面的t.song_id是音乐ID
又从他页面上的其他js里找到这个代码,看来没错:

  1.         CRC32: function(f) {  
  2.     var d = new Array(256);  
  3.     var e, c;  
  4.     var b;  
  5.     for (e = 0; e < 256; e++) {  
  6.         b = e;  
  7.         for (c = 0; c < 8; c++) {  
  8.             if (b & 1) {  
  9.                 b = ((b >> 1) & 2147483647) ^ 3988292384  
  10.             } else {  
  11.                 b = ((b >> 1) & 2147483647)  
  12.             }  
  13.         }  
  14.         d[e] = b  
  15.     }  
  16.     if (typeof f != "string") {  
  17.         f = "" + f  
  18.     }  
  19.     b = 4294967295;  
  20.     for (e = 0; e < f.length; e++) {  
  21.         b = ((b >> 8) & 16777215) ^ d[(b & 255) ^ f.charCodeAt(e)]  
  22.     }  
  23.     b ^= 4294967295;  
  24.     return (b >> 3).toString(16)  
  25. },  

这就是获取key的 CRC32函数。
然后再依葫芦画瓢翻译成php代码,Bingo!

  1. function co($f) {  
  2.             $d =  Array();  
  3.             $e = '';  
  4.             $c = '';  
  5.             $b = '';  
  6.             for ($e = 0; $e < 256; $e++) {  
  7.                 $b = $e;  
  8.                 for ($c = 0; $c < 8; $c++) {  
  9.                     if ($b & 1) {  
  10.                         $b = (($b >> 1) & 2147483647) ^ 3988292384;  
  11.                     } else {  
  12.                         $b = (($b >> 1) & 2147483647);  
  13.                     }  
  14.                 }  
  15.                 $d[$e] = $b;  
  16.             }  
  17.             if (!is_string($f)) {  
  18.                 $f = "" + $f;  
  19.             }  
  20.             $b = 4294967295;  
  21.             for ($e = 0; $e < strlen($f); $e++) {  
  22.                 $b = (($b >> 8) & 16777215) ^ $d[($b & 255) ^ get_bianma(substr($f$e, 1))];  
  23.             }  
  24.             $b ^= 4294967295;//         $b = $b ^ 4294967295;  
  25.             $fuhao = (  !is_numeric(substr$b >> 3, 0, 1 ))  ) ?  substr$b >> 3, 0, 1 ) : '' ;  
  26.             return $fuhao.base_convert($b >> 3,10,16);//base_convert会去掉($b >> 3)的负号,这里不要用dechex()转换为16进制  
  27.         }  
  28.         function get_bianma($str)//等同于js的charCodeAt()  
  29.     {  
  30.         $result = array();  
  31.         for($i = 0, $l = mb_strlen($str, 'utf-8');$i < $l;++$i)  
  32.         {  
  33.             $result[] = uniord(mb_substr($str$i, 1, 'utf-8'));  
  34.         }  
  35.         return join(","$result);  
  36.     }  
  37.     function uniord($str$from_encoding = false)  
  38.     {  
  39.         $from_encoding = $from_encoding ? $from_encoding : 'UTF-8';  
  40.         if (strlen($str) == 1)  
  41.             return ord($str);  
  42.         $str = mb_convert_encoding($str, 'UCS-4BE', $from_encoding);  
  43.         $tmp = unpack('N', $str);  
  44.         return $tmp[1];  
  45.     }  

说明:代码放到php文件的<?php 和?>之间
echo co('1757517');//显示出音乐id为1757517的KEY
之后再拼接接口二的地址,与接口一的代码同理获取MP3链接。

MP3外链测试:
阅读剩余部分 »

php版本的charCodeAt()函数

作者:Matrix 发布时间:2014年3月29日星期六 分类:兼容并蓄 零零星星

charCodeAt()函数方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
JavaScript里经常看到charCodeAt函数但有些时候需要转换为php,这下就哦豁了。php里没有这玩意~ 自己写又搞不来。

还好,网上有一大把的代码:

  1.     function get_bianma($str)//等同于js的charCodeAt()  
  2. {  
  3.     $result = array();  
  4.     for($i = 0, $l = mb_strlen($str, 'utf-8');$i < $l;++$i)  
  5.     {  
  6.         $result[] = uniord(mb_substr($str$i, 1, 'utf-8'));  
  7.     }  
  8.     return join(","$result);  
  9. }  
  10. function uniord($str$from_encoding = false)  
  11. {  
  12.     $from_encoding = $from_encoding ? $from_encoding : 'UTF-8';  
  13.     if (strlen($str) == 1)  
  14.         return ord($str);  
  15.     $str = mb_convert_encoding($str, 'UCS-4BE', $from_encoding);  
  16.     $tmp = unpack('N', $str);  
  17.     return $tmp[1];  
  18. }  

说明:

get_bianma(substr($f, $e, 1))等同于js代码$f.charCodeAt($e)

表示获取$f中的第$e个位置的字符的 Unicode 编码

f.lux自动调整屏幕色温

作者:Matrix 发布时间:2014年3月24日星期一 分类: 零零星星

以前提到过PC护目镜软件 浮舟以及ColorVeil都可以满足调低亮度的要求。
这次看到的f.lux更牛~
他能随着当地一天的时间变化自动调整电脑显示器屏幕的色温,从而尽可能减少屏幕对眼睛所带来的疲劳感。

官网下载:http://stereopsis.com/flux/

baidu网盘:http://pan.baidu.com/s/1eQ3YPiy

软件安装完后看到界面右上角的“settings”,进去设置。

f.lux

 

setup1.调节白天和晚上的屏幕亮度

 

setup2.Set your Location  设置本地的经纬度,不清楚的可以到google map上查找再把经纬度粘贴贴到输入框中。

说明下google 地图上找到的:维度,经度  正表北纬或东经  负表南纬或西经。

setup3.Transition Speed 设置屏幕渐变的速度

完成后点击Done保存设置。 阅读剩余部分 »

ajax跨域请求json数据

作者:Matrix 发布时间:2014年3月13日星期四 分类: 零零星星

ajax
刚开始仅仅想获取一个他域的json数据,没想到牵扯到很多的问题。
每次都请求失败:
chrome面板的status为(canceled)

在Request Header这里显示CAUTION Provisional headers are shown

CAUTION Provisional headers are shown

 

后来才知道是ajax跨域问题导致:

也就是ajax同源策略(同源是指域名,协议,端口相同)。
跨域可以实现在自己的网站之间传递数据。但是如果你想用“跨域”盗取其它网站的数据,那还是放弃吧。除非目标网站有给你提供jsonp的接口,或者有某些可以利用的漏洞,要不然真没什么办法实现。
跨域问题的产生,最主要原因是COOKIE的安全问题。因为COOKIE是属于一个域的,如果允许跨域,客户端浏览器上储存的COOKIE就可以被它的所有者之外的程序访问到。举个例子吧,假如没有跨域问题,我现在就可以给百度发送个HTTP请求,获取你在百度上登录的用户名。或者获取SessionID,直接冒充你的帐号登录。为了避免这些问题,所以跨域访问的限制是非常有必要的。

利用jsonp跨域

要跨域必须要有回调函数的接口,这里用jsonp试试 阅读剩余部分 »

php获取文本内容并随机排列

作者:Matrix 发布时间:2014年3月9日星期日 分类: 零零星星

获取1.txt 2.txt 3.txt这三个文本文档里面每行的内容,并且打乱顺序输出。

  1. $array=file('1.txt');  
  2. $array2=file('2.txt');  
  3. $array3=file('3.txt');  
  4. for($i=2;$i<4;$i++){  
  5. $ass = "array".$i;  
  6. $ac = $$ass;  
  7. $as=count($$ass);  
  8. for($s=0;$s<$as;$s++){  
  9. $cs=count($array);  
  10. $array[$cs]=$ac[$s];  
  11. }  
  12. }  
  13. //var_dump($array);  
  14. shuffle($array);//随机排列数组  
  15. //print_r($array);  
  16. echo implode("</br>",$array);  

说明:
上面的代码放在php文件的<?php和?>标签之中。
txt和php文件放在同一目录。

优酷地址解析php源码

作者:Matrix 发布时间:2014年3月4日星期二 分类:兼容并蓄 零零星星

优酷广告很烦人,还好有些脚本可以搞定。

譬如:http://userscripts.org/scripts/show/119622  效果很不错!

chrome的使用说明:https://www.hhtjim.com/to-youku-ad-script.html

此页面的源码已失效,最新>>php源码_优酷视频解析_更新 

解析优酷视频过程:

例:http://v.youku.com/v_show/id_XNjc1MDI4Nzg0.html

1.获取视频信息

http://v.youku.com/player/getPlayList/VideoIDS/XNjc1MDI4Nzg0

打开后可以看到视频相关信息。

需要其中的seed值、streamfileids里面hd2,mp4或者flv的值以及segs里对应k的值。

hd2、mp4、flv分别代表超清,高清以及标清。

2.拼接下载地址

最终形式:http://f.youku.com/player/getFlvPath/sid/00_00/st/$P0/fileid/$P1?k=$P2
$P0:如果选择mp4(即高清)则为mp4,其余为flv。
$P1:由解密函数getFileID()得到:(php版本)

  1. function getFileIDMixString($seed)
  2.         {
  3.             $source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890";
  4.             $len = strlen($source);
  5.             for ($i = 0; $i < $len$i++)
  6.             {
  7.                 $seed = ($seed * 211 + 30031) % 65536;
  8.                 $index = floor($seed / 65536 * strlen($source));
  9.                 $mixed .= $source[$index];
  10.                 $source = str_replace($source[$index],'',$source);
  11.             }
  12.             return $mixed;
  13.         }
  14. function getFileID( $fileid,  $seed  )
  15.         {
  16.             $mixed = getFileIDMixString($seed);
  17.             $ids = explode("*",$fileid);
  18.             for ($i = 0; $i < count($ids) - 1; $i++)
  19.             {
  20.                 $idx = $ids[$i];
  21.                 $realId .= $mixed[$idx];
  22.             }
  23.             return $realId;
  24.         }

说明:此为解密的关键函数,不是我的,完全是依葫芦画瓢按照下面的C#代码而来:(解密函数getFileID()C#版本)

  1. public static String getFileID(String fileid, double seed)
  2.         {
  3.             String mixed = getFileIDMixString(seed);
  4.             String[] ids = fileid.Split('*');
  5.             StringBuilder realId = new StringBuilder();
  6.             int idx;
  7.             for (int i = 0; i < ids.Length - 1; i++)
  8.             {
  9.                 idx = int.Parse(ids[i]);
  10.                 realId.Append(mixed[idx]);
  11.             }
  12.             //Console.Write(realId.ToString());
  13.             return realId.ToString();
  14.         }
  15.         public static String getFileIDMixString(double seed)
  16.         {
  17.             StringBuilder mixed = new StringBuilder();
  18.             StringBuilder source = new StringBuilder("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");
  19.             int index, len = source.Length;
  20.             for (int i = 0; i < len; ++i)
  21.             {
  22.                 seed = (seed * 211 + 30031) % 65536;
  23.                 index = (int)Math.Floor(seed / 65536 * source.Length);
  24.                 mixed.Append(source[index]);
  25.                 source.Remove(index, 1);
  26.             }
  27.             return mixed.ToString();
  28.         }

$P2:这个是segs里对应k的值。
如果选择flv(即标清)那么可以找到
"flv":[{"no":0,"size":"9932910","seconds":"277","k":"4be592cfae8eea21282826e4","k2":"167f8074bfb7bdca7"}]}
其中的4be592cfae8eea21282826e4就是$P2。

得到de $P0 、$P1和 $P2,拼接为视频地址:http://f.youku.com/player/getFlvPath/sid/00_00/st/$P0/fileid/$P1?k=$P2

如果视频有很多分段,变更一下$P2就行。

到这里就给个获取优酷地址的php源码:

源码[已经失效]:

提示: 此处内容需要评论本文后才能查看.

调用说明:/XXX.php?id=优酷视频的ID?d=1
d=1表示标清(flv),2表示高清,3表超清.若不写?d=*则默认输出FLV的画质
有些细节处的修改没有写出来,不过php里都是搞好了的。
标清测试:


高清测试:


超清测试:

另附接口:

优酷外链接口(wap地址),这个很简单:

视频:http://v.youku.com/v_show/id_XNjc1MDI4Nzg0.html

外链

http://m.youku.com/wap/pvs?format=3gphd&id=XNjc1MDI4Nzg0

56网:

视频:ht tp://www.56.com/u30/v_MTA3MDk0Nzg3.html

外链:

http://vxml.56.com/html5/MTA3MDk0Nzg3/     (算的上高清)

http://vxml.56.com/html5/MTA3MDk0Nzg3/?src=3g&res=qvga   (也就是手机上用的)

参考:http://blog.csdn.net/feige2008/article/details/8198434

请碟仙

作者:Matrix 发布时间:2014年3月1日星期六 分类:零零星星

第一次听说这游戏,给吓尿了。 但好想玩啊~
优酷:http://v.youku.com/v_show/id_XNjc3MTQ2NDA0.html


看完后觉的好神奇,没得到想要的答案:到底存在否? 🙄