PropertyguruAssist

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

  1. // ==UserScript==
  2. // @name PropertyguruAssist
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.92
  5. // @description one button click -> simplify propertyguru listing info for easily copy / paste
  6. // @author EnginePlus
  7. // @match https://*.propertyguru.com.sg/listing/*
  8. // @match https://*.commercialguru.com.sg/listing/*
  9. // @match https://*.propertyguru.com.my/property-listing/*
  10. // @grant none
  11. // @resource customCSS https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css
  12. // @require https://greasyfork.org/scripts/27254-clipboard-js/code/clipboardjs.js?version=174357
  13. // @require https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.slim.min.js
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. function getValueByLabel(items, label) {
  20. // 查找 item,优先匹配 label(即 value),如果找不到则匹配 icon
  21. var item = items.find(item => item.label === label || item.icon === label);
  22. return item ? item.value : "N.A."; // 返回 value,找不到则返回 "N.A."
  23. }
  24.  
  25. // 获取JSON数据内容
  26. var url = window.location.href;
  27. var jsonData = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
  28. var propetyName = jsonData.props.pageProps.pageData.data.listingData.localizedTitle;
  29. //var propetyType = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Property Type");
  30.  
  31. var tenureType = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"calendar-days-o");
  32. var topYear = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"document-with-lines-o");
  33. var totalUnits = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"block-o");
  34.  
  35. //var listDate = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Listed On");
  36. //var listID = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Listing ID");
  37. //var floorLevel = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Floor Level");
  38.  
  39. var bedNum = jsonData.props.pageProps.pageData.data.listingData.bedrooms;
  40. var bathNum = jsonData.props.pageProps.pageData.data.listingData.bathrooms;
  41. var floorSize = jsonData.props.pageProps.pageData.data.listingData.floorArea;
  42. var price = jsonData.props.pageProps.pageData.data.propertyOverviewData.propertyInfo.price.amount;
  43.  
  44. var agentName = jsonData.props.pageProps.pageData.data.contactAgentData.contactAgentCard.agentInfoProps.agent.name;
  45. var phoneNumber = jsonData.props.pageProps.pageData.data.listingData.agent.mobile;
  46. //jsonData.props.pageProps.pageData.data.contactAgentData.contactAgentCard.contactActions[1].phoneNumber;
  47. //alert(phoneNumber);
  48. var cleanPhoneNumber = phoneNumber.replace(/\D/g, ''); // 只保留数字
  49.  
  50. var clipboardText = url + '\t'
  51. + propetyName + ' [' + tenureType + ' / ' + topYear + ' / ' + totalUnits + '] '
  52. + ', ' + bedNum + ' Bed, ' + bathNum + ' Bath, ' + floorSize + ' sqft, ' + price + '\t'
  53. + agentName + ' ' + phoneNumber;
  54.  
  55.  
  56. $(document).ready(function() {
  57. // 创建复制按钮
  58. var copyButton = $('<button>', {
  59. text: " v0.91 | 点我复制 listing info ",
  60. style: "margin-left:3px;font-size:13px;background-color: #eeeee4",
  61. class: "btn"
  62. }).attr("data-clipboard-text", clipboardText);
  63.  
  64. // 创建 WhatsApp 询问按钮
  65. var formattedPhoneNumber = cleanPhoneNumber.replace(/^65(\d{4})(\d{4})$/, '+65 $1 $2');
  66. //alert(formattedPhoneNumber);
  67. var sendText = 'Hi+' + agentName.replace(/ /g, '+') + '+I+am+interested+in+your+listing+' + url;
  68. var callLink = $('<a>', {
  69. href: "https://api.whatsapp.com/send?phone=" + cleanPhoneNumber + "&text=" + sendText,
  70. target: "_blank",
  71. style: "margin-left:5px;font-size:15px;"
  72. }).append(
  73. $('<img>', { src: "https://ibit.ly/iTu8B" }) // 先添加图片
  74. ).append(
  75. ' ' + formattedPhoneNumber // 再添加电话号码(带空格,让它不贴着图片)
  76. );
  77.  
  78. // 将按钮插入 DOM
  79. $("h1").append('<p></p>').append(copyButton).append(callLink);
  80.  
  81.  
  82. // 确保 Clipboard.js 绑定成功
  83. setTimeout(() => {
  84. new Clipboard('.btn');
  85. }, 1000);
  86. });
  87.  
  88. })();