// ==UserScript==
// @name 纯净网购省钱助手,自动查询淘宝、天猫、天猫国际、京东、京东国际、京东大药房等隐藏优惠券。简洁无广告,不花冤枉钱
// @description 浏览商品时,自动查询商品是否有隐藏优惠券,支持:京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、天猫超市(chaoshi.tmall.com)、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东大药房(yiyaojd.com)、阿里大药房(maiyao.liangxinyao.com)等,低侵入提示,长期维护更新~
// @icon data:image/png;base64,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
// @namespace coupon_honghaoer
// @version 1.0.3
// @author 洪皓儿
// @match *://*.taobao.com/*
// @match *://*.tmall.com/*
// @match *://chaoshi.detail.tmall.com/*
// @match *://*.tmall.hk/*
// @match *://*.liangxinyao.com/*
// @match *://*.jd.com/*
// @match *://*.jd.hk/*
// @match *://*.yiyaojd.com/*
// @exclude *://login.taobao.com/*
// @exclude *://uland.taobao.com/*
// @exclude *://pages.tmall.com/*
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @connect j.jiayoushichang.com
// @grant GM_info
// @grant GM_openInTab
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @run-at document-idle
// @charset UTF-8
// @license AGPL License
// @original-script https://greasyfork.org/zh-CN/scripts/398195
// @original-author 匆匆过客
// @original-license GPLA License
// ==/UserScript==
(function() {
'use strict';
const host = window.location.host;
const href = window.location.href;
const isDebug = true;
/**
* 公共功能
*/
function commonFunctionObject(){
this.selectParamterQueryUrl = function(text, tag) { //查询GET请求url中的参数
if(text.indexOf("?")!=-1){ //选取?后面的字符串,兼容window.location.search,前面的?不能去掉
var textArray = text.split("?");
text = "?"+textArray[textArray.length-1];
}
var t = new RegExp("(^|&)" + tag + "=([^&]*)(&|$)");
var a = text.substr(1).match(t);
if (a != null){
return a[2];
}
return "";
};
this.getEndHtmlIdByUrl = function(url) { //获得以html结束的ID
if(url.indexOf("?")!=-1){
url = url.split("?")[0]
}
if(url.indexOf("#")!=-1){
url = url.split("#")[0]
}
var splitText = url.split("/");
var idText = splitText[splitText.length-1];
idText = idText.replace(".html","");
return idText;
};
this.filterStr = function(str){ //去掉空格等
if(!str) return "";
str = str.replace(/\t/g,"");
str = str.replace(/\r/g,"");
str = str.replace(/\n/g,"");
str = str.replace(/\+/g,"%2B");//"+"
str = str.replace(/\&/g,"%26");//"&"
str = str.replace(/\#/g,"%23");//"#"
return encodeURIComponent(str)
};
}
const commonFuncObject = new commonFunctionObject();
function searchPageObject(){
this.intervalIsRunComplete = true; //定时任务一个循环是否完成
/**
* 收集列表的元素
*/
this.pickupSearchElements = function(){
var selectorElementList = new Array();
var url = location.href;
if(url.indexOf("://s.taobao.com/search")!=-1 || url.indexOf("://s.taobao.com/list")!=-1) { //淘宝搜索页面
selectorElementList.push({"element":".items >.item", "page":"taobao"});
}
else if (url.indexOf("://list.tmall.com/search_product.htm")!=-1 || url.indexOf("://list.tmall.com//search_product.htm")!=-1
|| url.indexOf("://list.tmall.com/coudan/search_product.htm")!=-1) { //天猫、天猫超市
selectorElementList.push({"element":".product", "page":"tmall_search"}); //天猫
selectorElementList.push({"element":".product", "page":"tmall_chaoshi"}); //天猫超市
}else if (url.indexOf("//list.tmall.hk/search_product")!=-1) { //天猫国际
selectorElementList.push({"element":"#J_ItemList .product", "page":"tmall_hk"});
}
else if(url.indexOf("maiyao.liangxinyao.com/search.htm")!=-1){ //阿里大药房
selectorElementList.push({"element":"#J_ShopSearchResult dl.item", "page":"ali_yao"});
}
else if (url.indexOf("//search.jd.com/Search")!=-1) { //京东搜索,京东药房
selectorElementList.push({"element":"#J_goodsList li.gl-item", "page":"jd"});
}else if(url.indexOf("//search.jd.hk/Search")!=-1){ //京东国际
selectorElementList.push({"element":"#plist li.gl-item", "page":"jd_hk"});
}
return selectorElementList;
};
/**
* 分析链接,提取id和平台信息
* @param {Object} url
* @param {Object} tag
*/
this.analysisUrl = function(url, tag){
if(!!url){
var id = commonFuncObject.selectParamterQueryUrl(url, tag);
if(!!id){
var platform = "taobao";
if(url.indexOf("jd.com")!=-1 || url.indexOf("yiyaojd.com")!=-1){
platform = "jd";
}else if(url.indexOf("taobao.com")!=-1 || url.indexOf("maiyao.liangxinyao.com")!=-1){
platform = "taobao";
}else if(url.indexOf("tmall.com")!=-1 || url.indexOf("tmall.hk")!=-1){
platform = "tmall";
}
return {"id":id, "platform":platform};
}
}
return null;
};
/**
* 为所有的商品创建提示
* @param {Object} elementData
*/
this.createAllElementHtml = function(elementData){
let that = this;
$(elementData.element).each(function(){ //遍历所有的商品框
that.createOneElementHtml($(this), elementData);
});
that.intervalIsRunComplete = true;
};
/**
* 为商品box添加有券提醒
* @param {Object} $element 每一个商品box
* @param {Object} elementData id and page
*/
this.createOneElementHtml = function($element, elementData){ //查询到每个商品list
if($element.attr("completebox")){ //当存在时,说明已经处理过了
return;
}
$element.css("position","relative");
var page = elementData.page;
var goodsDetailUrl = null;
if(page==="taobao"){
goodsDetailUrl = $element.find("a[id^='J_Itemlist_TLink_']").attr("href");
}else if(page==="ali_yao"){
goodsDetailUrl = $element.find(".J_TGoldData").attr("href");
}else if(page==="tmall_search"){
goodsDetailUrl = $element.find("a.productImg").attr("href");
}else if(page==="tmall_hk"){
goodsDetailUrl = $element.find("a.productImg").attr("href");
}else if(page==="tmall_chaoshi"){
goodsDetailUrl = $element.find("div.product-img").find("a").attr("href");
}else if(page==="jd"){
goodsDetailUrl = $element.find("div.p-img").find("a").attr("href");
}else if(page==="jd_hk"){
goodsDetailUrl = $element.find("div.p-img").find("a").attr("href");
}
if(!goodsDetailUrl){
return;
}
if(isDebug) console.log(goodsDetailUrl);
var analysisData = null;
if(page==="jd" || page==="jd_hk"){
var jdId = commonFuncObject.getEndHtmlIdByUrl(goodsDetailUrl);
if(!!jdId) analysisData = {"id":jdId, "platform":"jd"};
}else{
analysisData = this.analysisUrl(goodsDetailUrl, "id");
}
if(!!analysisData){ //一切数据校验完毕,此处查询是否有券
let requestUrl = "http://j.jiayoushichang.com/api/ebusiness/coupon/exist/"+analysisData.platform+"?id="+analysisData.id;
GM_xmlhttpRequest({
url: requestUrl,
method: "GET",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
onload: function(response) {
var status = response.status;
if(status==200||status=='200'){
var responseText = response.responseText;
if(!!responseText){
try{
var serverResponseJson = JSON.parse(responseText);
var tip = serverResponseJson.tip;
if(!!tip){
$element.append(tip);
}
}catch(e){
console.log(e);
}
}
}
}
});
}
$element.attr("completebox","true");
};
/**
* 开始查询
*/
this.startQueryList = function(){
let selectorElementList = this.pickupSearchElements();
let that = this;
setInterval(()=>{
if(that.intervalIsRunComplete){
selectorElementList.forEach((elementData)=>{
if(!!elementData){
this.createAllElementHtml(elementData);
}
});
}
}, 400);
};
};
try{
(new searchPageObject()).startQueryList();
}catch(e){}
/**
* 详情页领券,查券功能
*/
function queryCoupon(){
this.isRun = function(){
var urls=["detail.tmall.com", "detail.tmall.hk", "item.taobao.com", "chaoshi.detail.tmall.com", "item.jd.com", "item.yiyaojd.com", "npcitem.jd.hk"];
for(var i=0; i<urls.length;i++){
if(window.location.host.indexOf(urls[i])!=-1){
return true;
}
}
return false;
}
this.getPlatform = function(){
let host = window.location.host;
let platform = "";
if(host.indexOf("detail.tmall")!=-1){
platform = "tmall";
}else if(host.indexOf("item.taobao.com")!=-1){
platform = "taobao";
}else if(host.indexOf("item.jd.com")!=-1 || host.indexOf("item.yiyaojd.com")!=-1 || host.indexOf("npcitem.jd.hk")!=-1){
platform = "jd";
}
return platform;
};
this.getGoodsData = function(platform){
var goodsId = "";
var goodsName = "";
var href = window.location.href;
if(platform=="taobao"){
goodsId = commonFuncObject.selectParamterQueryUrl(window.location.search, "id");
goodsName=$(".tb-main-title").text();
}else if(platform=="tmall"){
goodsId = commonFuncObject.selectParamterQueryUrl(window.location.search, "id");
goodsName=$(".tb-detail-hd").text();
}else if(platform=="jd"){
goodsName=$("div.sku-name").text();
goodsId = commonFuncObject.getEndHtmlIdByUrl(href);
}
var data={"goodsId":goodsId, "goodsName":commonFuncObject.filterStr(goodsName)}
return data;
};
this.createCouponHtml = function(platform, goodsId, goodsName){
if(!platform || !goodsId) return;
var goodsCouponUrl = "http://j.jiayoushichang.com/api/ebusiness/find?n=7&";
goodsCouponUrl = goodsCouponUrl+"p="+platform+"&i="+goodsId+"&q="+goodsName;
GM_xmlhttpRequest({
url: goodsCouponUrl,
method: "GET",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
onload: function(response) {
var status = response.status;
if(status==200||status=='200'){
var serverResponseJson = JSON.parse(response.responseText);
var data = serverResponseJson.data;
if(!data || data==="null"){
return;
}
var cssText = data.css;
var htmlText = data.html;
var handler = data.handler;
if(!cssText || !htmlText || !handler){
return;
}
$("body").prepend("<style>"+cssText+"</style>");
var handlers = handler.split("@");
for(var i=0; i<handlers.length; i++){
var $handler = $(""+handlers[i]+"");
if(platform=="taobao"){
$("#J_isku").prepend(htmlText);
}else if(platform=="tmall"){
$(".tb-key").prepend(htmlText);
}else if(platform=="jd"){
$(".p-choose-wrap").prepend(htmlText);
}
break;
}
}
}
});
};
this.start = function(){
if(this.isRun()){
var platform = this.getPlatform();
if(!!platform){
var goodsData = this.getGoodsData(platform);
this.createCouponHtml(platform, goodsData.goodsId, goodsData.goodsName);
}
}
};
}
try{
(new queryCoupon()).start();
}catch(e){}
})();