- // ==UserScript==
- // @name eBooks Assistant
- // @name:zh-CN 豆瓣读书助手
- // @namespace https://github.com/caspartse/eBooksAssistant
- // @version 0.8.1
- // @description eBooks Assistant for douban.com
- // @description:zh-CN 为豆瓣读书页面添加亚马逊Kindle、微信读书、多看、喜马拉雅等链接
- // @author Caspar Tse
- // @license MIT License
- // @supportURL https://github.com/caspartse/eBooksAssistant
- // @match https://book.douban.com/subject/*
- // @require https://cdn.bootcdn.net/ajax/libs/jquery/1.10.0/jquery.min.js
- // @connect amazon.cn
- // @connect 106.52.138.60
- // @grant GM_xmlhttpRequest
- // ==/UserScript==
-
-
- (function() {
- var version = '0.8.0';
-
- function queryAmazon1(isbn, title) {
- GM_xmlhttpRequest({
- method: "GET",
- url: "https://www.amazon.cn/s?__mk_zh_CN=亚马逊网站&i=digital-text&k=" + isbn + "&ref=nb_sb_noss&url=search-alias%3Ddigital-text",
- headers: {
- 'User-agent': window.navigator.userAgent,
- },
- onload: function(responseDetail) {
- var doc = responseDetail.responseText;
- var errorFlag = /("totalResultCount"\:0)|(在Kindle商店中未找到)|(Kindle商店中没有)/.exec(doc);
- if (!errorFlag) {
- var regexAmazonUrl = /href="(\S+keywords=\d+[^"]+)"/gi;
- var amazonUrl = "https://www.amazon.cn" + regexAmazonUrl.exec(doc)[1];
- amazonUrl = amazonUrl.replace(isbn, title);
- var partnerTemplate = '';
- if ($('.online-type[data-ebassistant="read"]').length) {
- partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div>';
- $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", amazonUrl));
- } else if ($('.online-type[data-ebassistant="audio"]').length) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div>';
- $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", amazonUrl));
- }
- else {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div> </div>';
- $("#link-report").after(partnerTemplate.replace("{templateUrl}", amazonUrl));
- }
- var regexAmazonPrice = /<span class="a-offscreen">¥([0-9\.]+)<\/span>/gi;
- var amazonPrice = regexAmazonPrice.exec(doc)[1];
- console.log(amazonPrice);
- var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.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"> 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>';
- if (amazonPrice == 0.00 ) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.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>';
- regexAmazonPrice = /<span dir="auto">或者¥([0-9\.]+)购买<\/span>/gi;
- amazonPrice = regexAmazonPrice.exec(doc)[1];
- }
- buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", amazonUrl);
- buyItemTemplate = buyItemTemplate.replace("{templatePrice}", amazonPrice);
- $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
- }
- return;
- }
- });
- return;
- }
-
- function queryAmazon2(isbn, title) {
- GM_xmlhttpRequest({
- method: "GET",
- url: "http://106.52.138.60:8081/amazon?isbn=" + isbn + "&title=" + title + '&version=' + version,
- headers: {
- 'User-agent': window.navigator.userAgent,
- },
- onload: function(responseDetail) {
- var result = JSON.parse(responseDetail.responseText);
- console.log(result);
- if (result.errmsg == '') {
- var amazonUrl = result.data.url;
- var amazonPrice = result.data.price;
- var ku = result.data.ku;
- var partnerTemplate = '';
- if ($('.online-type[data-ebassistant="read"]').length) {
- partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div>';
- $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", amazonUrl));
- } else if ($('.online-type[data-ebassistant="audio"]').length) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div>';
- $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", amazonUrl));
- }
- else {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_kindle.png" width="16" height="16"> <span>Kindle</span> </a> </div></div> </div>';
- $("#link-report").after(partnerTemplate.replace("{templateUrl}", amazonUrl));
- }
- var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.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"> 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>';
- if (ku === true) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.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>';
- }
- buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", amazonUrl);
- buyItemTemplate = buyItemTemplate.replace("{templatePrice}", amazonPrice);
- $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
- } else {
- console.log('call queryAmazon1.');
- queryAmazon1(isbn, title);
- }
- return;
- }
- });
- return;
- }
-
- function queryTuring(isbn) {
- GM_xmlhttpRequest({
- method: "GET",
- url: "http://106.52.138.60:8081/turing?isbn=" + isbn + '&version=' + version,
- headers: {
- 'User-agent': window.navigator.userAgent,
- },
- onload: function(responseDetail) {
- var result = JSON.parse(responseDetail.responseText);
- console.log(result);
- if (result.errmsg == '') {
- var turingUrl = result.data.url;
- var turingPrice = result.data.price;
- var partnerTemplate = '';
- if ($('.online-type[data-ebassistant="read"]').length) {
- partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.com/icon_turing.png" width="16" height="16"> <span>图灵社区</span> </a> </div>';
- $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", turingUrl));
- } else if ($('.online-type[data-ebassistant="audio"]').length) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_turing.png" width="16" height="16"> <span>图灵社区</span> </a> </div></div>';
- $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", turingUrl));
- }else {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_turing.png" width="16" height="16"> <span>图灵社区</span> </a> </div></div> </div>';
- $("#link-report").after(partnerTemplate.replace("{templateUrl}", turingUrl));
- }
- var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.com/icon_turing.png" style="border-radius: 50%; box-shadow: 0 0 1px 0 rgba(0,0,0,0.6);" width="16" height="16" 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> </li>';
- buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", turingUrl);
- buyItemTemplate = buyItemTemplate.replace("{templatePrice}", turingPrice);
- $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
- }
- return;
- }
- });
- return;
- }
-
-
- function queryXimalaya(isbn, title, author) {
- GM_xmlhttpRequest({
- method: "GET",
- url: "http://106.52.138.60:8081/ximalaya?isbn=" + isbn + "&title=" + title + "&author=" + author + '&version=' + version,
- headers: {
- 'User-agent': window.navigator.userAgent,
- },
- onload: function(responseDetail) {
- var result = JSON.parse(responseDetail.responseText);
- console.log(result);
- if (result.errmsg == '') {
- var ximalayaUrl = result.data.url;
- var partnerTemplate = '';
- if ($(".online-partner .online-type").length == 2) {
- partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.com/icon_ximalaya.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div>';
- $('.online-type[data-ebassistant="audio"]').append(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
- } else if ($(".online-partner .online-type").length == 1) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_ximalaya.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div></div>';
- $('.online-type[data-ebassistant="read"]').after(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
- } else {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_ximalaya.png" width="16" height="16"> <span>喜马拉雅</span> </a> </div></div> </div>';
- $("#link-report").after(partnerTemplate.replace("{templateUrl}", ximalayaUrl));
- }
- }
- return;
- }
- });
- return;
- }
-
- function queryDuokan(isbn) {
- GM_xmlhttpRequest({
- method: "GET",
- url: "http://106.52.138.60:8081/duokan?isbn=" + isbn + '&version=' + version,
- headers: {
- 'User-agent': window.navigator.userAgent,
- },
- onload: function(responseDetail) {
- var result = JSON.parse(responseDetail.responseText);
- console.log(result);
- if (result.errmsg == '') {
- var duokanUrl = result.data.url;
- var duokanPrice = result.data.price;
- var partnerTemplate = '';
- if ($('.online-type[data-ebassistant="read"]').length) {
- partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div>';
- $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", duokanUrl));
- } else if ($('.online-type[data-ebassistant="audio"]').length) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div></div>';
- $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", duokanUrl));
- } else {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_duokan.png" width="16" height="16"> <span>多看阅读</span> </a> </div></div> </div>';
- $("#link-report").after(partnerTemplate.replace("{templateUrl}", duokanUrl));
- }
- var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.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"> 多看阅读</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>';
- buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", duokanUrl);
- buyItemTemplate = buyItemTemplate.replace("{templatePrice}", duokanPrice);
- $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
- }
- return;
- }
- });
- return;
- }
-
-
- function queryWeread(isbn, title, author) {
- GM_xmlhttpRequest({
- method: "GET",
- url: "http://106.52.138.60:8081/weread?isbn=" + isbn + "&title=" + title + "&author=" + author + '&version=' + version,
- headers: {
- 'User-agent': window.navigator.userAgent,
- },
- onload: function(responseDetail) {
- var result = JSON.parse(responseDetail.responseText);
- console.log(result);
- if (result.errmsg == '') {
- var duokanUrl = result.data.url;
- var duokanPrice = result.data.price;
- var partnerTemplate = '';
- if ($('.online-type[data-ebassistant="read"]').length) {
- partnerTemplate = '<div class="online-read-or-audio"> <a class="impression_track_mod_buyinfo" target="_blank" href="{templateUrl}"> <img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.com/icon_weread.png" width="16" height="16"> <span>微信读书</span> </a> </div>';
- $('.online-type[data-ebassistant="read"]').append(partnerTemplate.replace("{templateUrl}", duokanUrl));
- } else if ($('.online-type[data-ebassistant="audio"]').length) {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_weread.png" width="16" height="16"> <span>微信读书</span> </a> </div></div>';
- $('.online-type[data-ebassistant="audio"]').before(partnerTemplate.replace("{templateUrl}", duokanUrl));
- } else {
- 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-1301990979.cos.ap-guangzhou.myqcloud.com/icon_weread.png" width="16" height="16"> <span>微信读书</span> </a> </div></div> </div>';
- $("#link-report").after(partnerTemplate.replace("{templateUrl}", duokanUrl));
- }
- var buyItemTemplate = '<li> <div class="cell price-btn-wrapper"> <div class="vendor-name"> <a target="_blank" href="{templateUrl}"> <span><img src="https://ebooks-assistant-1301990979.cos.ap-guangzhou.myqcloud.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"> 微信读书</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>';
- buyItemTemplate = buyItemTemplate.replaceAll("{templateUrl}", duokanUrl);
- buyItemTemplate = buyItemTemplate.replace("{templatePrice}", duokanPrice);
- $("#buyinfo ul:nth-child(2)").prepend(buyItemTemplate);
- }
- return;
- }
- });
- return;
- }
-
- try {
- $(".online-partner .online-type:nth-child(1)").attr("data-ebassistant", "read");
- $(".online-partner .online-type:nth-child(2)").attr("data-ebassistant", "audio");
- } catch(e) {
- console.log(e);
- }
- 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:nth-child(2){padding-left:0}[data-ebassistant=read] div:last-child a{margin-right:0}
- </style>`;
- $("#content").append(newStyle);
-
- var regexLinkedData = /<script type="application\/ld\+json">([\s\S]+?)<\/script>/g;
- var linkedData = regexLinkedData.exec(document.documentElement.innerHTML)[1].trim();
- linkedData = JSON.parse(linkedData);
- console.log(linkedData);
- var isbn = linkedData.isbn;
- console.log(isbn);
- var title = linkedData.name;
- console.log(title);
- var authorStr = "";
- for (var i=0, j=linkedData.author.length; i<j; i++) {
- authorStr += linkedData.author[i].name + " " ;
- }
- var author = authorStr;
- console.log(author);
-
- queryAmazon2(isbn, title);
- queryWeread(isbn, title, author);
- queryDuokan(isbn);
- queryXimalaya(isbn, title, author);
- queryTuring(isbn);
-
- return;
- })();