Greasy Fork

Amazonを基点に好みに合う漫画を探しやすくする

Amazonの本の詳細画面に書名や著者名で類似漫画検索、Web漫画アンテナ、試し読み、Calilを検索するリンクを追加します

目前为 2018-04-23 提交的版本。查看 最新版本

// ==UserScript==
// @name         Amazonを基点に好みに合う漫画を探しやすくする
// @description  Amazonの本の詳細画面に書名や著者名で類似漫画検索、Web漫画アンテナ、試し読み、Calilを検索するリンクを追加します
// @version      0.1
// @match  *://ruijianime.com/comic/ruiji/ruiji.php?title=*
// @match  *://ruijianime.com/comic/keyword/*
// @match  *://www.amazon.co.jp/*
// @match  *://webcomics.jp/*
// @grant none
// @namespace https://greasyfork.org/users/181558
// ==/UserScript==

(function() {

  var calilpref = localStorage.getItem("calilpref") || "tokyo";
  var webmangaantena = '<a href="http://webcomics.jp/search?q=***">Web漫画アンテナ</a>';
  var webmangaantenasakusha = '<a href="http://webcomics.jp/search?q=***">Web漫画アンテナ</a>';
  var tameshiyomi = '<a href="https://duckduckgo.com/?q=!ducky+***%20%E8%A9%A6%E3%81%97%E8%AA%AD%E3%81%BF%20-dokidokivisual.com%20-intitle:%E3%81%BE%E3%81%A8%E3%82%81">試し読み</a>';
  var ruijimanga = '<a href="http://ruijianime.com/comic/ruiji/ruiji.php?title=***">類似漫画検索</a>';
  var caariru = '<a href="https://calil.jp/local/search?csid=' + calilpref + '&q=***">Calil</a>';

  //Shift+LでCalil都道府県変更
  document.addEventListener("keydown", function(e) {
      if (/input|textarea/i.test(e.target.tagName) || location.href.indexOf("amazon") == -1) return;
      if (e.shiftKey && String.fromCharCode(e.which).toLowerCase() == "l") {
        calilpref = window.prompt("calil検索する図書館の都道府県名を入力してください(例:tokyo)\r\n(参照)https://calil.jp/local/", calilpref) || "tokyo";
        localStorage.setItem("calilpref", calilpref);
        location.reload();
      }
    },
    false);

  addLinks();
  if (location.href.match(/webcomics|ruijianime/)) document.addEventListener("AutoPagerize_DOMNodeInserted", addLinks);
  return;

  //実際にリンクを付ける
  function addLinks() {

    //前回つけたリンクがあれば除去する
    var ele = eleget("//span[@class='ruijiSc']");
    for (var i = ele.snapshotLength; i--;) {
      ele.snapshotItem(i).parentNode.removeChild(ele.snapshotItem(i));
    }

    if (location.href.indexOf("webcomics") != -1) {
      ele2links('//div[@class="entry-title"]/a', "", "", ruijimanga);
      ele2links('//div[@class="entry-title"]/a', "", "", tameshiyomi);
      ele2links('//div[@class="comic-title"]/h2/a', "", "", tameshiyomi);
      ele2links('//div[@class="comic-title"]/h2/a', "", "", ruijimanga);
      ele2links("//div[@class='comic-author']", "", "", webmangaantenasakusha, "", "作者: ")
    }

    if (location.href.indexOf("ruiji") != -1) {
      ele2links("//div[@class='origin_one']/h2/a", "", "", webmangaantena);
      ele2links("//div[@class='origin_one']/h2/a", "", "", tameshiyomi);
      ele2links("//div[@class='sm_one']/h2/a", "", "", webmangaantena);
      ele2links("//div[@class='sm_one']/h2/a", "", "", tameshiyomi);
      ele2links("//div[@class='sm_one']/h2/a", "", "", ruijimanga); // ,"float: right;background-color:#ffffff;"
      ele2links('//p[@class="date ruiji_date"]/span[@class="no_matched"]', "", "", webmangaantenasakusha, "");
      ele2links('//p[@class="date ruiji_date"]/span[@class="matched"]', "", "", webmangaantenasakusha, "");
      ele2links('//p[@class="date ruiji_date"]/a', "", "", webmangaantenasakusha, "");
      ele2links("//div[@id='wrap']/article/div[@class='sm_one_tag_search easy_tag']/h2/a", "", "", webmangaantena);
      ele2links("//div[@id='wrap']/article/div[@class='sm_one_tag_search easy_tag']/h2/a", "", "", tameshiyomi);
      ele2links("//div[@id='wrap']/article/div[@class='sm_one_tag_search easy_tag']/h2/a", "", "", ruijimanga); //, "float: right;background-color:#ffffff;"
    }

    if (location.href.indexOf("amazon") != -1) {
      /*      var cate = eleget0('//select[@id="searchDropdownBox"]');
            if (cate.value == "search-alias=digital-text" || cate.value == "search-alias=stripbooks") { //カテゴリが本かkindleなら
      */
      var cate = eleget0('//span[@class="nav-a-content"]').innerText;
      if (cate == "本" || cate == "Kindleストア") { //カテゴリが本かkindleなら
        var amagen =
          eleget0("//div[@id='wayfinding-breadcrumbs_feature_div']/ul").innerText +
          eleget0("//span[@id='productTitle']").innerText +
          eleget0("//span[@id='ebooksProductTitle']").innerText +
          eleget0('//span[@class="a-size-medium a-color-secondary a-text-normal"]').innerText;
        if (amagen) {
          if (amagen.indexOf("コミック") != -1) {
            ele2links("//span[@id='productTitle']", " ", "comic", webmangaantena);
            ele2links("//span[@id='productTitle']", " ", "comic", ruijimanga);
            ele2links("//span[@id='productTitle']", " ", "comic", tameshiyomi);
            ele2links("//span[@id='ebooksProductTitle']", " ", "comic", webmangaantena);
            ele2links("//span[@id='ebooksProductTitle']", " ", "comic", ruijimanga);
            ele2links("//span[@id='ebooksProductTitle']", " ", "comic", tameshiyomi);
            ele2links('//span[@class="author notFaded"]/span/a[@class="a-link-normal contributorNameID"]', "", "comic", webmangaantena, "");
            ele2links('//span[@class="author notFaded"]/a[@class="a-link-normal"]', "", "comic", webmangaantenasakusha, "")
            ele2links("//span[@id='ebooksProductTitle']", " ", "comic", caariru);
            ele2links("//span[@id='productTitle']", " ", "comic", caariru);
          } else {
            ele2links("//span[@id='ebooksProductTitle']", " ", "", caariru);
            ele2links("//span[@id='productTitle']", " ", "", caariru);
          }
          ele2links('//span[@class="author notFaded"]/span/a[@class="a-link-normal contributorNameID"]', "", "calilAuthor", caariru, "");
          ele2links('//span[@class="author notFaded"]/a[@class="a-link-normal"]', "", "calilAuthor", caariru, "");

          // 著者名の下にも出版社名を書き写す
          var ele = eleget0("//li[(b/text()='出版社:')]");
          var choshanoshita = eleget0('//div[@id="bylineInfo"]');
          var pub = document.createElement("div");
          if (pub && ele) {
            pub.innerHTML = ele.innerHTML.replace(/\<b\>.*\<\/b\>/, "").replace(/\(.*\)/, "");
            choshanoshita.appendChild(pub);
          }
        }
      }
    }

    // 「新しいタブで開く」指定を外す
    var ele = eleget('//a[@target="_blank"]');
    for (var i = ele.snapshotLength; i--;) ele.snapshotItem(i).removeAttribute("target");
    return;
  }

  function eleget0(xpath) {
    var ele = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    return ele.snapshotLength > 0 ? ele.snapshotItem(0) : "";
  }

  function eleget(xpath) {
    return document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  }

  function ele2links(xpath, cutchar1, cutchar2, url, styleadd, cutchar3) {
    styleadd = styleadd === undefined ? "float: right;" : styleadd;
    var ele = eleget(xpath);

    for (var i = ele.snapshotLength; i--;) {
      var text = ele.snapshotItem(i).innerText;
      if (cutchar3 != "")
        if (text.indexOf(cutchar3) != -1) text = text.substr(text.indexOf(cutchar3) + cutchar3.length);
      if (cutchar1 != "") {
        var splitPos = text.search(cutchar2 == "comic" ? /-|-|―|~|:|:|\(|(| \d| \d|(\s| )([0-9]|[0-9])/ : /―|~|\(|(/);
        if (splitPos != -1) text = text.substr(0, splitPos);
      }

      if (url == ruijimanga) text = text.replace("!", "!").replace("?", "?");

      if (url == caariru) text = text.replace(/[\s :]/g, "");
      //    if (cutchar2=="calilAuthor"){ text=text.replace(/[\s :]/g,"");}
      //    if (cutchar2=="calilAuthor"){ text=text.replace(/\s(?=[^ -~。-゚\t])/,"");}
      text = text.trim();
      var link = document.createElement("span");
      var url2 = url.replace("***", text);
      var bgcol = "background-color:#c9e9ff;";
      link.setAttribute("style", "font-size:15px; font-weight:bold; margin:2px;  text-decoration:none; text-align:center; padding:1px 7px 1px; border-radius:5px; " + bgcol + styleadd);
      link.setAttribute("title", text);
      link.setAttribute("class", "ruijiSc");
      link.innerHTML = url2;
      ele.snapshotItem(i).parentNode.appendChild(link);
    }
    return;
  }
})();