XXQG_mp3_dl.user.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // ==UserScript==
  2. // @name XXQG_mp3_dl
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://article.xuexi.cn/articles/audio/share/index.html?*
  8. // @icon https://article.xuexi.cn/favicon.ico
  9. // @grant none
  10. // @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js
  11. // ==/UserScript==
  12. (function() {
  13. 'use strict';
  14. // TEST URL
  15. // https://article.xuexi.cn/articles/audio/share/index.html?art_id=8249913386002990141&part_id=null&type=album&study_style_id=feeds_pure&jump_model=dtxuexi%3A%2F%2Fappclient%2Fpage%2Faudio_album%3FitemId%3D8249913386002990141&share_to=wx_single
  16. var list_len = 0;
  17. var str = "";
  18. function loop_click(index) {
  19. if (index >= list_len) {
  20. var filename = $.trim($(".header-title > .title").text());
  21. saveTxt("bash-" + filename, str);
  22. console.log("END");
  23. return;
  24. }
  25. var item = $(".playlist > .song:eq(" + index + ")");
  26. var title_index = $.trim(item.find(".song-index-num").text());
  27. var title = $.trim(item.find(".song-info-title").text());
  28. item.find(".song-info").click();
  29. general_wait(function() {
  30. return $("audio").length > 0;
  31. }, function() {
  32. var src = $("audio source").attr('src');
  33. str += "wget " + src + " -O '" + title_index + "-" + title + ".mp3'" + "\n";
  34. console.log(title_index + "-" + title + " " + src);
  35. $(".close-container .close").click();
  36. setTimeout(function() {
  37. loop_click(index + 1);
  38. }, 200);
  39. });
  40. }
  41. function general_wait(condition, callback) {
  42. let _tmp_interval = setInterval(function() {
  43. try {
  44. let result = condition();
  45. if (result) {
  46. clearInterval(_tmp_interval);
  47. callback(result);
  48. }
  49. } catch (e) {}
  50. }, 500);
  51. }
  52. function saveTxt(filename, content) {
  53. var a = document.createElement('a');
  54. var blob = new Blob([content]);
  55. a.download = filename + ".txt";
  56. a.href = URL.createObjectURL(blob);
  57. a.click();
  58. URL.revokeObjectURL(blob);
  59. }
  60. function initUI() {
  61. var html = "<div id='mybtn' style='width:50px;height:50px;text-align:center;line-height:50px;position:fixed;top:0;right:0;background:#000;color:#fff;'>开始</div>";
  62. $("body").append(html);
  63. $("#mybtn").click(function(){
  64. list_len = $(".playlist > .song").length;
  65. loop_click(0);
  66. });
  67. }
  68. initUI();
  69. /*
  70. setTimeout(function(){
  71. loop_click(0);
  72. }, 1000);
  73. */
  74. })();