CSSBuy/Basetao Auto-Uploader

Automatically upload QC images from CSSBuy/Basetao to Imgur

目前為 2019-03-08 提交的版本,檢視 最新版本

// ==UserScript==
// @name         CSSBuy/Basetao Auto-Uploader
// @namespace    https://www.reddit.com/user/DeliciousLysergic/
// @version      0.1
// @description  Automatically upload QC images from CSSBuy/Basetao to Imgur
// @author       DeliciousLysergic
// @match        https://www.cssbuy.com/?go=m&name=orderlist*
// @match        https://www.basetao.net/m.php?name=orderlist*
// @grant        none
// @require      https://code.jquery.com/jquery-3.3.1.min.js
// ==/UserScript==

// MD5 function
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[14+(r+64>>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,d=v,h=m,g=f(g=f(g=f(g=f(g=c(g=c(g=c(g=c(g=u(g=u(g=u(g=u(g=o(g=o(g=o(g=o(g,v=o(v,m=o(m,l=o(l,g,v,m,n[e],7,-680876936),g,v,n[e+1],12,-389564586),l,g,n[e+2],17,606105819),m,l,n[e+3],22,-1044525330),v=o(v,m=o(m,l=o(l,g,v,m,n[e+4],7,-176418897),g,v,n[e+5],12,1200080426),l,g,n[e+6],17,-1473231341),m,l,n[e+7],22,-45705983),v=o(v,m=o(m,l=o(l,g,v,m,n[e+8],7,1770035416),g,v,n[e+9],12,-1958414417),l,g,n[e+10],17,-42063),m,l,n[e+11],22,-1990404162),v=o(v,m=o(m,l=o(l,g,v,m,n[e+12],7,1804603682),g,v,n[e+13],12,-40341101),l,g,n[e+14],17,-1502002290),m,l,n[e+15],22,1236535329),v=u(v,m=u(m,l=u(l,g,v,m,n[e+1],5,-165796510),g,v,n[e+6],9,-1069501632),l,g,n[e+11],14,643717713),m,l,n[e],20,-373897302),v=u(v,m=u(m,l=u(l,g,v,m,n[e+5],5,-701558691),g,v,n[e+10],9,38016083),l,g,n[e+15],14,-660478335),m,l,n[e+4],20,-405537848),v=u(v,m=u(m,l=u(l,g,v,m,n[e+9],5,568446438),g,v,n[e+14],9,-1019803690),l,g,n[e+3],14,-187363961),m,l,n[e+8],20,1163531501),v=u(v,m=u(m,l=u(l,g,v,m,n[e+13],5,-1444681467),g,v,n[e+2],9,-51403784),l,g,n[e+7],14,1735328473),m,l,n[e+12],20,-1926607734),v=c(v,m=c(m,l=c(l,g,v,m,n[e+5],4,-378558),g,v,n[e+8],11,-2022574463),l,g,n[e+11],16,1839030562),m,l,n[e+14],23,-35309556),v=c(v,m=c(m,l=c(l,g,v,m,n[e+1],4,-1530992060),g,v,n[e+4],11,1272893353),l,g,n[e+7],16,-155497632),m,l,n[e+10],23,-1094730640),v=c(v,m=c(m,l=c(l,g,v,m,n[e+13],4,681279174),g,v,n[e],11,-358537222),l,g,n[e+3],16,-722521979),m,l,n[e+6],23,76029189),v=c(v,m=c(m,l=c(l,g,v,m,n[e+9],4,-640364487),g,v,n[e+12],11,-421815835),l,g,n[e+15],16,530742520),m,l,n[e+2],23,-995338651),v=f(v,m=f(m,l=f(l,g,v,m,n[e],6,-198630844),g,v,n[e+7],10,1126891415),l,g,n[e+14],15,-1416354905),m,l,n[e+5],21,-57434055),v=f(v,m=f(m,l=f(l,g,v,m,n[e+12],6,1700485571),g,v,n[e+3],10,-1894986606),l,g,n[e+10],15,-1051523),m,l,n[e+1],21,-2054922799),v=f(v,m=f(m,l=f(l,g,v,m,n[e+8],6,1873313359),g,v,n[e+15],10,-30611744),l,g,n[e+6],15,-1560198380),m,l,n[e+13],21,1309151649),v=f(v,m=f(m,l=f(l,g,v,m,n[e+4],6,-145523070),g,v,n[e+11],10,-1120210379),l,g,n[e+2],15,718787259),m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,d),m=t(m,h);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function h(n){return a(i(d(n),8*n.length))}function l(n,t){var r,e,o=d(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),e+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
//# sourceMappingURL=md5.min.js.map

(function() {
    'use strict';
    // Used to store each item's data
    var items = {};

    var $ = window.jQuery;

    var clientIds = ["1ffdbfe5699ecec", "447a420679198a0", "956dd191d8320c9", "efb0b998924ef3c", "6f8eb75873d5f89", "9af4f2c84a12716"];
    var clientId = clientIds[Math.floor(Math.random()*clientIds.length)]
    var imageLoadingTime = 2000; // Time it takes for the image URLs to load in the iFrame in milliseconds

    var basetaoUrl = "https://www.basetao.net/"
    var siteCSS = window.location.hostname.includes("cssbuy"); // siteCSS = false (basetao), siteCSS = true (CSSBuy)

    var uploadButtonStyle = {
        true: "btn btn-sm btn-default margin-bottom-5",
        false: "btn btn-xs btn-default"
    }

    var usernameMD5 = "";
    var goatSupport = false;

    if(siteCSS)
    {
        console.log("No support for Goat QC available (lack of username).")
    }
    else
    {
        var username = $("a[title='User Center']")
        if (username.length)    
        {
            usernameMD5 = md5($.trim(username.text()))
            // Currently disabled
            goatSupport = false;
        }
    }

    function setDisabled(button, disabled) {
        if (disabled) 
        {
            button.attr("disabled", "disabled");
            button.text("Uploading...");
        }
        else
        {
            button.attr("disabled", null);
            button.text("Upload to Imgur");
        }
    }

    // https://stackoverflow.com/a/11818658
    function toFixed(num, fixed) {
        var re = new RegExp('^-?\\d+(?:\.\\d{0,' + (fixed || -1) + '})?');
        return num.toString().match(re)[0];
    }

    function createAlbum(orderId) {
        // Create album
        var albumHash = "";
        var albumId = "";

        items[orderId].infoLabel.text("Creating imgur album...");

        $.ajax({
            url: "https://api.imgur.com/3/album",
            method: "POST",
            headers: {"Authorization": "Client-ID " + clientId},
            data: {
                description: "Auto uploaded using CSSBuy/Basetao uploader.",
                privacy: 'hidden'
            },
            success: function(response) {
                albumHash = response.data.deletehash;
                albumId = response.data.id;

                // Upload images to imgur
                var image_count = 0;
                var total_images = items[orderId].qcImageUrls.length;
                var hashes = [];

                items[orderId].infoLabel.text("Uploading images to Imgur... (0/" + total_images + ")");

                items[orderId].qcImageUrls.forEach(function(url) {
                    // Create description
                    var description = "";
                    description = description + (items[orderId].itemUrl != "" ? "W2C: " + items[orderId].url + "\n": "")
                    description = description + (items[orderId].weight != "" ? "Weight: " + items[orderId].weight + " grams\n": "")
                    description = description + (items[orderId].price != "" ? "Price: ¥" + toFixed(items[orderId].price, 2) + "\n": "")
                    description = description + (items[orderId].sizing != "" ? "Item Info: " + items[orderId].sizing + "\n": "")

                    $.ajax({
                        url: "https://api.imgur.com/3/image",
                        method: "POST",
                        headers: {"Authorization": "Client-ID " + clientId},
                        data: {
                            image: url,
                            album: albumHash,
                            description: description
                        },
                        success: function(result) {
                            hashes.push(result.data.deletehash);
                            image_count += 1
                            
                            items[orderId].infoLabel.text("Uploading images to Imgur... (" + image_count + "/" + total_images + ")");

                            if(image_count == total_images) {
                                var albumUrl = "https://imgur.com/a/" + albumId;

                                console.log("All images uploaded!");
                                console.log("URL: " + albumUrl);

                                // Save result
                                window.localStorage["orderalbum_" + orderId] = albumId

                                // Update button / uploading status
                                items[orderId].uploading = false;
                                items[orderId].uploadButton.text("Uploaded!");

                                // Update progress label & link
                                updateProgressLabel(orderId, albumUrl)

                                // Upload to GOAT QC
                                if(goatSupport)
                                {
                                    $.ajax({
                                        url: "https://goat.pet/fr/qcdb.php",
                                        method: "POST",
                                        data: {
                                            userhash: usernameMD5,
                                            imgur: albumId,
                                            w2c: items[orderId].itemUrl,
                                            sizing: items[orderId].sizing
                                        }
                                    });
                                }
                            }
                        },
                        error: function(result)
                        {
                            result = $.parseJSON(result.responseText)
                            items[orderId].infoLabel.text("Failed to upload! Imgur Error: " + result.data.error.message);
                            items[orderId].uploading = false;
                            setDisabled(items[orderId].uploadButton, false)
                            console.log("Failed to upload:");
                            console.log(result.data.error)
                            return;
                        }
                    })
                });
            },
            error: function(result) {
                result = $.parseJSON(result.responseText)
                items[orderId].infoLabel.text("Failed to create album! Imgur Error: " + result.data.error.message);
                items[orderId].uploading = false;
                setDisabled(items[orderId].uploadButton, false)
                console.log("Failed to create album:");
                console.log(result.data.error)
            }
        })

    };

    window.collectPictures = function(orderId) {
        // Check that we are uploading this order atm
        // onload is called when iFrame is initialised
        if(!(orderId in items) || !items[orderId].uploading)
            return;

        // Wait a few seconds to ensure all the images have loaded...
        setTimeout(function() {
            // Check iFrame for all images
            // Add their urls to array
            var urls = [];

            items[orderId].iFrame.contents().find("img").each(function() {
                var url = $(this).attr("src");

                // Add basetao url as the qc images are relative, not absolute paths
                if (!siteCSS)
                    url = basetaoUrl + url

                urls.push(url);
            });

            items[orderId].qcImageUrls = urls

            if(!urls.length)
            {
                items[orderId].infoLabel.text("Found no QC images!")
            }
            else
            {
                items[orderId].infoLabel.text("Found " + urls.length + " QC pictures...")

                createAlbum(orderId);
            }
        }, imageLoadingTime);
    };

    window.copyToClipboard = function(text) {
        var $temp = $("<input>");
        $("body").append($temp);
        $temp.val(text).select();
        document.execCommand("copy");
        $temp.remove();
    }

    window.uploadItem = function(orderId) {
        // If we are already uploading this item, return
        if(items[orderId].uploading)
            return;

        // Update label
        clearLink(orderId)
        items[orderId].infoLabel.text("Getting QC pictures...");
        items[orderId].uploading = true;

        // Disable button
        setDisabled(items[orderId].uploadButton, true)

        // Update iFrame to get pictures
        items[orderId].iFrame.attr("src", items[orderId].qcUrl);
    }

    function clearLink(orderId)
    {
        items[orderId].copyButton.hide()
        items[orderId].infoLink.text("")
    }

    function updateProgressLabel(orderId, albumUrl)
    {
        items[orderId].infoLabel.text("Uploaded to ");
        items[orderId].infoLink.text(albumUrl);
        items[orderId].infoLink.attr("href", albumUrl);
        items[orderId].copyButton.show();
        items[orderId].copyButton.attr("onclick", "copyToClipboard('" + albumUrl + "')");
    }

    // Add buttons for each of the items
    var buttonSelector = "";
    if(siteCSS)
    {
        buttonSelector = ".oss-photo-view-button > a"
    }
    else
    {
        buttonSelector = "a:contains('View Photo')"
    }
    $(buttonSelector).each(function() {
        if(siteCSS)
        {
            var orderId = $(this).parent().attr("data-id");
        }
        else
        {
            var orderId = $("input", $(this).parent().parent().parent()).first().attr("id").substring(6)
        }

        // Create the "Upload to Imgur" button
        var qcUrl = $(this).attr("href");
        var uploadButton = $("<a>", {
            class: uploadButtonStyle[siteCSS], 
            text: "Upload to Imgur", 
            onclick: "uploadItem('" + orderId + "')",
            orderId: orderId, 
            style: "background: #1bb76e; border: 1px solid #1bb76e; color: white;"
        });
        uploadButton.appendTo($(this).parent());

        // Get parent TR element to retrieve item name & URL & create progress label
        var parentTableEntry = $(this).parentsUntil("tbody");
        var header = $("td div div:nth-child(2)", parentTableEntry.prev())

        // Create progress label
        var label = $("<span>", {
            text: "", 
            style: "font-weight: bold; margin-left: 40px;"
        });
        label.appendTo(header);

        // Create album link
        var link = $("<a>", {style:"margin-right: 10px;"});
        link.appendTo(header);

        // Create copy butotn
        var copyButton = $("<a>", {
            text: "Copy to Clipboard", 
            style: "padding: 3px; font-size: 1em; cursor: pointer;",
        })
        copyButton.hide()
        copyButton.appendTo(header)

        // Get item name/URL
        var itemLink = parentTableEntry.find("td:nth-child(2) a")
        var price = parentTableEntry.find("td:nth-child(3) span")
        var weight = parentTableEntry.find("td:nth-child(6) span")
        var sizing = "";

        if(siteCSS)
        {
            sizing = parentTableEntry.find("td:nth-child(2)").find("span:eq(1)").html().replace("<br>", " ")
        }
        else
        {
            var spans = parentTableEntry.find("td:nth-child(2) span")
            var color = spans.eq(0).html()
            var size = spans.eq(1).html()
            sizing = "color: " + color + " size: " + size
        }   

        // Create iframe
        var iFrame = $("<iframe>", {
            onload: "collectPictures('" + orderId + "')", 
            style: "display: none;"
        });
        iFrame.insertAfter($("form[name='search-form']"));

        // Create new item entry
        items[orderId] = {
            orderId: orderId,
            name: itemLink.text(),
            url: itemLink.attr("href"),
            price: price.text(),
            weight: weight.text(),
            sizing: sizing,
            qcUrl: qcUrl,
            qcImageUrls: [],
            copyButton: copyButton,
            infoLink: link,
            infoLabel: label,
            iFrame: iFrame,
            uploading: false,
            uploadButton: uploadButton
        }

        // Check whether they already have a album saved for this id
        if(("orderalbum_" + orderId) in window.localStorage)
        {
            updateProgressLabel(orderId, "https://imgur.com/a/" + window.localStorage["orderalbum_" + orderId])
        }

    });

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址