Help
RSS
API
Feed
Maltego
Contact
Domain > bazime.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2019-12-01
171.22.26.108
(
ClassC
)
2026-02-11
47.238.244.219
(
ClassC
)
Port 80
HTTP/1.1 200 OKServer: nginx/1.24.0 (Ubuntu)Date: Wed, 11 Feb 2026 00:34:16 GMTContent-Type: text/htmlContent-Length: 40990Last-Modified: Wed, 17 Dec 2025 10:10:13 GMTConnection: keep-aliveETag: 69428185-a01eAccept-Ranges: bytes !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>BaziMe - Online Fortune Telling | Future Prediction/title> meta namedescription contentBaziMe offers professional online fortune telling services. Enter your birthday and gender to explore your destiny and future possibilities.> meta namekeywords contentonline fortune telling, future prediction, psychic reading online, how to know my future, will I find love this year> !-- Multilingual handling --> link relalternate hreflangen hrefhttps://bazime.cn/en/ /> link relalternate hreflangzh-CN hrefhttps://bazime.cn/ /> link relicon typeimage/svg+xml href./image/destiny_logo.svg> !-- Structured data markup --> script typeapplication/ld+json> { @context: https://schema.org, @type: ProfessionalService, name: BaziMe - Online Fortune Telling, serviceType: Fortune telling, Future prediction, Destiny reading, availableLanguage: en, zh-CN, url: https://bazime.cn/en/, description: Professional online fortune telling services to explore your destiny and future, logo: https://bazime.cn/image/destiny_logo.svg, sameAs: https://facebook.com/bazime, https://twitter.com/bazime } /script> !-- External resources --> link relstylesheet hrefdist/tailwind.css> link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css> !-- link relstylesheet hrefdist/flatpickr.min.css> --> script srchttps://cdn.jsdelivr.net/npm/flatpickr>/script> !-- script srcdist/flatpickr.js>/script> --> !-- script srchttps://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/en.js>/script> --> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css> !-- link relstylesheet hrefdist/font-awesome.min.css> --> script srchttps://cdn.jsdelivr.net/npm/marked@4.0.18/marked.min.js>/script> !-- script srcdist/marked.min.js>/script> --> !-- Custom styles --> style> .content-auto { content-visibility: auto; } .text-shadow { text-shadow: 0 2px 4px rgba(0,0,0,0.1); } .text-shadow-lg { text-shadow: 0 4px 8px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08); } .bg-gradient-mystic { background: linear-gradient(135deg, #6b21a8 0%, #4c1d95 100%); } .transition-custom { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .loading-spinner { border-top-color: #6b21a8; animation: spinner 1s linear infinite; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .logo { max-width: 100%; height: auto; } @keyframes spinner { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .person-section { border: 1px solid #e2e8f0; border-radius: 0.5rem; padding: 1rem; margin-bottom: 1rem; } .role-selection { display: none; } .selected-person { background-color: #e0e7ff; border-color: #4f46e5; } /style> !-- Browser cache control --> meta http-equivCache-Control contentpublic, max-age31536000> /head>body classbg-gray-50 font-sans text-gray-800 overflow-x-hidden> !-- Navigation bar --> header classfixed w-full bg-white/90 backdrop-blur-sm shadow-sm z-50 transition-custom> div classcontainer mx-auto px-4 py-3 flex justify-between items-center> a href# classflex items-center space-x-2> img src./image/destiny_logo.svg alt classw-5 logo> span classfont-bold text-xl text-primary>Destiny Compass/span> /a> nav> ul classflex space-x-4> li>a hrefindex.html classtext-primary font-medium>Home/a>/li> li>a hrefbaziguide.html classtext-gray-600 hover:text-primary transition-custom>BaZi Guide/a>/li> /ul> /nav> /div> /header> !-- Hero section --> section classrelative pt-32 pb-20 md:pt-40 md:pb-8 overflow-hidden bg-gradient-mystic text-white> !-- Background decorations --> div classabsolute inset-0 opacity-10> div classabsolute top-10 left-10 w-40 h-40 rounded-full bg-white blur-3xl>/div> div classabsolute bottom-10 right-10 w-60 h-60 rounded-full bg-pink-300 blur-3xl>/div> div classabsolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 w-80 h-80 rounded-full bg-purple-300 blur-3xl>/div> /div> div classcontainer mx-auto px-4 relative z-10> div classmax-w-4xl mx-auto text-center mb-12> h1 classtext-clamp(2rem,5vw,3.5rem) font-bold leading-tight text-shadow-lg mb-6> Discover Your Destiny /h1> p classtext-clamp(1.1rem,2vw,1.3rem) text-light/90 mb-8> Want to try fortune telling? Enter your birthday and gender to reveal future possibilities /p> /div> !-- Input form --> div classmax-w-4xl mx-auto bg-white rounded-xl shadow-2xl p-6 md:p-8 transform transition-all duration-300 hover:shadow-primary/20 hover:-translate-y-1> form idfortune-form classspace-y-6> !-- Person selection --> div classmb-6> label classblock text-gray-700 font-medium mb-2>Analytical Model/label> div classflex space-x-4 rolegroup aria-labelledbypeople-group> span idpeople-group classsr-only>Please select Analytical Model/span> label forone-person classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idone-person namepeople-count value1 classw-5 h-5 text-primary focus:ring-primary checked> span classtext-gray-700>Personal luck/span> /label> label fortwo-people classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idtwo-people namepeople-count value2 classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Dual Complementarity/span> /label> /div> /div> !-- First person section --> div idperson1-section classperson-section bg-blue-50> h3 classtext-lg font-semibold text-gray-700 mb-4>My Information/h3> div classgrid grid-cols-1 md:grid-cols-2 gap-6> div> label forperson1-birth-date classblock text-gray-700 font-medium mb-2>Birthday/label> input typetext idperson1-birth-date nameperson1-birth-date value classw-full px-4 py-3 rounded-lg border border-neutral-300 focus:ring-2 focus:ring-primary/50 focus:border-primary outline-none transition-custom text-gray-800 placeholder-gray-500 placeholderSelect your birth date> p classtext-xs text-gray-500 mt-1>Well automatically convert to Chinese lunar calendar/p> /div> div> label classblock text-gray-700 font-medium mb-2>Gender/label> div classflex space-x-4 rolegroup aria-labelledbyperson1-gender-group> span idperson1-gender-group classsr-only>Please select your gender/span> label forperson1-male classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson1-male nameperson1-gender valuemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Male/span> /label> label forperson1-female classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson1-female nameperson1-gender valuefemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Female/span> /label> /div> p idperson1-gender-error classtext-xs text-red-500 mt-1 hidden>Please select gender/p> /div> /div> /div> !-- Second person section --> div idperson2-section classperson-section bg-green-50 styledisplay:none;> h3 classtext-lg font-semibold text-gray-700 mb-4>The Other Partys Information/h3> div classgrid grid-cols-1 md:grid-cols-2 gap-6> div> label forperson2-birth-date classblock text-gray-700 font-medium mb-2>Birthday/label> input typetext idperson2-birth-date nameperson2-birth-date value classw-full px-4 py-3 rounded-lg border border-neutral-300 focus:ring-2 focus:ring-primary/50 focus:border-primary outline-none transition-custom text-gray-800 placeholder-gray-500 placeholderSelect your birth date> p classtext-xs text-gray-500 mt-1>Well automatically convert to Chinese lunar calendar/p> /div> div> label classblock text-gray-700 font-medium mb-2>Gender/label> div classflex space-x-4 rolegroup aria-labelledbyperson2-gender-group> span idperson2-gender-group classsr-only>Please fill in the other partys gender/span> label forperson2-male classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson2-male nameperson2-gender valuemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Male/span> /label> label forperson2-female classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson2-female nameperson2-gender valuefemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Female/span> /label> /div> p idperson2-gender-error classtext-xs text-red-500 mt-1 hidden>Please select gender/p> /div> /div> /div> div> label foragreement classflex items-start> input typecheckbox idagreement nameagreement classmt-1 h-5 w-5 text-primary focus:ring-primary border-neutral-300 rounded> span classml-2 text-sm text-neutral-600>I understand that this reading is for informational purposes only and should not be used as a substitute for professional advice./span> /label> p idagreement-error classtext-xs text-red-500 mt-1 hidden>Please agree to the terms/p> /div> button typesubmit classw-full bg-primary hover:bg-primary/90 text-white font-semibold py-3 px-6 rounded-lg transition-custom transform hover:scale-1.02 active:scale-0.98 flex items-center justify-center space-x-2> span>Start Fortune Telling/span> i classfa fa-arrow-right>/i> /button> /form> !-- Statistics --> div classmt-6 text-center> p classtext-gray-600> Over span classfont-bold text-primary iduser-count>0/span> people worldwide have tried it, exclaiming its amazingly accurate! /p> /div> /div> !-- Results section - Hidden by default --> div idresults-section classmax-w-4xl mx-auto mt-8 bg-white rounded-xl shadow-lg p-6 md:p-8 hidden> div classcontainer mx-auto px-4> div classmax-w-4xl mx-auto> div idloading-indicator classtext-center py-16 hidden> div classw-16 h-16 border-4 border-gray-200 rounded-full loading-spinner mx-auto mb-6>/div> h3 classtext-xl font-semibold text-gray-700>Calculating your fortune.../h3> p classtext-gray-500 mt-2>Were revealing the mysteries of your destiny,Since there are over a thousand people currently conducting online analyses, this process may take a few minutes.../p> /div> div idresults-content classhidden> h2 classtext-clamp(1.8rem,4vw,2.5rem) font-bold text-gray-800 mb-8 text-center>Your Fortune Reading/h2> div classbg-gray-50 rounded-xl p-8 shadow-sm> div idfortune-results classprose max-w-none text-gray-700> !-- Results will be inserted here --> /div> /div> div classtext-center p-6> button idnew-reading classbg-neutral-700 hover:bg-neutral-800 text-white font-medium py-3 px-8 rounded-lg shadow-md hover:shadow-lg transition-custom> Get Another Reading /button> /div> /div> div iderror-message classhidden text-center py-16> div classtext-red-500 text-5xl mb-4> i classfa fa-exclamation-circle>/i> /div> h3 classtext-xl font-semibold text-gray-700> Failed to generate your reading/h3> p classtext-gray-500 mt-2>Please try again later/p> button idretry-button classmt-6 bg-primary hover:bg-primary/90 text-white font-semibold py-2 px-6 rounded-lg transition-custom> Try Again /button> /div> /div> /div> /div> !-- Dropdown arrow --> div classtext-center mt-12 animate-bounce> a href#introduction classtext-white/80 hover:text-white transition-custom> i classfa fa-angle-down text-3xl>/i> /a> /div> /div> /section> !-- User testimonials --> section classpy-16 md:py-24 bg-white> div classcontainer mx-auto px-4> div classmax-w-3xl mx-auto text-center mb-16> h2 classtext-clamp(1.8rem,4vw,2.5rem) font-bold text-gray-800 mb-6>Real User Feedback/h2> p classtext-gray-600 text-lg>See what others say about our service/p> /div> div classgrid grid-cols-1 md:grid-cols-3 gap-8 max-w-5xl mx-auto> div classbg-gray-50 rounded-xl p-6 shadow-sm> div classflex items-center mb-4> div classtext-yellow-400 flex> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> /div> /div> p classtext-gray-700 mb-4>Incredibly accurate! The fortune telling accurately predicted a career change three months later, allowing me to prepare in advance./p> div classflex items-center> img srchttps://picsum.photos/id/1001/100/100 altUser avatar classw-10 h-10 rounded-full object-cover mr-3> span classtext-gray-600 font-medium>Mr. Zhang/span> /div> /div> div classbg-gray-50 rounded-xl p-6 shadow-sm> div classflex items-center mb-4> div classtext-yellow-400 flex> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> /div> /div> p classtext-gray-700 mb-4>This service helped me better understand my life path. The insights provided were truly eye-opening and helpful for important decisions./p> div classflex items-center> img srchttps://picsum.photos/id/1002/100/100 altUser avatar classw-10 h-10 rounded-full object-cover mr-3> span classtext-gray-600 font-medium>Ms. Lee/span> /div> /div> div classbg-gray-50 rounded-xl p-6 shadow-sm> div classflex items-center mb-4> div classtext-yellow-400 flex> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star-half-o>/i> /div> /div> p classtext-gray-700 mb-4>I was skeptical at first, but the accuracy of the reading amazed me. Its become a valuable guide for understanding potential future outcomes./p> div classflex items-center> img srchttps://picsum.photos/id/1003/100/100 altUser avatar classw-10 h-10 rounded-full object-cover mr-3> span classtext-gray-600 font-medium>Mr. Wang/span> /div> /div> /div> /div> /section> !-- Footer --> footer classbg-dark text-white pt-16 pb-8> div classcontainer mx-auto px-4> div classgrid grid-cols-1 md:grid-cols-3 gap-8 mb-12> div> div classflex items-center space-x-2 mb-6> img src./image/destiny_white.svg alt classw-5 logo> span classfont-bold text-xl>Destiny Compass/span> /div> p classtext-gray-400 mb-6>A professional online fortune telling platform revealing the mysteries of destiny and providing accurate life guidance./p> div classflex space-x-4> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-facebook>/i>/a> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-twitter>/i>/a> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-instagram>/i>/a> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-youtube>/i>/a> /div> /div> div> h4 classtext-lg font-semibold mb-6>Quick Links/h4> ul classspace-y-3> li>a hrefindex.html classtext-neutral-300 hover:text-white transition-custom>Home/a>/li> li>a hrefbaziguide.html classtext-neutral-300 hover:text-white transition-custom>BaZi Guide/a>/li> !-- li>a href# classtext-neutral-300 hover:text-white transition-custom>Services/a>/li> li>a href# classtext-neutral-300 hover:text-white transition-custom>About Us/a>/li> li>a href# classtext-neutral-300 hover:text-white transition-custom>Contact/a>/li> --> /ul> /div> div> h4 classtext-lg font-semibold mb-6>Contact Us/h4> ul classspace-y-3> li classflex items-start > i class fa fa-envelope mt-1 mr-3 text-white>/i> span classtext-neutral-300>sanshanvip@gmail.com/span> /li> /ul> /div> /div> div classborder-t border-gray-800 pt-8> div classflex flex-col md:flex-row justify-between items-center> p classtext-gray-500 text-sm mb-4 md:mb-0>© 2025 BaziMe. All rights reserved./p> /div> /div> /div> /footer> script> // 初始化flatpickr日期选择器 document.addEventListener(DOMContentLoaded, function() { flatpickr(#person1-birth-date, { locale: en, // 英语本地化 dateFormat: F j, Y, // 日期格式 maxDate: today, // 最大日期为今天 allowInput: false, // 禁止手动输入 clickOpens: true, // 点击打开日期选择器 disableMobile: true, // 禁用移动端原生选择器,确保在移动端也使用英文界面 altFormat: F j, Y, onChange: function(selectedDates, dateStr, instance) { // 更新输入框的值 document.getElementById(person1-birth-date).value dateStr; } }); flatpickr(#person2-birth-date, { locale: en, // 英语本地化 dateFormat: F j, Y, // 日期格式 maxDate: today, // 最大日期为今天 allowInput: false, // 禁止手动输入 clickOpens: true, // 点击打开日期选择器 disableMobile: true, // 禁用移动端原生选择器,确保在移动端也使用英文界面 altFormat: F j, Y, onChange: function(selectedDates, dateStr, instance) { // 更新输入框的值 document.getElementById(person2-birth-date).value dateStr; } }); }); // 切换人数显示 document.querySelectorAll(inputnamepeople-count).forEach(radio > { radio.addEventListener(change, function() { const person2Section document.getElementById(person2-section); if (this.value 2) { person2Section.style.display block; } else { person2Section.style.display none; } }); }); // Navbar scroll effect window.addEventListener(scroll, () > { const header document.querySelector(header); if (window.scrollY > 50) { header.classList.add(py-2, shadow); header.classList.remove(py-3); } else { header.classList.add(py-3); header.classList.remove(py-2, shadow); } }); // Number animation effect function animateValue(id, start, end, duration) { const obj document.getElementById(id); if (!obj) return; let startTimestamp null; const step (timestamp) > { if (!startTimestamp) startTimestamp timestamp; const progress Math.min((timestamp - startTimestamp) / duration, 1); const value Math.floor(progress * (end - start) + start); // Format number with thousand separators obj.innerText value.toLocaleString(); if (progress 1) { window.requestAnimationFrame(step); } }; window.requestAnimationFrame(step); } // Fetch user count from API or use default async function fetchUserCount() { try { // In a real implementation, this would fetch from an API // For now, well use a realistic default value const defaultUserCount 1287543; return defaultUserCount; } catch (error) { console.error(Failed to fetch user count:, error); // Fallback to default value return 1287543; } } // Trigger animation when element enters viewport const observer new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { fetchUserCount().then(count > { animateValue(user-count, 0, count, 2000); }); observer.unobserve(entry.target); } }); }, { threshold: 0.5 }); const userCountElement document.getElementById(user-count); if (userCountElement) { observer.observe(userCountElement); } // Form submission handling const fortuneForm document.getElementById(fortune-form); const resultsSection document.getElementById(results-section); const loadingIndicator document.getElementById(loading-indicator); const resultsContent document.getElementById(results-content); const fortuneResults document.getElementById(fortune-results); const errorMessage document.getElementById(error-message); if (fortuneForm) { fortuneForm.addEventListener(submit, (e) > { e.preventDefault(); validateAndSubmitForm(); }); } // Retry button functionality document.getElementById(retry-button).addEventListener(click, () > { validateAndSubmitForm(); }); // New reading button functionality document.getElementById(new-reading).addEventListener(click, () > { // Reset form document.getElementById(fortune-form).reset(); // Hide results section resultsSection.classList.add(hidden); // Reset any error messages document.getElementById(person1-gender-error).classList.add(hidden); document.getElementById(person2-gender-error).classList.add(hidden); document.getElementById(agreement-error).classList.add(hidden); // Reset display of sections document.getElementById(person2-section).style.display none; document.querySelectorAll(inputnamepeople-count)0.checked true; }); // Form validation and submission function validateAndSubmitForm() { const peopleCount document.querySelector(inputnamepeople-count:checked).value; const person1Birthday document.getElementById(person1-birth-date).value; const person1Gender document.querySelector(inputnameperson1-gender:checked); const agreement document.getElementById(agreement).checked; const person1GenderError document.getElementById(person1-gender-error); const agreementError document.getElementById(agreement-error); const person2Birthday document.getElementById(person2-birth-date).value; const person2Gender document.querySelector(inputnameperson2-gender:checked); // Reset errors person1GenderError.classList.add(hidden); agreementError.classList.add(hidden); // Validate form fields let isValid true; if (!person1Birthday) { isValid false; // Create a temporary error message for birthday const birthdayError document.createElement(p); birthdayError.id person1-birthday-error; birthdayError.className text-xs text-red-500 mt-1; birthdayError.textContent Please select your birthday; const birthDateInput document.getElementById(person1-birth-date); // Remove any existing error message const existingError document.getElementById(person1-birthday-error); if (existingError) existingError.remove(); // Insert error message after the birth date input birthDateInput.parentNode.insertBefore(birthdayError, birthDateInput.nextSibling); // Remove error message after 3 seconds setTimeout(() > { if (birthdayError.parentNode) { birthdayError.remove(); } }, 3000); // Also remove error when user interacts with the date picker document.getElementById(person1-birth-date).addEventListener(click, function() { if (birthdayError.parentNode) { birthdayError.remove(); } }, { once: true }); } if (!person1Gender) { isValid false; person1GenderError.classList.remove(hidden); } if (!agreement) { isValid false; agreementError.classList.remove(hidden); } // Validate second person if needed if (peopleCount 2) { const person2GenderError document.getElementById(person2-gender-error); person2GenderError.classList.add(hidden); if (!person2Birthday) { isValid false; // Create a temporary error message for birthday const birthdayError document.createElement(p); birthdayError.id person2-birthday-error; birthdayError.className text-xs text-red-500 mt-1; birthdayError.textContent Please select birthday for Other half; const birthDateInput document.getElementById(person2-birth-date); // Remove any existing error message const existingError document.getElementById(person2-birthday-error); if (existingError) existingError.remove(); // Insert error message after the birth date input birthDateInput.parentNode.insertBefore(birthdayError, birthDateInput.nextSibling); // Remove error message after 3 seconds setTimeout(() > { if (birthdayError.parentNode) { birthdayError.remove(); } }, 3000); // Also remove error when user interacts with the date picker document.getElementById(person2-birth-date).addEventListener(click, function() { if (birthdayError.parentNode) { birthdayError.remove(); } }, { once: true }); } if (!person2Gender) { isValid false; person2GenderError.classList.remove(hidden); } } if (isValid) { // Show results section resultsSection.classList.remove(hidden); // Scroll to results section resultsSection.scrollIntoView({ behavior: smooth, block: start }); // Show loading indicator loadingIndicator.classList.remove(hidden); resultsContent.classList.add(hidden); errorMessage.classList.add(hidden); // Prepare data based on number of people if (peopleCount 1) { // Single person reading generateResults(person1Birthday, person1Gender.value); } else { generateResultsForTwo({ person1: { birthDate: person1Birthday, gender: person1Gender.value }, person2: { birthDate: person2Birthday, gender: person2Gender.value } }); } } } // Generate and display results for single person async function generateResults(birthday, gender) { try { // Create a timeout promise for 90 seconds const timeoutPromise new Promise((_, reject) > { setTimeout(() > reject(new Error(Request timeout after 90 seconds)), 95000); }); // Create the fetch request promise const fetchPromise fetch(https://bazime.com/api/chat, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ birthDate: birthday, gender: gender }) }); // Race between fetch and timeout - whichever resolves/rejects first const response await Promise.race(fetchPromise, timeoutPromise); if (!response.ok) { throw new Error(`API request failed: ${response.statusText}`); } // Parse API response const result await response.json(); // Hide loading and show results loadingIndicator.classList.add(hidden); // Handle the result properly if (result) { // Try to get the prediction content from various possible fields let predictionContent result; // If we got a string, use it directly; otherwise convert to JSON string if (typeof predictionContent ! string) { predictionContent JSON.stringify(predictionContent); } const personalityContent marked.parse(predictionContent); fortuneResults.innerHTML ` p classmb-4>strong>Birthday:/strong> ${birthday}/p> p classmb-6>strong>Gender:/strong> ${gender male ? Male : Female}/p> div classprose>${personalityContent}/div> `; resultsContent.classList.remove(hidden); } else { throw new Error(Invalid response format from server); } } catch (error) { console.error(Error calling Service API:, error); // Show error message loadingIndicator.classList.add(hidden); errorMessage.classList.remove(hidden); // Display detailed error for debugging // const errorDetails document.createElement(p); // errorDetails.className text-red-500 mt-4 text-sm; // errorDetails.textContent `Error: ${error.message}`; // errorMessage.appendChild(errorDetails); } } // Generate and display results for two people async function generateResultsForTwo(data) { try { // Create a timeout promise for 90 seconds const timeoutPromise new Promise((_, reject) > { setTimeout(() > reject(new Error(Request timeout after 90 seconds)), 95000); }); // Create the fetch request promise const fetchPromise fetch(https://bazime.com/api/bothChat, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ person1: { birthDate: data.person1.birthDate, gender: data.person1.gender }, person2: { birthDate: data.person2.birthDate, gender: data.person2.gender } }) }); // Race between fetch and timeout - whichever resolves/rejects first const response await Promise.race(fetchPromise, timeoutPromise); if (!response.ok) { throw new Error(`API request failed: ${response.statusText}`); } // Parse API response const result await response.json(); // Hide loading and show results loadingIndicator.classList.add(hidden); // Handle the result properly if (result) { // Try to get the prediction content from various possible fields let predictionContent result; // If we got a string, use it directly; otherwise convert to JSON string if (typeof predictionContent ! string) { predictionContent JSON.stringify(predictionContent); } const personalityContent marked.parse(predictionContent); fortuneResults.innerHTML ` h3 classtext-xl font-bold mb-4>Compatibility Reading/h3> p classmb-2>strong>My Information:/strong> ${data.person1.birthDate}, ${data.person1.gender male ? Male : Female}/p> p classmb-6>strong>The Other Partys Information:/strong> ${data.person2.birthDate}, ${data.person2.gender male ? Male : Female}/p> div classprose>${personalityContent}/div> `; resultsContent.classList.remove(hidden); } else { throw new Error(Invalid response format from server); } } catch (error) { console.error(Error calling Service API:, error); // Show error message loadingIndicator.classList.add(hidden); errorMessage.classList.remove(hidden); // Display detailed error for debugging // const errorDetails document.createElement(p); // errorDetails.className text-red-500 mt-4 text-sm; // errorDetails.textContent `Error: ${error.message}`; // errorMessage.appendChild(errorDetails); } } // Smooth scrolling document.querySelectorAll(ahref^#).forEach(anchor > { anchor.addEventListener(click, function (e) { e.preventDefault(); document.querySelector(this.getAttribute(href)).scrollIntoView({ behavior: smooth }); }); }); /script> /body> /html>
Port 443
HTTP/1.1 200 OKServer: nginx/1.24.0 (Ubuntu)Date: Wed, 11 Feb 2026 00:34:17 GMTContent-Type: text/htmlContent-Length: 40990Last-Modified: Wed, 17 Dec 2025 10:10:13 GMTConnection: keep-aliveETag: 69428185-a01eAccept-Ranges: bytes !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>BaziMe - Online Fortune Telling | Future Prediction/title> meta namedescription contentBaziMe offers professional online fortune telling services. Enter your birthday and gender to explore your destiny and future possibilities.> meta namekeywords contentonline fortune telling, future prediction, psychic reading online, how to know my future, will I find love this year> !-- Multilingual handling --> link relalternate hreflangen hrefhttps://bazime.cn/en/ /> link relalternate hreflangzh-CN hrefhttps://bazime.cn/ /> link relicon typeimage/svg+xml href./image/destiny_logo.svg> !-- Structured data markup --> script typeapplication/ld+json> { @context: https://schema.org, @type: ProfessionalService, name: BaziMe - Online Fortune Telling, serviceType: Fortune telling, Future prediction, Destiny reading, availableLanguage: en, zh-CN, url: https://bazime.cn/en/, description: Professional online fortune telling services to explore your destiny and future, logo: https://bazime.cn/image/destiny_logo.svg, sameAs: https://facebook.com/bazime, https://twitter.com/bazime } /script> !-- External resources --> link relstylesheet hrefdist/tailwind.css> link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css> !-- link relstylesheet hrefdist/flatpickr.min.css> --> script srchttps://cdn.jsdelivr.net/npm/flatpickr>/script> !-- script srcdist/flatpickr.js>/script> --> !-- script srchttps://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/en.js>/script> --> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css> !-- link relstylesheet hrefdist/font-awesome.min.css> --> script srchttps://cdn.jsdelivr.net/npm/marked@4.0.18/marked.min.js>/script> !-- script srcdist/marked.min.js>/script> --> !-- Custom styles --> style> .content-auto { content-visibility: auto; } .text-shadow { text-shadow: 0 2px 4px rgba(0,0,0,0.1); } .text-shadow-lg { text-shadow: 0 4px 8px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.08); } .bg-gradient-mystic { background: linear-gradient(135deg, #6b21a8 0%, #4c1d95 100%); } .transition-custom { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .loading-spinner { border-top-color: #6b21a8; animation: spinner 1s linear infinite; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .logo { max-width: 100%; height: auto; } @keyframes spinner { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .person-section { border: 1px solid #e2e8f0; border-radius: 0.5rem; padding: 1rem; margin-bottom: 1rem; } .role-selection { display: none; } .selected-person { background-color: #e0e7ff; border-color: #4f46e5; } /style> !-- Browser cache control --> meta http-equivCache-Control contentpublic, max-age31536000> /head>body classbg-gray-50 font-sans text-gray-800 overflow-x-hidden> !-- Navigation bar --> header classfixed w-full bg-white/90 backdrop-blur-sm shadow-sm z-50 transition-custom> div classcontainer mx-auto px-4 py-3 flex justify-between items-center> a href# classflex items-center space-x-2> img src./image/destiny_logo.svg alt classw-5 logo> span classfont-bold text-xl text-primary>Destiny Compass/span> /a> nav> ul classflex space-x-4> li>a hrefindex.html classtext-primary font-medium>Home/a>/li> li>a hrefbaziguide.html classtext-gray-600 hover:text-primary transition-custom>BaZi Guide/a>/li> /ul> /nav> /div> /header> !-- Hero section --> section classrelative pt-32 pb-20 md:pt-40 md:pb-8 overflow-hidden bg-gradient-mystic text-white> !-- Background decorations --> div classabsolute inset-0 opacity-10> div classabsolute top-10 left-10 w-40 h-40 rounded-full bg-white blur-3xl>/div> div classabsolute bottom-10 right-10 w-60 h-60 rounded-full bg-pink-300 blur-3xl>/div> div classabsolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 w-80 h-80 rounded-full bg-purple-300 blur-3xl>/div> /div> div classcontainer mx-auto px-4 relative z-10> div classmax-w-4xl mx-auto text-center mb-12> h1 classtext-clamp(2rem,5vw,3.5rem) font-bold leading-tight text-shadow-lg mb-6> Discover Your Destiny /h1> p classtext-clamp(1.1rem,2vw,1.3rem) text-light/90 mb-8> Want to try fortune telling? Enter your birthday and gender to reveal future possibilities /p> /div> !-- Input form --> div classmax-w-4xl mx-auto bg-white rounded-xl shadow-2xl p-6 md:p-8 transform transition-all duration-300 hover:shadow-primary/20 hover:-translate-y-1> form idfortune-form classspace-y-6> !-- Person selection --> div classmb-6> label classblock text-gray-700 font-medium mb-2>Analytical Model/label> div classflex space-x-4 rolegroup aria-labelledbypeople-group> span idpeople-group classsr-only>Please select Analytical Model/span> label forone-person classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idone-person namepeople-count value1 classw-5 h-5 text-primary focus:ring-primary checked> span classtext-gray-700>Personal luck/span> /label> label fortwo-people classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idtwo-people namepeople-count value2 classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Dual Complementarity/span> /label> /div> /div> !-- First person section --> div idperson1-section classperson-section bg-blue-50> h3 classtext-lg font-semibold text-gray-700 mb-4>My Information/h3> div classgrid grid-cols-1 md:grid-cols-2 gap-6> div> label forperson1-birth-date classblock text-gray-700 font-medium mb-2>Birthday/label> input typetext idperson1-birth-date nameperson1-birth-date value classw-full px-4 py-3 rounded-lg border border-neutral-300 focus:ring-2 focus:ring-primary/50 focus:border-primary outline-none transition-custom text-gray-800 placeholder-gray-500 placeholderSelect your birth date> p classtext-xs text-gray-500 mt-1>Well automatically convert to Chinese lunar calendar/p> /div> div> label classblock text-gray-700 font-medium mb-2>Gender/label> div classflex space-x-4 rolegroup aria-labelledbyperson1-gender-group> span idperson1-gender-group classsr-only>Please select your gender/span> label forperson1-male classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson1-male nameperson1-gender valuemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Male/span> /label> label forperson1-female classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson1-female nameperson1-gender valuefemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Female/span> /label> /div> p idperson1-gender-error classtext-xs text-red-500 mt-1 hidden>Please select gender/p> /div> /div> /div> !-- Second person section --> div idperson2-section classperson-section bg-green-50 styledisplay:none;> h3 classtext-lg font-semibold text-gray-700 mb-4>The Other Partys Information/h3> div classgrid grid-cols-1 md:grid-cols-2 gap-6> div> label forperson2-birth-date classblock text-gray-700 font-medium mb-2>Birthday/label> input typetext idperson2-birth-date nameperson2-birth-date value classw-full px-4 py-3 rounded-lg border border-neutral-300 focus:ring-2 focus:ring-primary/50 focus:border-primary outline-none transition-custom text-gray-800 placeholder-gray-500 placeholderSelect your birth date> p classtext-xs text-gray-500 mt-1>Well automatically convert to Chinese lunar calendar/p> /div> div> label classblock text-gray-700 font-medium mb-2>Gender/label> div classflex space-x-4 rolegroup aria-labelledbyperson2-gender-group> span idperson2-gender-group classsr-only>Please fill in the other partys gender/span> label forperson2-male classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson2-male nameperson2-gender valuemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Male/span> /label> label forperson2-female classflex items-center space-x-2 flex-1 cursor-pointer> input typeradio idperson2-female nameperson2-gender valuefemale classw-5 h-5 text-primary focus:ring-primary> span classtext-gray-700>Female/span> /label> /div> p idperson2-gender-error classtext-xs text-red-500 mt-1 hidden>Please select gender/p> /div> /div> /div> div> label foragreement classflex items-start> input typecheckbox idagreement nameagreement classmt-1 h-5 w-5 text-primary focus:ring-primary border-neutral-300 rounded> span classml-2 text-sm text-neutral-600>I understand that this reading is for informational purposes only and should not be used as a substitute for professional advice./span> /label> p idagreement-error classtext-xs text-red-500 mt-1 hidden>Please agree to the terms/p> /div> button typesubmit classw-full bg-primary hover:bg-primary/90 text-white font-semibold py-3 px-6 rounded-lg transition-custom transform hover:scale-1.02 active:scale-0.98 flex items-center justify-center space-x-2> span>Start Fortune Telling/span> i classfa fa-arrow-right>/i> /button> /form> !-- Statistics --> div classmt-6 text-center> p classtext-gray-600> Over span classfont-bold text-primary iduser-count>0/span> people worldwide have tried it, exclaiming its amazingly accurate! /p> /div> /div> !-- Results section - Hidden by default --> div idresults-section classmax-w-4xl mx-auto mt-8 bg-white rounded-xl shadow-lg p-6 md:p-8 hidden> div classcontainer mx-auto px-4> div classmax-w-4xl mx-auto> div idloading-indicator classtext-center py-16 hidden> div classw-16 h-16 border-4 border-gray-200 rounded-full loading-spinner mx-auto mb-6>/div> h3 classtext-xl font-semibold text-gray-700>Calculating your fortune.../h3> p classtext-gray-500 mt-2>Were revealing the mysteries of your destiny,Since there are over a thousand people currently conducting online analyses, this process may take a few minutes.../p> /div> div idresults-content classhidden> h2 classtext-clamp(1.8rem,4vw,2.5rem) font-bold text-gray-800 mb-8 text-center>Your Fortune Reading/h2> div classbg-gray-50 rounded-xl p-8 shadow-sm> div idfortune-results classprose max-w-none text-gray-700> !-- Results will be inserted here --> /div> /div> div classtext-center p-6> button idnew-reading classbg-neutral-700 hover:bg-neutral-800 text-white font-medium py-3 px-8 rounded-lg shadow-md hover:shadow-lg transition-custom> Get Another Reading /button> /div> /div> div iderror-message classhidden text-center py-16> div classtext-red-500 text-5xl mb-4> i classfa fa-exclamation-circle>/i> /div> h3 classtext-xl font-semibold text-gray-700> Failed to generate your reading/h3> p classtext-gray-500 mt-2>Please try again later/p> button idretry-button classmt-6 bg-primary hover:bg-primary/90 text-white font-semibold py-2 px-6 rounded-lg transition-custom> Try Again /button> /div> /div> /div> /div> !-- Dropdown arrow --> div classtext-center mt-12 animate-bounce> a href#introduction classtext-white/80 hover:text-white transition-custom> i classfa fa-angle-down text-3xl>/i> /a> /div> /div> /section> !-- User testimonials --> section classpy-16 md:py-24 bg-white> div classcontainer mx-auto px-4> div classmax-w-3xl mx-auto text-center mb-16> h2 classtext-clamp(1.8rem,4vw,2.5rem) font-bold text-gray-800 mb-6>Real User Feedback/h2> p classtext-gray-600 text-lg>See what others say about our service/p> /div> div classgrid grid-cols-1 md:grid-cols-3 gap-8 max-w-5xl mx-auto> div classbg-gray-50 rounded-xl p-6 shadow-sm> div classflex items-center mb-4> div classtext-yellow-400 flex> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> /div> /div> p classtext-gray-700 mb-4>Incredibly accurate! The fortune telling accurately predicted a career change three months later, allowing me to prepare in advance./p> div classflex items-center> img srchttps://picsum.photos/id/1001/100/100 altUser avatar classw-10 h-10 rounded-full object-cover mr-3> span classtext-gray-600 font-medium>Mr. Zhang/span> /div> /div> div classbg-gray-50 rounded-xl p-6 shadow-sm> div classflex items-center mb-4> div classtext-yellow-400 flex> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> /div> /div> p classtext-gray-700 mb-4>This service helped me better understand my life path. The insights provided were truly eye-opening and helpful for important decisions./p> div classflex items-center> img srchttps://picsum.photos/id/1002/100/100 altUser avatar classw-10 h-10 rounded-full object-cover mr-3> span classtext-gray-600 font-medium>Ms. Lee/span> /div> /div> div classbg-gray-50 rounded-xl p-6 shadow-sm> div classflex items-center mb-4> div classtext-yellow-400 flex> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star>/i> i classfa fa-star-half-o>/i> /div> /div> p classtext-gray-700 mb-4>I was skeptical at first, but the accuracy of the reading amazed me. Its become a valuable guide for understanding potential future outcomes./p> div classflex items-center> img srchttps://picsum.photos/id/1003/100/100 altUser avatar classw-10 h-10 rounded-full object-cover mr-3> span classtext-gray-600 font-medium>Mr. Wang/span> /div> /div> /div> /div> /section> !-- Footer --> footer classbg-dark text-white pt-16 pb-8> div classcontainer mx-auto px-4> div classgrid grid-cols-1 md:grid-cols-3 gap-8 mb-12> div> div classflex items-center space-x-2 mb-6> img src./image/destiny_white.svg alt classw-5 logo> span classfont-bold text-xl>Destiny Compass/span> /div> p classtext-gray-400 mb-6>A professional online fortune telling platform revealing the mysteries of destiny and providing accurate life guidance./p> div classflex space-x-4> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-facebook>/i>/a> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-twitter>/i>/a> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-instagram>/i>/a> a href# classtext-gray-400 hover:text-white transition-custom>i classfa fa-youtube>/i>/a> /div> /div> div> h4 classtext-lg font-semibold mb-6>Quick Links/h4> ul classspace-y-3> li>a hrefindex.html classtext-neutral-300 hover:text-white transition-custom>Home/a>/li> li>a hrefbaziguide.html classtext-neutral-300 hover:text-white transition-custom>BaZi Guide/a>/li> !-- li>a href# classtext-neutral-300 hover:text-white transition-custom>Services/a>/li> li>a href# classtext-neutral-300 hover:text-white transition-custom>About Us/a>/li> li>a href# classtext-neutral-300 hover:text-white transition-custom>Contact/a>/li> --> /ul> /div> div> h4 classtext-lg font-semibold mb-6>Contact Us/h4> ul classspace-y-3> li classflex items-start > i class fa fa-envelope mt-1 mr-3 text-white>/i> span classtext-neutral-300>sanshanvip@gmail.com/span> /li> /ul> /div> /div> div classborder-t border-gray-800 pt-8> div classflex flex-col md:flex-row justify-between items-center> p classtext-gray-500 text-sm mb-4 md:mb-0>© 2025 BaziMe. All rights reserved./p> /div> /div> /div> /footer> script> // 初始化flatpickr日期选择器 document.addEventListener(DOMContentLoaded, function() { flatpickr(#person1-birth-date, { locale: en, // 英语本地化 dateFormat: F j, Y, // 日期格式 maxDate: today, // 最大日期为今天 allowInput: false, // 禁止手动输入 clickOpens: true, // 点击打开日期选择器 disableMobile: true, // 禁用移动端原生选择器,确保在移动端也使用英文界面 altFormat: F j, Y, onChange: function(selectedDates, dateStr, instance) { // 更新输入框的值 document.getElementById(person1-birth-date).value dateStr; } }); flatpickr(#person2-birth-date, { locale: en, // 英语本地化 dateFormat: F j, Y, // 日期格式 maxDate: today, // 最大日期为今天 allowInput: false, // 禁止手动输入 clickOpens: true, // 点击打开日期选择器 disableMobile: true, // 禁用移动端原生选择器,确保在移动端也使用英文界面 altFormat: F j, Y, onChange: function(selectedDates, dateStr, instance) { // 更新输入框的值 document.getElementById(person2-birth-date).value dateStr; } }); }); // 切换人数显示 document.querySelectorAll(inputnamepeople-count).forEach(radio > { radio.addEventListener(change, function() { const person2Section document.getElementById(person2-section); if (this.value 2) { person2Section.style.display block; } else { person2Section.style.display none; } }); }); // Navbar scroll effect window.addEventListener(scroll, () > { const header document.querySelector(header); if (window.scrollY > 50) { header.classList.add(py-2, shadow); header.classList.remove(py-3); } else { header.classList.add(py-3); header.classList.remove(py-2, shadow); } }); // Number animation effect function animateValue(id, start, end, duration) { const obj document.getElementById(id); if (!obj) return; let startTimestamp null; const step (timestamp) > { if (!startTimestamp) startTimestamp timestamp; const progress Math.min((timestamp - startTimestamp) / duration, 1); const value Math.floor(progress * (end - start) + start); // Format number with thousand separators obj.innerText value.toLocaleString(); if (progress 1) { window.requestAnimationFrame(step); } }; window.requestAnimationFrame(step); } // Fetch user count from API or use default async function fetchUserCount() { try { // In a real implementation, this would fetch from an API // For now, well use a realistic default value const defaultUserCount 1287543; return defaultUserCount; } catch (error) { console.error(Failed to fetch user count:, error); // Fallback to default value return 1287543; } } // Trigger animation when element enters viewport const observer new IntersectionObserver((entries) > { entries.forEach(entry > { if (entry.isIntersecting) { fetchUserCount().then(count > { animateValue(user-count, 0, count, 2000); }); observer.unobserve(entry.target); } }); }, { threshold: 0.5 }); const userCountElement document.getElementById(user-count); if (userCountElement) { observer.observe(userCountElement); } // Form submission handling const fortuneForm document.getElementById(fortune-form); const resultsSection document.getElementById(results-section); const loadingIndicator document.getElementById(loading-indicator); const resultsContent document.getElementById(results-content); const fortuneResults document.getElementById(fortune-results); const errorMessage document.getElementById(error-message); if (fortuneForm) { fortuneForm.addEventListener(submit, (e) > { e.preventDefault(); validateAndSubmitForm(); }); } // Retry button functionality document.getElementById(retry-button).addEventListener(click, () > { validateAndSubmitForm(); }); // New reading button functionality document.getElementById(new-reading).addEventListener(click, () > { // Reset form document.getElementById(fortune-form).reset(); // Hide results section resultsSection.classList.add(hidden); // Reset any error messages document.getElementById(person1-gender-error).classList.add(hidden); document.getElementById(person2-gender-error).classList.add(hidden); document.getElementById(agreement-error).classList.add(hidden); // Reset display of sections document.getElementById(person2-section).style.display none; document.querySelectorAll(inputnamepeople-count)0.checked true; }); // Form validation and submission function validateAndSubmitForm() { const peopleCount document.querySelector(inputnamepeople-count:checked).value; const person1Birthday document.getElementById(person1-birth-date).value; const person1Gender document.querySelector(inputnameperson1-gender:checked); const agreement document.getElementById(agreement).checked; const person1GenderError document.getElementById(person1-gender-error); const agreementError document.getElementById(agreement-error); const person2Birthday document.getElementById(person2-birth-date).value; const person2Gender document.querySelector(inputnameperson2-gender:checked); // Reset errors person1GenderError.classList.add(hidden); agreementError.classList.add(hidden); // Validate form fields let isValid true; if (!person1Birthday) { isValid false; // Create a temporary error message for birthday const birthdayError document.createElement(p); birthdayError.id person1-birthday-error; birthdayError.className text-xs text-red-500 mt-1; birthdayError.textContent Please select your birthday; const birthDateInput document.getElementById(person1-birth-date); // Remove any existing error message const existingError document.getElementById(person1-birthday-error); if (existingError) existingError.remove(); // Insert error message after the birth date input birthDateInput.parentNode.insertBefore(birthdayError, birthDateInput.nextSibling); // Remove error message after 3 seconds setTimeout(() > { if (birthdayError.parentNode) { birthdayError.remove(); } }, 3000); // Also remove error when user interacts with the date picker document.getElementById(person1-birth-date).addEventListener(click, function() { if (birthdayError.parentNode) { birthdayError.remove(); } }, { once: true }); } if (!person1Gender) { isValid false; person1GenderError.classList.remove(hidden); } if (!agreement) { isValid false; agreementError.classList.remove(hidden); } // Validate second person if needed if (peopleCount 2) { const person2GenderError document.getElementById(person2-gender-error); person2GenderError.classList.add(hidden); if (!person2Birthday) { isValid false; // Create a temporary error message for birthday const birthdayError document.createElement(p); birthdayError.id person2-birthday-error; birthdayError.className text-xs text-red-500 mt-1; birthdayError.textContent Please select birthday for Other half; const birthDateInput document.getElementById(person2-birth-date); // Remove any existing error message const existingError document.getElementById(person2-birthday-error); if (existingError) existingError.remove(); // Insert error message after the birth date input birthDateInput.parentNode.insertBefore(birthdayError, birthDateInput.nextSibling); // Remove error message after 3 seconds setTimeout(() > { if (birthdayError.parentNode) { birthdayError.remove(); } }, 3000); // Also remove error when user interacts with the date picker document.getElementById(person2-birth-date).addEventListener(click, function() { if (birthdayError.parentNode) { birthdayError.remove(); } }, { once: true }); } if (!person2Gender) { isValid false; person2GenderError.classList.remove(hidden); } } if (isValid) { // Show results section resultsSection.classList.remove(hidden); // Scroll to results section resultsSection.scrollIntoView({ behavior: smooth, block: start }); // Show loading indicator loadingIndicator.classList.remove(hidden); resultsContent.classList.add(hidden); errorMessage.classList.add(hidden); // Prepare data based on number of people if (peopleCount 1) { // Single person reading generateResults(person1Birthday, person1Gender.value); } else { generateResultsForTwo({ person1: { birthDate: person1Birthday, gender: person1Gender.value }, person2: { birthDate: person2Birthday, gender: person2Gender.value } }); } } } // Generate and display results for single person async function generateResults(birthday, gender) { try { // Create a timeout promise for 90 seconds const timeoutPromise new Promise((_, reject) > { setTimeout(() > reject(new Error(Request timeout after 90 seconds)), 95000); }); // Create the fetch request promise const fetchPromise fetch(https://bazime.com/api/chat, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ birthDate: birthday, gender: gender }) }); // Race between fetch and timeout - whichever resolves/rejects first const response await Promise.race(fetchPromise, timeoutPromise); if (!response.ok) { throw new Error(`API request failed: ${response.statusText}`); } // Parse API response const result await response.json(); // Hide loading and show results loadingIndicator.classList.add(hidden); // Handle the result properly if (result) { // Try to get the prediction content from various possible fields let predictionContent result; // If we got a string, use it directly; otherwise convert to JSON string if (typeof predictionContent ! string) { predictionContent JSON.stringify(predictionContent); } const personalityContent marked.parse(predictionContent); fortuneResults.innerHTML ` p classmb-4>strong>Birthday:/strong> ${birthday}/p> p classmb-6>strong>Gender:/strong> ${gender male ? Male : Female}/p> div classprose>${personalityContent}/div> `; resultsContent.classList.remove(hidden); } else { throw new Error(Invalid response format from server); } } catch (error) { console.error(Error calling Service API:, error); // Show error message loadingIndicator.classList.add(hidden); errorMessage.classList.remove(hidden); // Display detailed error for debugging // const errorDetails document.createElement(p); // errorDetails.className text-red-500 mt-4 text-sm; // errorDetails.textContent `Error: ${error.message}`; // errorMessage.appendChild(errorDetails); } } // Generate and display results for two people async function generateResultsForTwo(data) { try { // Create a timeout promise for 90 seconds const timeoutPromise new Promise((_, reject) > { setTimeout(() > reject(new Error(Request timeout after 90 seconds)), 95000); }); // Create the fetch request promise const fetchPromise fetch(https://bazime.com/api/bothChat, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ person1: { birthDate: data.person1.birthDate, gender: data.person1.gender }, person2: { birthDate: data.person2.birthDate, gender: data.person2.gender } }) }); // Race between fetch and timeout - whichever resolves/rejects first const response await Promise.race(fetchPromise, timeoutPromise); if (!response.ok) { throw new Error(`API request failed: ${response.statusText}`); } // Parse API response const result await response.json(); // Hide loading and show results loadingIndicator.classList.add(hidden); // Handle the result properly if (result) { // Try to get the prediction content from various possible fields let predictionContent result; // If we got a string, use it directly; otherwise convert to JSON string if (typeof predictionContent ! string) { predictionContent JSON.stringify(predictionContent); } const personalityContent marked.parse(predictionContent); fortuneResults.innerHTML ` h3 classtext-xl font-bold mb-4>Compatibility Reading/h3> p classmb-2>strong>My Information:/strong> ${data.person1.birthDate}, ${data.person1.gender male ? Male : Female}/p> p classmb-6>strong>The Other Partys Information:/strong> ${data.person2.birthDate}, ${data.person2.gender male ? Male : Female}/p> div classprose>${personalityContent}/div> `; resultsContent.classList.remove(hidden); } else { throw new Error(Invalid response format from server); } } catch (error) { console.error(Error calling Service API:, error); // Show error message loadingIndicator.classList.add(hidden); errorMessage.classList.remove(hidden); // Display detailed error for debugging // const errorDetails document.createElement(p); // errorDetails.className text-red-500 mt-4 text-sm; // errorDetails.textContent `Error: ${error.message}`; // errorMessage.appendChild(errorDetails); } } // Smooth scrolling document.querySelectorAll(ahref^#).forEach(anchor > { anchor.addEventListener(click, function (e) { e.preventDefault(); document.querySelector(this.getAttribute(href)).scrollIntoView({ behavior: smooth }); }); }); /script> /body> /html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]