Greasy Fork

Greasy Fork is available in English.

豆瓣读书资源助手

在豆瓣读书页面展示资源站下载链接

目前为 2018-08-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         豆瓣读书资源助手
// @namespace    yueye
// @version      1.1.1
// @description  在豆瓣读书页面展示资源站下载链接
// @author       yueye
// @match        https://book.douban.com/subject/*
// @require      http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
// @grant        GM.xmlHttpRequest
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function () {

  var website = [{
    site: '我的小书屋',
    searchLink: 'http://mebook.cc/?s=',
    selector: '.list li',
    itemSelector: ' .content h2 a',
    state: -1
  },{
    site: 'sobooks',
    searchLink: 'https://sobooks.cc/search/',
    selector: '.cardlist .card',
    itemSelector: ' .shop-item h3 a',
    state: -1
  }]

  function getSearchPage (searchLink, title, selector, itemSelector) {
    return new Promise(function(resolve, reject) {
      GM_xmlhttpRequest({
        method: 'GET',
        url: searchLink + title,
        onload: function (res) {
          var state = -1
          var doc = (new DOMParser()).parseFromString(res.responseText, 'text/html');
          var list_length = doc.querySelectorAll(selector).length
          if (list_length > 0) {
            var bookTitle = doc.querySelectorAll(selector + itemSelector)[0].innerText || ''
            state = bookTitle.indexOf(title)
          }
          resolve(state)
        }
      })
    })
  }

  /*
  function getDownloadLink (title, website) {
    return new Promise(function(resolve, reject) {
      GM.xmlHttpRequest({
        method: 'POST',
        url: 'http://127.0.0.1:3000/index?keywords=' + title,
        data: website,
        onload: function(response) {
          console.log(JSON.parse(response.responseText))
          resolve(JSON.parse(response.responseText))
        }
      })
    })
  }
  */

  function showInDoubanPage (list, title) {
    var html = [
      '<div class="gray_ad" id="doubanBookDL">',
        '<div id="buyinfo-printed" class="no-border">',
          '<h2>'+ title +'资源下载&nbsp;·&nbsp;·&nbsp;·&nbsp;·&nbsp;·&nbsp;·</h2>',
          '<ul class="bs noline">',
          ...list,
          '</ul>',
        '</div>',
      '</div>',
    ].join('')
    var sidebar = document.querySelector('.aside')
    sidebar.innerHTML = html + sidebar.innerHTML
  }

  if (/book.douban.com/.test(location.href)) {
    /*
    getDownloadLink(title, website).then(res => {
      console.log('请求完成')
    })
    */
    (async function (){
        var arr = []
        var title = document.querySelector('h1 span').innerText
        for (let i = 0; i < website.length; i++) {
            const res = await getSearchPage(website[i].searchLink, title, website[i].selector, website[i].itemSelector)
            website[i].state = res
            var html = [
                '<li>',
                '<a target="_blank" href="javascript:;" style="display:inline-block;width:100px;">'+ website[i].site +'</a>',
                '<a target="_blank" class="buylink-price" href="'+ (website[i].state >=0 ? website[i].searchLink + title : 'javascript:;') +
                '" style="display:inline-block;color:#fff;background-color:#ffc160;height:22px;margin-left:50px;padding:0 12px;border-radius:2px;font-size:12px;line-height:22px;text-align:center;">'+
                (website[i].state >= 0 ? '下载' : '暂无资源')
                +'</a>',
                '</li>',
            ]
            arr = arr.concat(html)
        }
        showInDoubanPage(arr, title)
    })()
  }

})()