PropertyguruAssist

one button click -> simplify propertyguru listing info for easily copy / paste

// ==UserScript==
// @name         PropertyguruAssist
// @namespace    http://tampermonkey.net/
// @version      0.9
// @description  one button click -> simplify propertyguru listing info for easily copy / paste
// @author       EnginePlus
// @match        https://*.propertyguru.com.sg/listing/*
// @grant        none
// @resource     customCSS https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css
// @require      https://gf.qytechs.cn/scripts/27254-clipboard-js/code/clipboardjs.js?version=174357
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js
// ==/UserScript==

(function() {
    'use strict';

    function getValueByLabel(items, label) {
        // 查找 item,优先匹配 label(即 value),如果找不到则匹配 icon
        var item = items.find(item => item.label === label || item.icon === label);
        return item ? item.value : "N.A."; // 返回 value,找不到则返回 "N.A."
    }

    // 获取JSON数据内容
    var url         = window.location.href;
    var jsonData    = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
    var propetyName = jsonData.props.pageProps.pageData.data.listingData.localizedTitle;
    //var propetyType = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Property Type");

    var tenureType  = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"calendar-days-o");
    var topYear     = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"document-with-lines-o");
    var totalUnits  = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"block-o");

    //var listDate 	  = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Listed On");
    //var listID 	  = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Listing ID");
    //var floorLevel  = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Floor Level");

    var bedNum 		= jsonData.props.pageProps.pageData.data.listingData.bedrooms;
    var bathNum 	= jsonData.props.pageProps.pageData.data.listingData.bathrooms;
    var floorSize   = jsonData.props.pageProps.pageData.data.listingData.floorArea;
    var price 	= jsonData.props.pageProps.pageData.data.propertyOverviewData.propertyInfo.price.amount;

    var agentName	= jsonData.props.pageProps.pageData.data.contactAgentData.contactAgentCard.agentInfoProps.agent.name;
    var phoneNumber = jsonData.props.pageProps.pageData.data.contactAgentData.contactAgentCard.contactActions[1].phoneNumber;
    var cleanPhoneNumber = phoneNumber.replace(/\D/g, ''); // 只保留数字
    var clipboardText = url + '\t'
                        + propetyName + ' [' + tenureType + ' / ' + topYear + ' / ' + totalUnits + '] '
                        + ', ' + bedNum + ' Bed, ' + bathNum + ' Bath, ' + floorSize + ' sqft, ' + price + '\t'
                        + agentName + ' ' + phoneNumber;

    $(document).ready(function() {
        // 创建复制按钮
        var copyButton = $('<button>', {
            text: " v0.9 | 点我复制 listing info ",
            style: "margin-left:5px;font-size:15px;background-color: #eeeee4",
            class: "btn"
        }).attr("data-clipboard-text", clipboardText);

        // 创建 WhatsApp 询问按钮
        var formattedPhoneNumber = cleanPhoneNumber.replace(/^65(\d{4})(\d{4})$/, '+65 $1 $2');
        var sendText = 'Hi+' + agentName.replace(/ /g, '+') + '+I+am+interested+in+your+listing+' + url;
        var callLink = $('<a>', {
            href: "https://api.whatsapp.com/send?phone=" + cleanPhoneNumber + "&text=" + sendText,
            target: "_blank",
            style: "margin-left:5px;font-size:15px;"
        }).append(
            $('<img>', { src: "https://ibit.ly/iTu8B" }) // 先添加图片
        ).append(
            ' ' + formattedPhoneNumber // 再添加电话号码(带空格,让它不贴着图片)
        );

        // 将按钮插入 DOM
        $("h1").append(copyButton).append(callLink);


        // 确保 Clipboard.js 绑定成功
        setTimeout(() => {
            new Clipboard('.btn');
        }, 1000);
    });

})();

QingJ © 2025

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