乐视解析源码
1. <?php
2. $id = Le::parse($url);
3. $video\_info = Le::parseVideoUrl($id);
4. echo json\_encode($video\_info);
5. /\*\*
6. \*
7. \*/
8. class Le
9. {
10. public static function parse($url)
11. {
12. preg\_match('#vplay/(.\*?).htm#’,$url,$ids);
13. if ($ids\[1\]) {
14. $name = “LE-“.md5($ids\[1\]);
15. }else{
16. $name = “LE-“.md5($url);
17. }
19. if (file\_exists(NAME\_PATH.$name)) {
20. $data = json\_decode(file\_get\_contents(NAME\_PATH.$name),true);
21. $pay = $data\['pay’\];
22. $vid = $data\['vid’\];
23. $title = $data\['title’\];
24. $poster = $data\['poster’\];
25. }else{
26. $content = self::curl($url);
27. preg\_match('#vid: (.\*?),#’,$content,$vids);
28. preg\_match('#title:“(.\*?)",#’,$content,$titles);
29. preg\_match('#videoPic:“(.\*?)",#’,$content,$pics);
30. preg\_match('#isPay: (.\*?),#’,$content,$isPay);
31. $vid = $vids\[1\];
32. $title = $titles\[1\];
33. $poster = !emptyempty($pics\[1\]) ? str\_replace('320\_200′,’640\_320’,$pics\[1\]) : ";
34. $pay = $isPay\[1\];//是否付费
35. file\_put\_contents(NAME\_PATH.$name, json\_encode(array(“vid"\=>$vid,“pay"\=>$pay,“title"\=>$title,“poster"\=>$poster)));
36. }
37. return $vid;
38. }
39. public static function parseVideoUrl($vid){
40. $time = number\_format(microtime(true),3,'.’,");
41. $tkey = self::getMmsKey($time);
42. $tss = GlobalBase::is\_ipad() ? “no" : “ios";
43. $splatid = GlobalBase::is\_ipad() ? 107 : 105;
44. $domain = GlobalBase::is\_ipad() ? 'm.le.com’ : 'www.le.com’;
45. $source = GlobalBase::is\_ipad() ? '1001’ : '1000’;
46. //$url = “http://player-pc.le.com/mms/out/video/playJson?id={$vid}&format=1&tkey={$tkey}&domain=www.le.com&dvtype=1000®ion=cn&accessyx=1&platid=3&splatid=304&source=1000&tss=no";
47. $url = “http://player-pc.le.com/mms/out/video/playJson?id={$vid}&platid=1&splatid={$splatid}&format=1&tkey={$tkey}&domain={$domain}&dvtype=720p&devid=70A6E0A1FB93DA437B79DA594B3C9D03B428043B®ion=cn&source={$source}&accessyx=1&tss={$tss}";//&tss=tvts
49. $data = self::curl($url);
50. //print\_r($data);exit;
51. $content = json\_decode($data,true);
52. $playurl = $content\[“msgs"\]\[“playurl"\];
53. $point = $content\[“msgs"\]\[“point"\];
54. $hot = $point\[“hot"\];
55. $seek = $point\[“skip"\]\[0\];
57. $pic = $playurl\[“picAll"\]\[“640\*320"\];
58. $domains = array(“http://play.g3proxy.lecloud.com",“http://bplay.g3proxy.lecloud.com",“http://g3.letv.com");
59. $domain = $domains\[0\];//$domains\[mt\_rand(0,count($domains)-1)\];
60. $dispatch = $playurl\[“dispatch"\];
61. $duration = $playurl\[“duration"\];
62. foreach ($dispatch as $key => $value) {
63. switch ($key) {
64. case '350’:$def = “流畅";break;
65. case '1000’:$def = “超清";break;
66. case '1300’:$def = “原画";break;
67. case '720p’:$def = “720P";break;
68. case '1080p’:$def = “1080P";break;
69. }
70. $vurl = $domain.$value\[0\];//self::getVideoUrl($domain.$value\[0\]."&format=1&expect=3&sign=letv"); //&format=1为json &format=1为xml preg\_replace(“#/vod/v2/#","/
72. if (GlobalBase::is\_ipad()) {
73. if($key =="1000“){
74. $videoinfo\['code’\] = 200;
75. //$videoinfo\['type’\] = 'le’;
76. //$videoinfo\['play’\] = 'h5mp4’;
77. $videoinfo\[“data“\]\[“url“\] = $vurl;
78. return $videoinfo;exit;
79. }
80. }else{
81. if ($key == '1300’ && $vurl != ") {
82. $fdata\[0\]\['url’\] = $vurl;
83. $fdata\[0\]\['def’\] = '原画’;
84. }
85. if ($key == '1080p’ && $vurl != ") {
86. $fdata\[1\]\['url’\] = $vurl;
87. $fdata\[1\]\['def’\] = '1080P’;
88. }
89. if ($key == '1000’ && $vurl != ") {
90. $fdata\[2\]\['url’\] = $vurl;
91. $fdata\[2\]\['def’\] = '超清’;
92. }
93. if ($key == '720p’ && $vurl != ") {
94. $fdata\[3\]\['url’\] = $vurl;
95. $fdata\[3\]\['def’\] = '720P’;
96. }
97. if ($key == '350’ && $vurl != ") {
98. $fdata\[4\]\['url’\] = $vurl;
99. $fdata\[4\]\['def’\] = '流畅’;
100. }
101. }
102. }
103. for ($i=0; $i <= 10 ; $i++) {
104. if ($fdata\[$i\] == ") {continue;}
105. $key\_arrays\[\]=$fdata\[$i\];
106. }
107. $videoinfo\['code’\] = 200;
108. $videoinfo\['poster’\] = $img;
109. $videoinfo\['name’\] = $video\_info\[“coreVideoInfo“\]\[“videoName“\];
110. $videoinfo\['play’\] = ";
111. $videoinfo\[“data“\]\[“video“\]\[“file“\] = $key\_arrays\[0\]\['url’\];
112. $videoinfo\[“data“\]\[“video“\]\[“type“\] = “video/m3u8“;
113. return $videoinfo;
114. }
115. public static function curl($url,$cookie="“)
116. {
117. $params\[“ua“\] = “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36“;
118. $params\[“cookie“\] = $cookie;
119. return GlobalBase::curl($url,$params);
120. }
121. //==================================================以下代码不需要修改==========================================================
122. /\*\*
123. \* \[getVideoUrl 获取视频最终地址\]
124. \* @param \[type\] $url \[description\]
125. \* @return \[type\] \[description\]
126. \*/
127. private static function getVideoUrl($url){
128. $data = GlobalBase::curl($url);
129. $content = json\_decode($data,true);
130. $location = $content\[“location“\];
131. $nodelist = $content\[“nodelist“\];
132. $vurl = $nodelist\[mt\_rand(0,count($nodelist)-1)\]\[“location“\];
133. return $location;
134. }
135. //========================================= 方式二 =================================================
136. /\*\*
137. \* \[getMmsKey 获取tkey\]
138. \* @param \[type\] $e \[时间\]
139. \* @return \[type\] \[description\]
140. \*/
141. private static function getMmsKey($e)
142. {
143. $t = 185025305;
144. $r = 8;
145. $n = $e;
146. $n = self::rotateRight($n, $r);
147. $o = self::s2v(“O“,$n, $t);
148. return $o;
149. }
150. private static function rotateRight($e, $t)
151. {
152. for ($r, $n = 0; self::s2v(“g“,$t, $n); $n++){
153. $r = self::s2v(“o",1,$e);
154. $e >>= 1;
155. $r <<= 31;
156. $e += $r;
157. }
158. return $e;
159. }
160. private static function s2v($k,$y,$r){
161. switch ($k) {
162. case 'D’:return $y | $r;break;
163. case 'd’:return $y % $r;break;
164. case 'O’:return $y ^ $r;break;
165. case 'k’:return $y < $r;break;
166. case 'J’:return $y >> $r;break;
167. case 'R’:return $y === $r;break;
168. case 'g’:return $y > $r;break;
169. case 'o’:return $y & $r;break;
170. case 'l’:return $y !== $r;break;
171. case 'L’:return $y != $r;break;
172. case 'a’:return $y – $r;break;
173. case 'u’:return $y == $r;break;
174. case 'e’:return $y << $r;break;
175. }
176. }
177. }
178. ?>