超星学习通资源嗅探

嗅探超星学习通学习页面的视频、课件等资源

  1. // ==UserScript==
  2. // @name 超星学习通资源嗅探
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1.10
  5. // @description 嗅探超星学习通学习页面的视频、课件等资源
  6. // @author Jamaskii
  7. // @match https://mooc1.chaoxing.com/mycourse/studentstudy?chapterId=*&courseId=*
  8. // @icon http://file.market.xiaomi.com/thumbnail/PNG/l62/AppStore/0df974411e86ac90526a328899c555f5ada40cb17
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. //官方暴露的资源下载接口,需要传入资源id
  15. var api='https://cs-ans.chaoxing.com/download/';
  16.  
  17. //用于显示资源的列表元素
  18. var list=document.createElement('table');
  19.  
  20. var doScan=function(){
  21. //清空列表
  22. list.innerHTML='';
  23.  
  24. //定位每一个资源所在iframe
  25. var ifs=document.getElementById('iframe').contentWindow.document.getElementsByTagName('iframe');
  26.  
  27. //获取资源信息,并渲染列表
  28. for(var i=0;i<ifs.length;i++){
  29. //unicode转中文,并去转义
  30. var reg = /\\/g;
  31. var text=unUnicode(ifs[i].getAttribute('data')).replace(reg,'');
  32.  
  33. //解析json
  34. var obj=JSON.parse(text);
  35.  
  36. //通过资源id生成当前资源的下载链接
  37. var url=api+obj.objectid;
  38.  
  39. //渲染列表
  40. var line=document.createElement('tr');
  41. var type=document.createElement('td');
  42. var name=document.createElement('td');
  43. var namea=document.createElement('a');
  44. var size=document.createElement('td');
  45.  
  46. type.innerText=obj.type.replace('.','');
  47. namea.innerText=obj.name;
  48. namea.href=url;
  49. size.innerText=obj.hsize;
  50.  
  51. type.style='padding:2px; border: 1px solid black;';
  52. name.style='padding:2px; border: 1px solid black; color:blue; cursor:pointer ';
  53. namea.style='color:blue; cursor:pointer ';
  54. size.style='padding:2px; border: 1px solid black;';
  55.  
  56. line.appendChild(type);
  57. name.appendChild(namea);
  58. line.appendChild(name);
  59. line.appendChild(size);
  60.  
  61. list.appendChild(line);
  62. }
  63. };
  64.  
  65. //unicode转中文
  66. function unUnicode(str){
  67. str = str.replace(/(\\u)(\w{1,4})/gi,function($0){
  68. return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{1,4})/g,"$2")),16)));
  69. });
  70. str = str.replace(/(&#x)(\w{1,4});/gi,function($0){
  71. return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{1,4})(%3B)/g,"$2"),16));
  72. });
  73. str = str.replace(/(&#)(\d{1,6});/gi,function($0){
  74. return String.fromCharCode(parseInt(escape($0).replace(/(%26%23)(\d{1,6})(%3B)/g,"$2")));
  75. });
  76.  
  77. return str;
  78. }
  79.  
  80. //首次加载渲染
  81. window.onload=function render(){
  82. var container=document.createElement('div');
  83. var btnScan=document.createElement('button');
  84. var boxCtrl=document.createElement('div');
  85. var btnHide=document.createElement('button');
  86. var mainBlock=document.getElementById('mainid');
  87.  
  88. btnScan.style='width: 60px;';
  89. btnScan.innerText='嗅探';
  90. btnScan.onclick=doScan;
  91.  
  92. btnHide.style='width: 60px;';
  93. btnHide.innerText='收起';
  94. btnHide.onclick=function(){list.innerHTML='';};
  95.  
  96. container.style='font-size:14px; display:flex; flex-direction:column; align-items:center;';
  97.  
  98. boxCtrl.appendChild(btnScan);
  99. boxCtrl.appendChild(btnHide);
  100. container.appendChild(boxCtrl);
  101. container.appendChild(list);
  102. mainBlock.parentElement.insertBefore(container,mainBlock);
  103.  
  104. doScan();
  105. }
  106. })();