豆瓣读书助手

为豆瓣读书页面添加亚马逊Kindle、微信读书、多看阅读、喜马拉雅等直达链接

目前为 2021-05-15 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name eBooks Assistant
  3. // @name:zh-CN 豆瓣读书助手
  4. // @namespace https://github.com/caspartse/eBooksAssistant
  5. // @version 0.13.0
  6. // @description eBooks Assistant for douban.com
  7. // @description:zh-CN 为豆瓣读书页面添加亚马逊Kindle、微信读书、多看阅读、喜马拉雅等直达链接
  8. // @author Caspar Tse
  9. // @license MIT License
  10. // @supportURL https://github.com/caspartse/eBooksAssistant
  11. // @match https://book.douban.com/subject/*
  12. // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
  13. // @connect amazon.cn
  14. // @connect duokan.com
  15. // @connect 8.210.234.3
  16. // @grant GM_xmlhttpRequest
  17. // ==/UserScript==
  18.  
  19. (function() {
  20. var version = "0.13.0";
  21. var domain = "http://8.210.234.3:8081";
  22.  
  23. function changeMargin() {
  24. if ($('[data-ebassistant="read"]').height() > 36) {
  25. $('[data-ebassistant="read"]').attr("style", "margin-right:0;");
  26. }
  27. }
  28.  
  29. function queryAmazon1(isbn, title, token="") {
  30. GM_xmlhttpRequest({
  31. method: "GET",
  32. url: "https://www.amazon.cn/s?__mk_zh_CN=亚马逊网站&i=digital-text&k=" + isbn + "&ref=nb_sb_noss&url=search-alias%3Ddigital-text",
  33. headers: {
  34. "User-agent": window.navigator.userAgent,
  35. },
  36. onload: function(responseDetail) {
  37. var doc = responseDetail.responseText;
  38. var errorFlag = /("totalResultCount"\:0)/gi.exec(doc);
  39. if (!errorFlag) {
  40. var regexAmazonUrl = /href="(\S+keywords=\d+[^"]+)"[^>]*>Kindle电子书<\/a>/gi;
  41. var amazonUrl = "https://www.amazon.cn" + regexAmazonUrl.exec(doc)[1];
  42. amazonUrl = amazonUrl.replace(isbn, title);
  43. var partnerTemplate = "";
  44. if ($('.online-type[data-ebassistant="read"]').length) {
  45. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div>';
  46. $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", amazonUrl));
  47. } else if ($('.online-type[data-ebassistant="audio"]').length) {
  48. partnerTemplate = '<div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div>';
  49. $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", amazonUrl));
  50. } else {
  51. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div> </div>';
  52. $("#link-report").after(partnerTemplate.replace("{templateUrl}", amazonUrl));
  53. }
  54. var regexAmazonPrice = /<span class="a-offscreen">[¥|¥]([0-9\.]+)<\/span>/gi;
  55. var amazonPrice = regexAmazonPrice.exec(doc)[1];
  56. var amazonKu = false;
  57. var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" 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>';
  58. if (amazonPrice == 0.00 ) {
  59. buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span > <img alt="Kindle Unlimited" src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_ku.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>';
  60. regexAmazonPrice = /<span[^>]*>或者[¥|¥]([0-9\.]+)购买<\/span>/gi;
  61. amazonPrice = regexAmazonPrice.exec(doc)[1];
  62. console.log(amazonPrice);
  63. amazonKu = true;
  64. }
  65. buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", amazonUrl);
  66. buyItemTemplate = buyItemTemplate.replace("{templatePrice}", amazonPrice);
  67. $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
  68. var amazonShortUrl = /(https:\/\/www\.amazon\.cn\/dp\/[0-9a-zA-Z]+\/)/gi.exec(amazonUrl)[1];
  69. GM_xmlhttpRequest({
  70. method: "POST",
  71. url: domain + "/amazon/update",
  72. data: "isbn=" + isbn + "&price=" + amazonPrice + "&url=" + amazonShortUrl + "&ku=" + amazonKu + "&token=" + token + "&version=" + version,
  73. headers: {
  74. "Content-Type": "application/x-www-form-urlencoded"
  75. }
  76. });
  77. }
  78. return;
  79. }
  80. });
  81. changeMargin();
  82. return;
  83. }
  84.  
  85. function queryAmazon2(isbn, title, subtitle, author, translator, publisher) {
  86. GM_xmlhttpRequest({
  87. method: "GET",
  88. url: domain + "/amazon?isbn=" + isbn + "&title=" + title + "&subtitle=" + subtitle + "&author=" + author + "&translator=" + translator + "&publisher=" + publisher + "&version=" + version,
  89. headers: {
  90. "User-agent": window.navigator.userAgent,
  91. },
  92. onload: function(responseDetail) {
  93. var result = JSON.parse(responseDetail.responseText);
  94. console.log(result);
  95. var token = result.token;
  96. if (result.errmsg == "") {
  97. var amazonUrl = result.data.url;
  98. var amazonPrice = result.data.price;
  99. var ku = result.data.ku;
  100. var partnerTemplate = "";
  101. if ($('.online-type[data-ebassistant="read"]').length) {
  102. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div>';
  103. $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", amazonUrl));
  104. } else if ($('.online-type[data-ebassistant="audio"]').length) {
  105. partnerTemplate = '<div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div>';
  106. $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", amazonUrl));
  107. } else {
  108. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div> </div>';
  109. $("#link-report").after(partnerTemplate.replace("{templateUrl}", amazonUrl));
  110. }
  111. var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_kindle.png" 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>';
  112. if (ku === true) {
  113. buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span > <img alt="Kindle Unlimited" src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_ku.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>';
  114. }
  115. buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", amazonUrl);
  116. buyItemTemplate = buyItemTemplate.replace("{templatePrice}", amazonPrice);
  117. $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
  118. } else {
  119. console.log("call queryAmazon1.");
  120. queryAmazon1(isbn, title, token);
  121. }
  122. return;
  123. }
  124. });
  125. changeMargin();
  126. return;
  127. }
  128.  
  129. function queryXimalaya(isbn, title, subtitle, author, translator, publisher) {
  130. GM_xmlhttpRequest({
  131. method: "GET",
  132. url: domain + "/ximalaya?isbn=" + isbn + "&title=" + title + "&subtitle=" + subtitle + "&author=" + author + "&translator=" + translator + "&publisher=" + publisher + "&version=" + version,
  133. headers: {
  134. "User-agent": window.navigator.userAgent,
  135. },
  136. onload: function(responseDetail) {
  137. var result = JSON.parse(responseDetail.responseText);
  138. console.log(result);
  139. if (result.errmsg == "") {
  140. var ximalayaUrl = result.data.url;
  141. var partnerTemplate = "";
  142. if ($(".online-partner .online-type").length == 2) {
  143. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_ximalaya.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div>';
  144. $('.online-type[data-ebassistant="audio"]').append(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
  145. } else if ($(".online-partner .online-type").length == 1) {
  146. partnerTemplate = '<div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_ximalaya.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div></div>';
  147. $('.online-type[data-ebassistant="read"]').after(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
  148. } else {
  149. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_ximalaya.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div></div> </div>';
  150. $("#link-report").after(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
  151. }
  152. }
  153. return;
  154. }
  155. });
  156. changeMargin();
  157. return;
  158. }
  159.  
  160. function queryDuokan1(isbn, token="") {
  161. GM_xmlhttpRequest({
  162. method: "GET",
  163. url: "http://www.duokan.com/search/" + isbn + "/1",
  164. headers: {
  165. "User-agent": window.navigator.userAgent,
  166. },
  167. onload: function(responseDetail) {
  168. var doc = responseDetail.responseText;
  169. var errorFlag = /<textarea name="json" id="book_list">(\s*\[\s*\]\s*)<\/textarea>/gi.exec(doc);
  170. if (!errorFlag) {
  171. var items = /<textarea name="json" id="book_list">([\s\S]+?)<\/textarea>/gi.exec(doc);
  172. var regexDuokanUrl = /url : \'(\/book\/\d+)\'/gi;
  173. var duokanUrl = "http://www.duokan.com" + regexDuokanUrl.exec(items)[1];
  174. var partnerTemplate = "";
  175. if ($('.online-type[data-ebassistant="read"]').length) {
  176. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div>';
  177. $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", duokanUrl));
  178. } else if ($('.online-type[data-ebassistant="audio"]').length) {
  179. partnerTemplate = '<div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div></div>';
  180. $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", duokanUrl));
  181. } else {
  182. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div></div> </div>';
  183. $("#link-report").after(partnerTemplate.replace("{templateUrl}", duokanUrl));
  184. }
  185. var regexDuokanPrice = /price : \'([0-9\.]+)\'/gi;
  186. var duokanPrice = regexDuokanPrice.exec(items)[1];
  187. var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.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>';
  188. buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", duokanUrl);
  189. buyItemTemplate = buyItemTemplate.replace("{templatePrice}", duokanPrice);
  190. $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
  191. GM_xmlhttpRequest({
  192. method: "POST",
  193. url: domain + "/duokan/update",
  194. data: "isbn=" + isbn + "&price=" + duokanPrice + "&url=" + duokanUrl + "&token=" + token + "&version=" + version,
  195. headers: {
  196. "Content-Type": "application/x-www-form-urlencoded"
  197. }
  198. });
  199. }
  200. return;
  201. }
  202. });
  203. changeMargin();
  204. return;
  205. }
  206.  
  207. function queryDuokan2(isbn, title, subtitle, author, translator, publisher) {
  208. GM_xmlhttpRequest({
  209. method: "GET",
  210. url: domain + "/duokan?isbn=" + isbn + "&title=" + title + "&subtitle=" + subtitle + "&author=" + author + "&translator=" + translator + "&publisher=" + publisher + "&version=" + version,
  211. headers: {
  212. "User-agent": window.navigator.userAgent,
  213. },
  214. onload: function(responseDetail) {
  215. var result = JSON.parse(responseDetail.responseText);
  216. console.log(result);
  217. var token = result.token;
  218. if (result.errmsg == "") {
  219. var duokanUrl = result.data.url;
  220. var duokanPrice = result.data.price;
  221. var partnerTemplate = "";
  222. if ($('.online-type[data-ebassistant="read"]').length) {
  223. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div>';
  224. $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", duokanUrl));
  225. } else if ($('.online-type[data-ebassistant="audio"]').length) {
  226. partnerTemplate = '<div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div></div>';
  227. $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", duokanUrl));
  228. } else {
  229. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div></div> </div>';
  230. $("#link-report").after(partnerTemplate.replace("{templateUrl}", duokanUrl));
  231. }
  232. var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_duokan.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>';
  233. buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", duokanUrl);
  234. buyItemTemplate = buyItemTemplate.replace("{templatePrice}", duokanPrice);
  235. $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
  236. } else {
  237. console.log("call queryDuokan1.");
  238. queryDuokan1(isbn, token);
  239. }
  240. return;
  241. }
  242. });
  243. changeMargin();
  244. return;
  245. }
  246.  
  247. function queryWeread(isbn, title, subtitle, author, translator, publisher) {
  248. GM_xmlhttpRequest({
  249. method: "GET",
  250. url: domain + "/weread?isbn=" + isbn + "&title=" + title + "&subtitle=" + subtitle + "&author=" + author + "&translator=" + translator + "&publisher=" + publisher + "&version=" + version,
  251. headers: {
  252. "User-agent": window.navigator.userAgent,
  253. },
  254. onload: function(responseDetail) {
  255. var result = JSON.parse(responseDetail.responseText);
  256. console.log(result);
  257. if (result.errmsg == "") {
  258. var duokanUrl = result.data.url;
  259. var duokanPrice = result.data.price;
  260. var partnerTemplate = "";
  261. if ($('.online-type[data-ebassistant="read"]').length) {
  262. partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_weread.png" width="16" height="16"> <span>微信读书</span> </a> </div>';
  263. $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", duokanUrl));
  264. } else if ($('.online-type[data-ebassistant="audio"]').length) {
  265. partnerTemplate = '<div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_weread.png" width="16" height="16"> <span>微信读书</span> </a> </div></div>';
  266. $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", duokanUrl));
  267. } else {
  268. partnerTemplate = '<div class="online-partner"> <div class="online-type" data-ebassistant="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://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_weread.png" width="16" height="16"> <span>微信读书</span> </a> </div></div> </div>';
  269. $("#link-report").after(partnerTemplate.replace("{templateUrl}", duokanUrl));
  270. }
  271. var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant.oss-cn-guangzhou.aliyuncs.com/icon_weread.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>';
  272. buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", duokanUrl);
  273. buyItemTemplate = buyItemTemplate.replace("{templatePrice}", duokanPrice);
  274. $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
  275. }
  276. return;
  277. }
  278. });
  279. changeMargin();
  280. return;
  281. }
  282.  
  283. try {
  284. $(".online-partner .online-type:nth-child(1)").attr("data-ebassistant", "read");
  285. $(".online-partner .online-type:nth-child(2)").attr("data-ebassistant", "audio");
  286. } catch(e) {
  287. console.log(e);
  288. }
  289. var newStyle = `<style type="text/css" media="screen">.online-partner{flex-wrap:wrap;padding-top:5px;padding-bottom:5px}.online-type{flex-wrap:wrap}.online-read-or-audio{margin-top:5px;margin-bottom:5px}.online-partner .online-type:nth-child(1){margin-right:20px}.online-partner .online-type:last-child{margin-right:0}.online-partner .online-type:nth-child(2){padding-left:0}[data-ebassistant=read] div:last-child a{margin-right:0}</style>`;
  290. $("#content").append(newStyle);
  291.  
  292. var regexLinkedData = /<script type="application\/ld\+json">([\s\S]+?)<\/script>/gi;
  293. var linkedData = regexLinkedData.exec(document.documentElement.innerHTML)[1].trim();
  294. linkedData = JSON.parse(linkedData);
  295. console.log(linkedData);
  296. var isbn = linkedData.isbn;
  297. console.log(isbn);
  298. var title = linkedData.name;
  299. console.log(title);
  300. var subtitle = "";
  301. try {
  302. var regexSubtitle = /<span class="pl">\s*副标题:?<\/span>\s*:?\s*([\s\S]+?)<br\/?>/gi;
  303. subtitle = regexSubtitle.exec(document.documentElement.innerHTML.replace(/&nbsp;/gi, " "))[1].trim();
  304. } catch(e) {
  305. console.log(e);
  306. }
  307. console.log(subtitle);
  308. var authorStr = "";
  309. for (var i=0, j=linkedData.author.length; i<j; i++) {
  310. authorStr += linkedData.author[i].name + " " ;
  311. }
  312. var author = authorStr;
  313. console.log(author);
  314. var translator = "";
  315. try {
  316. var regexTranslator = /<span class="pl">\s*译者:?<\/span>\s*:?\s*<a[^>]+>([\s\S]+?)<\/a>/gi;
  317. translator = regexTranslator.exec(document.documentElement.innerHTML.replace(/&nbsp;/gi, " "))[1].trim();
  318. } catch(e) {
  319. console.log(e);
  320. }
  321. console.log(translator);
  322. var regexPublisher = /<span class="pl">\s*出版社:?<\/span>\s*:?\s*([\s\S]+?)<br\/?>/gi;
  323. var publisher = regexPublisher.exec(document.documentElement.innerHTML.replace(/&nbsp;/gi, " "))[1].trim();
  324. console.log(publisher);
  325.  
  326. queryWeread(isbn, title, subtitle, author, translator, publisher);
  327. queryAmazon2(isbn, title, subtitle, author, translator, publisher);
  328. queryDuokan2(isbn, title, subtitle, author, translator, publisher);
  329. queryXimalaya(isbn, title, subtitle, author, translator, publisher);
  330.  
  331. return;
  332. })();