3D Warehouse 3D Model Downloader

A script that you can download models from 3D Warehouse (SketchUp Version 8,17,18,19,20,21,GBL,USDZ,Collada)

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        3D Warehouse 3D Model Downloader
// @name:pt     Baixe modelos do 3D Warehouse
// @name:pt-BR  Baixe modelos do 3D Warehouse
// @name:pt-PT  Baixe modelos do 3D Warehouse
// @name:es     Descargador de modelos 3D de la 3D Warehouse
// @name:cs     Sklad 3D Stahovač 3D modelů
// @name:fr     Téléchargeur de modèles 3D Entrepôt 3D
// @name:zh     3D 模型库 3D 模型下载器
// @name:ja     3D ギャラリー 3D モデル ダウンローダー
// @namespace    http://tampermonkey.net/
// @version      1.0.1
// @description  A script that you can download models from 3D Warehouse (SketchUp Version 8,17,18,19,20,21,GBL,USDZ,Collada)
// @description:pt      Um script que você pode baixar modelos do 3D Warehouse (SketchUp Versão 8,17,18,19,20,21,GBL,USDZ,Collada)
// @description:pt-BR   Um script que você pode baixar modelos do 3D Warehouse (SketchUp Versão 8,17,18,19,20,21,GBL,USDZ,Collada)
// @description:pt-PT   Um script que você pode baixar modelos do 3D Warehouse (SketchUp Versão 8,17,18,19,20,21,GBL,USDZ,Collada)
// @description:es      Un script que puedes descargar modelos desde 3D Warehouse (SketchUp Versión 8,17,18,19,20,21,GBL,USDZ,Collada)
// @description:cs      Skript, pomocí kterého si můžete stáhnout modely z 3D Warehouse (SketchUp verze 8,17,18,19,20,21,GBL,USDZ,Collada)
// @description:fr      Un script permettant de télécharger des modèles depuis 3D Warehouse (SketchUp Version 8,17,18,19,20,21,GBL,USDZ,Collada)
// @description:zh      可以从 3D 模型库下载模型的脚本(SketchUp 版本 8、17、18、19、20、21、GBL、USDZ、Collada)
// @description:ja      3D ギャラリーからモデルをダウンロードできるスクリプト (SketchUp バージョン 8,17,18,19,20,21,GBL,USDZ,Collada)
// @author       Zlajoyast
// @match        https://3dwarehouse.sketchup.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=sketchup.com
// @grant        none
// @license     MIT
// ==/UserScript==

(function () {
    'use strict';
    function getElementByXpath(path) {
        return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    }
    function appendbutton(elem, text, func) {
        let b = document.createElement("button");
        b.innerHTML = text;
        b.className = "btn primary-btn btn-primary";
        b.setAttribute("data-v-2b73d9af", "");
        b.onclick = func;
        elem.appendChild(b);
    }
    function Initialize_Script() {
        // Constroi a UI
        let div = getElementByXpath("//div[@class='details-header header']")
        if (div == undefined)
            return;
        // obtem  a inforamção do modelo
        let url = window.document.URL.split("/");
        let id = url[url.length - 2];
        fetched = true;
        fetch('https://3dwarehouse.sketchup.com/warehouse/v1.0/entities/' + id, {
            method: "GET",
            headers: { "Content-type": "application/json; charset=UTF-8" },
        }).then(response => response.text())
            .then(json => {
                let fetchinfo = JSON.parse(json);
                console.log(fetchinfo);
                if (fetchinfo.binaries.glb != undefined) {
                    appendbutton(div, "Download GBL File", () => {
                        window.open(fetchinfo.binaries.glb.contentUrl);
                    });
                }
                if (fetchinfo.binaries.usdz != undefined) {
                    appendbutton(div, "Download USDZ File", () => {
                        window.open(fetchinfo.binaries.usdz.contentUrl)
                    });
                }
                if (fetchinfo.binaries.s8 != undefined) {
                    appendbutton(div, "Download SketchUp 8 File", () => {
                        window.open(fetchinfo.binaries.s8.contentUrl)
                    });
                }
                if (fetchinfo.binaries.s17 != undefined) {
                    appendbutton(div, "Download SketchUp 17 File", () => {
                        window.open(fetchinfo.binaries.s17.contentUrl)
                    });
                }
                if (fetchinfo.binaries.s18 != undefined) {
                    appendbutton(div, "Download SketchUp 18 File", () => {
                        window.open(fetchinfo.binaries.s18.contentUrl)
                    });
                }
                if (fetchinfo.binaries.s19 != undefined) {
                    appendbutton(div, "Download SketchUp 19 File", () => {
                        window.open(fetchinfo.binaries.s19.contentUrl)
                    });
                }
                if (fetchinfo.binaries.s20 != undefined) {
                    appendbutton(div, "Download SketchUp 20 File", () => {
                        window.open(fetchinfo.binaries.s20.contentUrl)
                    });
                }
                if (fetchinfo.binaries.s21 != undefined) {
                    appendbutton(div, "Download SketchUp 21 File", () => {
                        window.open(fetchinfo.binaries.s21.contentUrl)
                    });
                }
                if (fetchinfo.binaries.zip != undefined) {
                    appendbutton(div, "Download Collada File", () => {
                        window.open(fetchinfo.binaries.zip.contentUrl)
                    });
                }
            });
    }
    var fetched = false;
    var prevurl;
    function Find_UI() {
        // verifica se a ui foi carregada
        setInterval(() => {
            if (getElementByXpath("//button[contains(@data-cy,'download')]") != undefined && fetched==false) {
                prevurl = new URL(window.document.URL).pathname;
                Initialize_Script();
            }
        }, 1000);
    }
    navigation.addEventListener('navigate', () => {
        let url = event.destination.url;
        console.log(url);
        if (prevurl != new URL(url).pathname)
        {
            fetched=false;
        }
    })
    Find_UI();
})();