eBooks Assistant

eBooks Assistant for douban.com

当前为 2020-10-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name eBooks Assistant
  3. // @namespace https://github.com/caspartse/eBooksAssistant
  4. // @version 0.3.0
  5. // @description eBooks Assistant for douban.com
  6. // @author Caspar Tse
  7. // @match https://book.douban.com/subject/*
  8. // @require https://cdn.bootcdn.net/ajax/libs/jquery/1.10.0/jquery.min.js
  9. // @connect douban.com
  10. // @connect amazon.cn
  11. // @connect 106.52.138.60
  12. // @grant GM_xmlhttpRequest
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. function queryAmazon(title, isbn) {
  17. GM_xmlhttpRequest({
  18. method: "GET",
  19. url: "https://www.amazon.cn/s?__mk_zh_CN=亚马逊网站&i=digital-text&k=" + isbn + "&ref=nb_sb_noss&url=search-alias%3Ddigital-text",
  20. headers: {
  21. 'User-agent': window.navigator.userAgent,
  22. },
  23. onload: function(responseDetail) {
  24. var doc = responseDetail.responseText;
  25. var errorFlag = /("totalResultCount"\:0)|(在Kindle商店中未找到)/.exec(doc);
  26. if (!errorFlag) {
  27. var regexAmazonUrl = /href="(\S+keywords=\d+[^"]+)"/gi;
  28. var amazonUrl = "https://www.amazon.cn" + regexAmazonUrl.exec(doc)[1];
  29. amazonUrl = amazonUrl.replace(isbn, title);
  30. var partnerTemplate = '';
  31. if ($(".online-partner").length) {
  32. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://s1.ax1x.com/2020/10/05/0JbHKI.jpg" width="16" height="16"> <span>Kindle</span> </a> </div>';
  33. $('.online-type[data-ebssistant="read"]').append(partnerTemplate.replace("{templateUrl}", amazonUrl));
  34. } else {
  35. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebssistant="read"> <span>在线试读:</span> <div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}" one-link-mark="yes"> <img src="https://s1.ax1x.com/2020/10/05/0JbHKI.jpg" width="16" height="16"> <span>Kindle</span> </a> </div></div> </div>';
  36. $("#link-report").after(partnerTemplate.replace("{templateUrl}", amazonUrl));
  37. }
  38. var regexAmazonPrice = /<span class="a-offscreen">¥([0-9\.]+)<\/span>/gi;
  39. var amazonPrice = regexAmazonPrice.exec(doc)[1];
  40. console.log(amazonPrice);
  41. var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span style="color:#418FDE;"><img src="https://s1.ax1x.com/2020/10/05/0JbHKI.jpg" style="border-radius: 50%; box-shadow: 0 0 1px 0 rgba(0,0,0,0.6);" width="16" height="16" border="0">&nbsp;Kindle</span> </a> </div> <div class="cell impression_track_mod_buyinfo"> <div class="cell price-wrapper"> <a target="_blank" href="{templateUrl}"> <span class="buylink-price "> {templatePrice}元 </span> </a> </div> <div class="cell"> <a target="_blank" href="{templateUrl}" class="buy-book-btn e-book-btn"> <span>购买电子书</span> </a> </div> </div> </div> </li>';
  42. if (amazonPrice == 0.00 ) {
  43. buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span > <img alt="Kindle Unlimited" src="https://s1.ax1x.com/2020/10/05/0tmjLn.png" width="75" height="10" border="0"> </span> </a> </div> <div class="cell impression_track_mod_buyinfo"> <div class="cell price-wrapper"> <a target="_blank" href="{templateUrl}"> <span class="buylink-price "> {templatePrice}元 </span> </a> </div> <div class="cell"> <a target="_blank" href="{templateUrl}" class="buy-book-btn e-book-btn"> <span>购买电子书</span> </a> </div> </div> </div> <div class="more-info"> <span class="buyinfo-promotion">KU可免费借阅</span> </div> </li>';
  44. regexAmazonPrice = /<span dir="auto">或者¥([0-9\.]+)购买<\/span>/gi;
  45. amazonPrice = regexAmazonPrice.exec(doc)[1];
  46. }
  47. buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", amazonUrl);
  48. buyItemTemplate = buyItemTemplate.replace("{templatePrice}", amazonPrice);
  49. $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
  50. }
  51. return;
  52. }
  53. });
  54. return;
  55. }
  56.  
  57. function queryTuring(isbn) {
  58. GM_xmlhttpRequest({
  59. method: "GET",
  60. url: "http://106.52.138.60:8081/turingebooks?isbn=" + isbn,
  61. headers: {
  62. 'User-agent': window.navigator.userAgent,
  63. },
  64. onload: function(responseDetail) {
  65. var result = JSON.parse(responseDetail.responseText);
  66. console.log(result);
  67. if (result.errmsg == '') {
  68. var turingUrl = result.data.url;
  69. var turingPrice = result.data.price;
  70. var partnerTemplate = '';
  71. if ($(".online-partner").length) {
  72. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://s1.ax1x.com/2020/10/06/0UsLZj.png" width="16" height="16"> <span>图灵社区</span> </a> </div>';
  73. $('.online-type[data-ebssistant="read"]').append(partnerTemplate.replace("{templateUrl}", turingUrl));
  74. } else {
  75. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebssistant="read"> <span>在线试读:</span> <div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}" one-link-mark="yes"> <img src="https://s1.ax1x.com/2020/10/06/0UsLZj.png" width="16" height="16"> <span>图灵社区</span> </a> </div></div> </div>';
  76. $("#link-report").after(partnerTemplate.replace("{templateUrl}", turingUrl));
  77. }
  78. var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span style="color:#418FDE;"><img src="https://s1.ax1x.com/2020/10/06/0UsLZj.png" style="border-radius: 50%; box-shadow: 0 0 1px 0 rgba(0,0,0,0.6);" width="16" height="16" border="0">&nbsp;图灵社区</span> </a> </div> <div class="cell impression_track_mod_buyinfo"> <div class="cell price-wrapper"> <a target="_blank" href="{templateUrl}"> <span class="buylink-price "> {templatePrice}元 </span> </a> </div> <div class="cell"> <a target="_blank" href="{templateUrl}" class="buy-book-btn e-book-btn"> <span>购买电子书</span> </a> </div> </div> </div> </li>';
  79. buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", turingUrl);
  80. buyItemTemplate = buyItemTemplate.replace("{templatePrice}", turingPrice);
  81. $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
  82. }
  83. return;
  84. }
  85. });
  86. return;
  87. }
  88.  
  89. function queryXimalaya(title) {
  90. GM_xmlhttpRequest({
  91. method: "GET",
  92. url: "http://106.52.138.60:8081/ximalaya?title=" + title,
  93. headers: {
  94. 'User-agent': window.navigator.userAgent,
  95. },
  96. onload: function(responseDetail) {
  97. var result = JSON.parse(responseDetail.responseText);
  98. console.log(result);
  99. if (result.errmsg == '') {
  100. var ximalayaUrl = result.data.url;
  101. var partnerTemplate = '';
  102. if ($(".online-partner .online-type").length == 2) {
  103. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://s1.ax1x.com/2020/10/07/0UbEuj.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div>';
  104. $('.online-type[data-ebssistant="audio"]').append(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
  105. } else if ($(".online-partner .online-type").length == 1) {
  106. partnerTemplate = '<div class="online-type" data-ebssistant="audio"> <span>在线试听:</span> <div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}" one-link-mark="yes"> <img src="https://s1.ax1x.com/2020/10/07/0UbEuj.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div></div>';
  107. $('.online-type[data-ebssistant="read"]').after(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
  108. } else {
  109. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebssistant="audio"> <span>在线试听:</span> <div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}" one-link-mark="yes"> <img src="https://s1.ax1x.com/2020/10/07/0UbEuj.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div></div> </div>';
  110. $("#link-report").after(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
  111. }
  112. }
  113. return;
  114. }
  115. });
  116. return;
  117. }
  118.  
  119. var regexIsbn = /<span class="pl">ISBN:<\/span>\s*(\d+)\s*/g;
  120. var isbn = regexIsbn.exec($("#info").html())[1];
  121. console.log(isbn);
  122. var title = $("#wrapper h1 span").text().trim();
  123. console.log(title);
  124. try {
  125. $(".online-partner .online-type:nth-child(1)").attr("data-ebssistant", "read");
  126. $(".online-partner .online-type:nth-child(2)").attr("data-ebssistant", "audio");
  127. } catch(e) {
  128. console.log(e);
  129. }
  130. queryAmazon(title, isbn);
  131. queryTuring(isbn);
  132. queryXimalaya(title);
  133. return;
  134. })();