open163_download

download subtitle and video in netease open163

  1. // ==UserScript==
  2. // @name open163_download
  3. // @namespace zt
  4. // @version 0.1
  5. // @description download subtitle and video in netease open163
  6. // @author zt
  7. // @include http://*.163.com/movie/*
  8. // @include http://*.163.com/special/*
  9. // ==/UserScript==
  10. var debug = true;
  11.  
  12. var xbug = debug ? console.debug.bind(console) : function(){},
  13. xlog = debug ? console.log.bind(console) : function(){};
  14.  
  15.  
  16. function insertAfter( newElement, targetElement ){ // newElement是要追加的元素 targetElement 是指定元素的位置
  17. var parent = targetElement.parentNode; // 找到指定元素的父节点
  18. if( parent.lastChild == targetElement ){ // 判断指定元素的是否是节点中的最后一个位置 如果是的话就直接使用appendChild方法
  19. parent.appendChild( newElement, targetElement );
  20. }else{
  21. parent.insertBefore( newElement, targetElement.nextSibling );
  22. }
  23. }
  24.  
  25. //获得视频,字幕链接
  26. function geturl(url,doc,callback){
  27. //var lc = location,url = location.href,doc = document;
  28. var piece_url = url.split('/');
  29. //xbug(doc);
  30. var scripts = doc.getElementsByTagName("script");
  31. //xbug(scripts);
  32. var curmovieappsrc = null;
  33. for(var i=0;i<scripts.length;i++){
  34. if(scripts[i].textContent == ""){
  35. continue;
  36. }
  37. var re= /(http:\/\/mov\.bn\.netease\.com\/open\-movie\/nos+[^']*)/i;
  38. temp = re.exec(scripts[i].textContent);
  39. //xbug(temp);
  40. if(temp != null)
  41. curmovieappsrc = temp[0];
  42. }
  43. //xbug(curmovieappsrc);
  44. //var curmovie = openCourse.getCurrentMovie();
  45. //var curmovieappsrc = curmovie.appsrc;
  46. var curmovieflv = "";
  47. curmovieflv = curmovieappsrc.replace(".m3u8",".flv").replace("mp4","flv");
  48. var lenofpurl = piece_url.length;
  49. piece_url[lenofpurl-1] = "2_" + piece_url[lenofpurl-1].split(".")[0] + ".xml";
  50. var xml_url = "http://live.ws.126.net/movie/" + piece_url.slice(lenofpurl-3).join("/");
  51. //xbug(curmovieflv);
  52. //xbug(xml_url);
  53. var zh_srt = "";
  54. var en_srt = "";
  55. GM_xmlhttpRequest({
  56. method: 'GET',
  57. url: xml_url,
  58. onload: function(res){
  59. var xmldoc = "";
  60. if(res.status==200){
  61. // For Firefox
  62. xmldoc = new DOMParser().parseFromString(res.responseText, 'text/html');
  63. // For Chrome
  64. if(xmldoc == undefined){
  65. xmldoc = doc.implementation.createHTMLDocument("");
  66. xmldoc.querySelector('html').innerHTML = res.responseText;
  67. }
  68. //xbug(xmldoc);
  69. var all = xmldoc.getElementsByTagName("all")[0];
  70. //xbug(all);
  71. var subs = all.getElementsByTagName("subs")[0].childNodes;
  72. //xbug(subs);
  73. for(var i=0;i<subs.length;i++){
  74. var name = subs[i].getElementsByTagName("name")[0].textContent;
  75. if(name == "中文")
  76. zh_srt = subs[i].getElementsByTagName("url")[0].textContent;
  77. if(name == "英文")
  78. en_srt = subs[i].getElementsByTagName("url")[0].textContent;
  79. }
  80. //xbug(curmovieflv);
  81. callback(curmovieflv,zh_srt,en_srt);
  82. }
  83. }
  84. });
  85. }
  86. //获得单独视频页面
  87. function getmovpage(movurlt,doc,callback){
  88. //xbug(movurlt);
  89. GM_xmlhttpRequest({
  90. method: 'GET',
  91. url: movurlt,
  92. onload: function(res){
  93. if(res.status==200){
  94. // For Firefox
  95. var movdoc = new DOMParser().parseFromString(res.responseText, 'text/html');
  96. // For Chrome
  97. if(movdoc == undefined){
  98. movdoc = doc.implementation.createHTMLDocument("");
  99. movdoc.querySelector('html').innerHTML = res.responseText;
  100. }
  101. //xbug(movdoc);
  102. callback(movdoc);
  103. }
  104. }
  105. });
  106. }
  107. //在课程的页面插入
  108. function insert2(curmovieflv,zh_srt,en_srt,insertplace,doc){
  109. if(en_srt != ""){
  110. var ensrt = doc.createElement("a");
  111. ensrt.innerHTML = '<a href="' + en_srt + '"><em class="f-cgreen"> 英文</em></a>';
  112. insertAfter(ensrt, insertplace.nextSibling);
  113. }
  114. if(zh_srt != ""){
  115. var zhsrt = doc.createElement("a");
  116. zhsrt.innerHTML = '<a href="' + zh_srt + '"><em class="f-cgreen"> 中文</em></a>';
  117. insertAfter(zhsrt, insertplace.nextSibling);
  118. }
  119. if(curmovieflv != ""){
  120. c = count+1;
  121. var flv = doc.createElement("a");
  122. flv.innerHTML = '<a href="' + curmovieflv + '"><em class="f-cgreen"> 视频'+'</em></a>';
  123. insertAfter(flv, insertplace.nextSibling);
  124. }
  125. }
  126. //在单独的视频页面插入
  127. function insert(curmovieflv,zh_srt,en_srt,insertplace,doc){
  128. if(en_srt != ""){
  129. var ensrt = doc.createElement("span");
  130. ensrt.className = "f-fl intro f-pr";
  131. ensrt.innerHTML = '<a href="' + en_srt + '"><em class="f-cgreen"> 英文</em></a>';
  132. insertAfter(ensrt, insertplace.nextSibling);
  133. }
  134. if(zh_srt != ""){
  135. var zhsrt = doc.createElement("span");
  136. zhsrt.className = "f-fl intro f-pr";
  137. zhsrt.innerHTML = '<a href="' + zh_srt + '"><em class="f-cgreen"> 中文</em></a>';
  138. insertAfter(zhsrt, insertplace.nextSibling);
  139. }
  140. if(curmovieflv != ""){
  141. var flv = doc.createElement("span");
  142. flv.className = "f-fl intro f-pr";
  143. flv.innerHTML = '<a href="' + curmovieflv + '"><em class="f-cgreen"> 视频</em></a>';
  144. xbug(curmovieflv);
  145. insertAfter(flv, insertplace.nextSibling);
  146. }
  147. }
  148.  
  149. var count = 0;
  150. var ahref = new Array();
  151. var movurl = new Array();
  152. var timer = null;
  153. //请求单独视频页面,得到视频字幕链接,然后插入
  154. function sentMsg(){
  155. if(count < movurl.length){
  156. //xbug("c",count,"c");
  157. getmovpage(movurl[count],document,function(movdoc){
  158. //xbug("h",count,"h");
  159. //xbug(movurl[count]);
  160. geturl(movurl[count],movdoc,function(curmovieflv,zh_srt,en_srt){
  161. //xbug(movdoc);
  162. insert2(curmovieflv,zh_srt,en_srt,ahref[count],document);
  163. count++;
  164. });
  165. });
  166. //sleep(5000);
  167.  
  168. }else {
  169. clearInterval(timer);
  170.  
  171. }
  172.  
  173. }
  174.  
  175. function sleep(n) {
  176. var start = new Date().getTime();
  177. while(true) if(new Date().getTime()-start > n) break;
  178. }
  179. //处理课程页面
  180. function processspecialpage(url,doc){
  181. var list1 = doc.getElementById("list1");
  182. var list2 = doc.getElementById("list2");
  183. var list1tr = list1.getElementsByTagName("tr");
  184. var list2tr = list2.getElementsByTagName("tr");
  185. var listtr = new Array();
  186. var i;
  187. for(i = 0;i<list1tr.length;i++){
  188. listtr[i] = list1tr[i];
  189. }
  190. for(;i<list1tr.length+list2tr.length;i++){
  191. listtr[i]=list2tr[i-list1tr.length];
  192. }
  193. var j = 0;
  194. for(i=0;i<listtr.length;i++){
  195. if(listtr[i].getAttribute("class") == null)
  196. continue;
  197. //xbug(i);
  198. if(listtr[i].getAttribute("class")=="u-even" || listtr[i].getAttribute("class")=="u-odd"){
  199. ahref[j] = listtr[i].getElementsByTagName("a")[0];
  200. //xbug(ahref);
  201. movurl[j] = ahref[j].getAttribute("href");
  202. j++;
  203. //xbug(movurl[i]);
  204. //xbug("hi",i,"hi");
  205. }
  206. }
  207. //xbug(movurl);
  208. count = 0;
  209. timer = setInterval(sentMsg,3000);
  210. }
  211. //处理单独视频页面
  212. function processmoviepage(url,doc){
  213. geturl(url,doc,function(curmovieflv,zh_srt,en_srt){
  214. //xbug(flvandsrt);
  215. var spantags = doc.getElementsByTagName("span");
  216. //xbug(spantags);
  217. var intro = null;
  218. for(i=0;i<spantags.length;i++){
  219. if(spantags[i].getAttribute("class") == null)
  220. continue;
  221. //xbug(spantags[i].getAttribute("class"));
  222. if (spantags[i].getAttribute("class") == "f-fl intro f-c6 f-pr j-hoverdown") {
  223. intro=spantags[i];
  224. break;
  225. }
  226. }
  227. //xbug(intro);
  228. if(intro == null)
  229. return;
  230. insert(curmovieflv,zh_srt,en_srt,intro,doc);
  231. });
  232. }
  233.  
  234.  
  235. function open163(){
  236. var lc = location,url = location.href,doc = document;
  237. if(url.indexOf("special/") >= 0){
  238. processspecialpage(url,doc);
  239. }
  240. else{
  241. processmoviepage(url,doc);
  242. }
  243. }
  244. open163();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址