book_douban_ChangShaLib

为豆瓣读书用户想读页面的图书,添加长沙图书馆馆藏查询结果

  1. // ==UserScript==
  2. // @name book_douban_ChangShaLib
  3. // @name:zh-CN 豆瓣读书-想读-长沙图书馆信息
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.1
  6. // @description 为豆瓣读书用户想读页面的图书,添加长沙图书馆馆藏查询结果
  7. // @author You
  8. // @match https://book.douban.com/people/*/wish*
  9. // @match https://book.douban.com/people/*/wish
  10. // @grant GM_xmlhttpRequest
  11. // @grant GM_addStyle
  12. // @grant GM_setValue
  13. // @grant GM_getValue
  14. // @grant GM_deleteValue
  15. // @grant GM_listValues
  16. // @license MIT
  17. // ==/UserScript==
  18.  
  19. var Debug = true;
  20. var Reset = false;
  21. var I = 0;
  22. var TITLE, Booklist, CardNodes, Nodes, QueryResult, Done;
  23. var UID = document.URL.split("/")[4];
  24. var Total = document
  25. .getElementsByClassName("subject-num")[0]
  26. .innerText.split("/")[1];
  27. var DoubanUrl = document.URL;
  28. var OpacUrl = "https://opac.changshalib.cn/opac/search?&q=";
  29. var SearchParam =
  30. "&searchWay=title&sortWay=title200Weight&sortOrder=desc&scWay=dim&hasholding=1&searchSource=reader";
  31.  
  32. function log(info) {
  33. if (Debug) console.log(info);
  34. }
  35.  
  36. function queryHolding(Title, i) {
  37. log(i + "查询:" + Title);
  38. GM_xmlhttpRequest({
  39. method: "GET",
  40. url: OpacUrl + Title + SearchParam,
  41. onload: function (response) {
  42. var webText = response.responseText;
  43. QueryResult = webText.substring(
  44. webText.indexOf("检索到: ") + 5,
  45. webText.indexOf(" 条结果")
  46. );
  47.  
  48. GM_setValue(UID + Title, QueryResult);
  49.  
  50. if (QueryResult == "You ") {
  51. queryHolding(Title, i);
  52. return 0;
  53. }
  54.  
  55. if (QueryResult != "0") {
  56. addLink(QueryResult, i, Title);
  57. GM_setValue(UID, GM_getValue(UID) + 1);
  58. }
  59. showStats(i);
  60. },
  61. onerror: function () {
  62. log("连接失败");
  63. },
  64. });
  65. }
  66.  
  67. function addLink(QueryResult, i, Title) {
  68. var FontColor = "red";
  69. Nodes = document.createElement("span");
  70. Nodes.class = "cart-info";
  71. Nodes.innerHTML =
  72. '<span class="cart-info"><span class="add2cartWidget "><a target="_blank" href="' +
  73. OpacUrl +
  74. Title +
  75. SearchParam +
  76. '"class="j a_add2cart add2cart"name="4827310"><span>长沙图书馆(<b style="color:' +
  77. FontColor +
  78. '">' +
  79. QueryResult +
  80. "</b>)</span></a></span></span>";
  81. CardNodes[i].appendChild(Nodes);
  82. }
  83.  
  84. function showStats(i) {
  85. log(i);
  86. i == Booklist.length - 2 ? (Done = "red") : (Done = "");
  87. if (document.getElementById("LibStats")) {
  88. document.getElementById("LibStats").innerHTML =
  89. "已找到(<span style='color:" +
  90. Done +
  91. "'>" +
  92. GM_getValue(UID) +
  93. "</span>/" +
  94. Total +
  95. ")";
  96. } else {
  97. var dot = document.createElement("span");
  98. dot.className = "gray-dot";
  99. dot.innerText = ".";
  100.  
  101. var span = document.createElement("span");
  102. span.id = "LibStats";
  103. span.innerHTML = span.innerHTML =
  104. "已找到(" + GM_getValue(UID) + "/" + Total + ")";
  105.  
  106. document.getElementsByClassName("sort")[0].appendChild(dot);
  107. document.getElementsByClassName("sort")[0].appendChild(span);
  108. }
  109. }
  110.  
  111. function resetCache() {
  112. for (var i = 0; i < GM_listValues().length; i++) {
  113. GM_deleteValue(GM_listValues()[0]);
  114. }
  115. }
  116.  
  117. (function () {
  118. Booklist = document.getElementsByTagName("h2");
  119. CardNodes = document.getElementsByClassName("cart-actions");
  120.  
  121. if (Reset) resetCache();
  122. if (GM_getValue(UID) == undefined) GM_setValue(UID, 0);
  123.  
  124. for (var i = I; i < Booklist.length - 1; i++) {
  125. TITLE = Booklist[i].innerText;
  126. if ( GM_getValue(UID + TITLE) != undefined && GM_getValue(UID + TITLE) != "You " ) {
  127. log("缓存:" + TITLE + GM_getValue(UID + TITLE));
  128. showStats(i);
  129. if (GM_getValue(UID + TITLE) != "0") {
  130. addLink(GM_getValue(UID + TITLE), i, TITLE);
  131. }
  132. } else {
  133. (function (t, a) {
  134. setTimeout(function () {
  135. queryHolding(t, a);
  136. }, 500 * a);
  137. })(TITLE, i);
  138. }
  139. }
  140. })();

QingJ © 2025

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