{"id":1636,"date":"2024-09-17T01:34:12","date_gmt":"2024-09-17T01:34:12","guid":{"rendered":"https:\/\/phamho.com\/book\/?p=1636"},"modified":"2024-09-19T07:02:03","modified_gmt":"2024-09-19T07:02:03","slug":"spanish-yes-no-questions","status":"publish","type":"post","link":"https:\/\/phamho.com\/book\/spanish-yes-no-questions\/","title":{"rendered":"Spanish &#8211; Yes\/No Questions"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Spanish Yes\/No Questions &#8211; Family<\/title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <!-- Ensures proper scaling on mobile devices -->\n    <style>\n        \/* Base Styles *\/\n        body {\n            font-family: Arial, sans-serif;\n            background-color: #ffffff;\n            margin: 0;\n            padding: 0;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            min-height: 100vh; \/* Changed from fixed height to min-height for better responsiveness *\/\n            flex-direction: column;\n        }\n        .menu {\n            width: 100%;\n            background-color: #d97b0f;\n            padding: 10px;\n            text-align: center;\n            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n            margin-bottom: 20px;\n            overflow-x: auto; \/* Allows horizontal scrolling if menu items exceed screen width *\/\n            white-space: nowrap;\n        }\n        .menu a {\n            color: #fff;\n            text-decoration: none;\n            margin: 0 10px; \/* Reduced margin for better spacing on smaller screens *\/\n            font-weight: bold;\n            font-size: 16px; \/* Increased font size for readability on mobile *\/\n            display: inline-block;\n            padding: 8px 12px; \/* Added padding for larger touch targets *\/\n        }\n        .menu a:hover {\n            text-decoration: underline;\n        }\n        .container {\n            display: flex;\n            flex-direction: column; \/* Stack elements vertically on mobile *\/\n            align-items: center;\n            width: 90%; \/* Use percentage for better responsiveness *\/\n            max-width: 800px; \/* Limit maximum width for larger screens *\/\n        }\n        .image-container {\n            text-align: center;\n            margin-bottom: 20px;\n        }\n        .image-container img {\n            width: 100%; \/* Ensure image scales with container *\/\n            height: auto;\n            border-radius: 20px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n            object-fit: cover; \/* Ensures the image covers the container without distortion *\/\n        }\n        .sentence-text {\n            margin: 10px 0;\n            font-weight: bold;\n            color: #333;\n            font-size: 18px; \/* Increased font size for better visibility *\/\n            text-align: center; \/* Center align text on mobile *\/\n        }\n        .word-box {\n            margin-top: 10px;\n            padding: 10px;\n            background-color: #fff;\n            border: 2px solid #026c96;\n            border-radius: 10px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n            font-size: 16px; \/* Adjusted font size for readability *\/\n            font-weight: bold;\n            color: #026c96;\n            text-align: left;\n            max-height: 300px;\n            overflow-y: auto;\n            width: 100%; \/* Ensure it takes full width of the container *\/\n        }\n        .chat-container {\n            width: 100%; \/* Full width on mobile *\/\n            background-color: #026c96;\n            border-radius: 20px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n            overflow: hidden;\n        }\n        .chat-header {\n            background-color: #d97b0f;\n            color: #fff;\n            padding: 15px; \/* Increased padding for touch areas *\/\n            text-align: center;\n            border-bottom: 1px solid #69010a;\n        }\n        .chat-header h2 {\n            margin: 0;\n            font-size: 20px; \/* Increased font size for better readability *\/\n        }\n        .chat-messages {\n            padding: 15px;\n            overflow-y: auto;\n            max-height: 300px;\n            background-color: #fff;\n        }\n        .message {\n            margin-bottom: 10px;\n            padding: 10px;\n            border-radius: 5px;\n            font-size: 16px; \/* Adjusted font size for readability *\/\n            line-height: 1.5;\n        }\n        .user-message {\n            background-color: #4caf50;\n            color: #fff;\n            text-align: right;\n        }\n        .bot-message {\n            background-color: #2196f3;\n            color: #fff;\n            text-align: left;\n        }\n        .chat-input {\n            display: flex;\n            flex-direction: column; \/* Stack buttons vertically on smaller screens *\/\n            align-items: stretch;\n            background-color: #a3e106;\n            padding: 10px;\n        }\n        .chat-input button {\n            background-color: #17c686;\n            color: #fff;\n            font-weight: bold;\n            border: none;\n            border-radius: 5px;\n            padding: 12px 20px;\n            cursor: pointer;\n            transition: background-color 0.3s;\n            margin: 5px 0; \/* Vertical spacing between buttons *\/\n            font-size: 16px; \/* Increased font size for touch readability *\/\n        }\n        .chat-input .stop-button {\n            background-color: #c86722;\n        }\n        .chat-input button:hover {\n            opacity: 0.9; \/* Subtle feedback on hover *\/\n        }\n\n        \/* Media Queries for Larger Screens (e.g., Tablets) *\/\n        @media (min-width: 600px) {\n            .container {\n                flex-direction: row; \/* Side-by-side layout *\/\n                justify-content: center;\n                align-items: flex-start;\n            }\n            .image-container {\n                width: 50%;\n                margin-right: 20px;\n            }\n            .chat-container {\n                width: 50%;\n            }\n            .chat-input {\n                flex-direction: row; \/* Horizontal layout for buttons *\/\n                justify-content: space-between;\n            }\n            .chat-input button {\n                margin: 0 5px; \/* Horizontal spacing *\/\n                flex: 1; \/* Equal width buttons *\/\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"menu\">\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/16\/spanish-vocabulary\/\">Vocabulary<\/a>\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/17\/spanish-sentences-family\/\">Sentences<\/a>\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/17\/spanish-yes-no-questions\/\">Yes\/No Questions<\/a>\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/17\/spanish-wh-questions-family\/\">WH Questions<\/a>  \n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/18\/spanish-interaction-family\/\">Internactions<\/a>  \n    <\/div>\n\n    <div class=\"container\">\n        <div class=\"image-container\">\n            <img decoding=\"async\" src=\"https:\/\/phamho.com\/wp-content\/uploads\/2024\/09\/robot.webp\" alt=\"Lesson Robot\">\n            <div class=\"sentence-text\">See the questions in this box<\/div>\n            <div id=\"word-box\" class=\"word-box\">\n                <!-- Learned sentences will appear here -->\n            <\/div>\n        <\/div>\n        <div class=\"chat-container\">\n            <div class=\"chat-header\">  \n              <h2>Spanish Yes\/No Questions &#8211; Family<\/h2>\n            <\/div>\n            <div class=\"chat-messages\" id=\"chat-messages\">\n                <!-- Messages will appear here -->\n            <\/div>\n            <div class=\"chat-input\">\n                <button id=\"start-btn\">Start Lesson<\/button>\n                <button id=\"stop-btn\" class=\"stop-button\">Stop<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n    const sentences = [\n        { sentence: \"\u00bfEres estudiante?\", translation: \"Are you a student?\" },\n        { sentence: \"\u00bfHablas ingl\u00e9s?\", translation: \"Do you speak English?\" },\n        { sentence: \"\u00bfVives aqu\u00ed?\", translation: \"Do you live here?\" },\n        { sentence: \"\u00bfTe gusta la m\u00fasica?\", translation: \"Do you like music?\" },\n        { sentence: \"\u00bfTienes hermanos?\", translation: \"Do you have siblings?\" },\n        { sentence: \"\u00bfEst\u00e1s cansado?\", translation: \"Are you tired?\" },\n        { sentence: \"\u00bfPuedes ayudarme?\", translation: \"Can you help me?\" },\n        { sentence: \"\u00bfQuieres comer?\", translation: \"Do you want to eat?\" },\n        { sentence: \"\u00bfTe gusta viajar?\", translation: \"Do you like to travel?\" },\n        { sentence: \"\u00bfEstudias espa\u00f1ol?\", translation: \"Are you studying Spanish?\" },\n        { sentence: \"\u00bfTrabajas aqu\u00ed?\", translation: \"Do you work here?\" },\n        { sentence: \"\u00bfConoces a Mar\u00eda?\", translation: \"Do you know Maria?\" },\n        { sentence: \"\u00bfEs tu primera vez aqu\u00ed?\", translation: \"Is this your first time here?\" },\n        { sentence: \"\u00bfEst\u00e1 abierto el banco?\", translation: \"Is the bank open?\" },\n        { sentence: \"\u00bfNecesitas algo?\", translation: \"Do you need something?\" },\n        { sentence: \"\u00bfHace calor hoy?\", translation: \"Is it hot today?\" },\n        { sentence: \"\u00bfTe gusta el caf\u00e9?\", translation: \"Do you like coffee?\" },\n        { sentence: \"\u00bfVienes ma\u00f1ana?\", translation: \"Are you coming tomorrow?\" },\n        { sentence: \"\u00bfTienes tiempo?\", translation: \"Do you have time?\" },\n        { sentence: \"\u00bfEs este tu libro?\", translation: \"Is this your book?\" }\n    ];\n\n    let currentSentenceIndex = 0;\n    let repeatAttempts = 0;\n    let recognition;\n\n    const stopKeywords = [\"adi\u00f3s\", \"hasta luego\", \"bye\", \"good bye\", \"bye bye\", \"stop\", \"goodbye\"];\n\n    window.onload = function() {\n        \/\/ Initialize speech synthesis voices\n        if (window.speechSynthesis) {\n            window.speechSynthesis.onvoiceschanged = () => {\n                greetUser();\n            };\n\n            if (window.speechSynthesis.getVoices().length !== 0) {\n                greetUser();\n            }\n        } else {\n            alert('Sorry, your browser does not support speech synthesis.');\n            appendMessage('Speech synthesis not supported in your browser.', 'bot');\n        }\n\n        \/\/ Feature detection for Speech Recognition\n        if (window.SpeechRecognition || window.webkitSpeechRecognition) {\n            recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();\n            recognition.lang = 'es-ES';\n            recognition.interimResults = false;\n            recognition.maxAlternatives = 1;\n        } else {\n            alert('Sorry, your browser does not support speech recognition.');\n            appendMessage('Speech recognition not supported in your browser.', 'bot');\n            \/\/ Optionally, provide fallback mechanisms here\n        }\n    };\n\n    function greetUser() {\n        const greeting = \"Welcome! In this lesson, you will learn 20 Yes or No questions in Spanish. I will say each question twice in Spanish, and then you will repeat. Please make sure your microphone is on. Are you ready? Click 'Start Lesson' to begin.\";\n        appendMessage(greeting, 'bot');\n        sayText(greeting, 'en', true);\n    }\n\n    document.getElementById('start-btn').onclick = function() {\n        currentSentenceIndex = 0;\n        repeatAttempts = 0;\n        startLesson();\n    };\n\n    document.getElementById('stop-btn').onclick = function() {\n        endLesson(true); \/\/ Stop the lesson when \"Stop\" is clicked\n    };\n\n    function startLesson() {\n        if (currentSentenceIndex < sentences.length) {\n            const sentenceObj = sentences[currentSentenceIndex];\n            const sentence = sentenceObj.sentence;\n            const translation = sentenceObj.translation;\n\n            \/\/ Ensure the sentence starts with a capital letter and ends with proper punctuation\n            const formattedSentence = formatSentence(sentence);\n\n            appendMessage(`'${formattedSentence}' - '${translation}'`, 'bot');\n            addSentenceToBox(formattedSentence, translation);\n\n            \/\/ Speak the sentence twice in Spanish\n            sayText(formattedSentence, \"es\", false, () => {\n                setTimeout(() => {\n                    sayText(formattedSentence, \"es\", false, () => {\n                        setTimeout(() => {\n                            const repeatMessage = `Now repeat after me: '${formattedSentence}'`;\n                            appendMessage(repeatMessage, 'bot');\n                            sayText(\"Now repeat after me:\", \"en\", true, () => {\n                                sayText(`'${formattedSentence}'`, \"es\", false, () => {\n                                    listenUserResponse(formattedSentence);\n                                });\n                            });\n                        }, 500); \/\/ Short delay between sentences\n                    });\n                }, 1500); \/\/ Delay between the two utterances\n            });\n        } else {\n            endLesson();\n        }\n    }\n\n    function listenUserResponse(expectedSentence) {\n        if (!recognition) {\n            appendMessage(\"Speech recognition not available.\", 'bot');\n            return;\n        }\n\n        recognition.lang = 'es-ES';\n        recognition.start();\n\n        recognition.onresult = function(event) {\n            let userInput = event.results[0][0].transcript.trim();\n            appendMessage(userInput, 'user');\n\n            if (stopKeywords.includes(userInput.toLowerCase())) {\n                endLesson(true); \/\/ User requested to stop the lesson\n                return;\n            }\n\n            \/\/ Normalize both sentences for comparison\n            let normalizedUserInput = normalizeSentence(userInput);\n            let normalizedExpectedSentence = normalizeSentence(expectedSentence);\n\n            if (normalizedUserInput === normalizedExpectedSentence) {\n                const positiveMessage = \"Great! Your pronunciation is good.\";\n                appendMessage(positiveMessage, 'bot');\n                sayText(positiveMessage, 'en', true);\n                repeatAttempts = 0; \/\/ Reset attempts counter\n                currentSentenceIndex++;\n                setTimeout(startLesson, 2000); \/\/ Move to next sentence after 2 seconds\n            } else {\n                repeatAttempts++;\n                if (repeatAttempts < 2) {\n                    handleIncorrectResponse(expectedSentence);\n                } else {\n                    offerRetryOption(expectedSentence);\n                }\n            }\n        };\n\n        recognition.onspeechend = function() {\n            recognition.stop();\n        };\n\n        recognition.onerror = function(event) {\n            let errorMessage = '';\n            switch(event.error) {\n                case 'no-speech':\n                    errorMessage = 'No speech detected. Please try again.';\n                    break;\n                case 'audio-capture':\n                    errorMessage = 'Microphone access denied. Please check your settings.';\n                    break;\n                case 'not-allowed':\n                    errorMessage = 'Permission to use microphone denied.';\n                    break;\n                default:\n                    errorMessage = 'An error occurred: ' + event.error;\n            }\n            appendMessage(errorMessage, 'bot');\n            sayText(errorMessage, 'en', true);\n        };\n    }\n\n    function handleIncorrectResponse(expectedSentence) {\n        const correctionMessage = `That's not correct. Listen again: '${expectedSentence}'. Now repeat after me.`;\n        appendMessage(correctionMessage, 'bot');\n\n        sayText(\"That's not correct. Listen again:\", 'en', true, () => {\n            sayText(`'${expectedSentence}'`, 'es', false, () => {\n                sayText('Now repeat after me:', 'en', true, () => {\n                    sayText(`'${expectedSentence}'`, 'es', false, () => {\n                        setTimeout(() => {\n                            listenUserResponse(expectedSentence);\n                        }, 500);\n                    });\n                });\n            });\n        });\n    }\n\n    function offerRetryOption(expectedSentence) {\n        const nextSentenceMessage = `You've tried twice. The correct question is '${expectedSentence}'. Do you want to try again? Say 'yes' to repeat or 'no' to continue.`;\n        appendMessage(nextSentenceMessage, 'bot');\n\n        sayText(\"You've tried twice. The correct question is:\", 'en', true, () => {\n            sayText(`'${expectedSentence}'`, 'es', false, () => {\n                sayText(\"Do you want to try again? Say 'yes' to repeat or 'no' to continue.\", 'en', true, () => {\n                    listenForRetry(expectedSentence);\n                });\n            });\n        });\n    }\n\n    function listenForRetry(expectedSentence) {\n        if (!recognition) {\n            appendMessage(\"Speech recognition not available.\", 'bot');\n            return;\n        }\n\n        recognition.lang = 'en-US';\n        recognition.start();\n\n        recognition.onresult = function(event) {\n            let userInput = event.results[0][0].transcript.trim().toLowerCase();\n            appendMessage(userInput, 'user');\n\n            if (userInput === 'yes' || userInput === 'yeah' || userInput === 'yep') {\n                repeatAttempts = 0;\n                const repeatMessage = `Now repeat after me: '${expectedSentence}'`;\n                appendMessage(repeatMessage, 'bot');\n                sayText(\"Now repeat after me:\", 'en', true, () => {\n                    sayText(`'${expectedSentence}'`, 'es', false, () => {\n                        listenUserResponse(expectedSentence);\n                    });\n                });\n            } else if (userInput === 'no' || userInput === 'nope') {\n                repeatAttempts = 0;\n                currentSentenceIndex++;\n                startLesson();\n            } else {\n                \/\/ If unrecognized input, prompt again\n                const promptMessage = `Please say 'yes' to repeat or 'no' to continue.`;\n                appendMessage(promptMessage, 'bot');\n                sayText(promptMessage, 'en', true, () => {\n                    listenForRetry(expectedSentence);\n                });\n            }\n        };\n\n        recognition.onspeechend = function() {\n            recognition.stop();\n        };\n\n        recognition.onerror = function(event) {\n            let errorMessage = 'An error occurred: ' + event.error;\n            appendMessage(errorMessage, 'bot');\n            sayText(errorMessage, 'en', true);\n        };\n    }\n\n    function addSentenceToBox(sentence, translation) {\n        const wordBox = document.getElementById('word-box');\n        const sentenceElement = document.createElement('div');\n        sentenceElement.innerText = `'${sentence}' - '${translation}'`;\n        wordBox.appendChild(sentenceElement);\n    }\n\n    function endLesson(userStopped = false) {\n        let message;\n        if (userStopped) {\n            message = \"Thank you for learning today! I hope you enjoyed the lesson.\";\n        } else {\n            message = \"Well done! You've learned 20 Yes\/No questions in Spanish. Keep practicing!\";\n        }\n        appendMessage(message, \"bot\");\n        sayText(message, \"en\", true);\n    }\n\n    function sayText(text, lang, preferFemale, callback) {\n        if (!window.speechSynthesis) {\n            if (callback) callback();\n            return;\n        }\n\n        const utterance = new SpeechSynthesisUtterance(text);\n        utterance.lang = lang;\n        utterance.rate = 1.0; \/\/ Normal speed\n        utterance.pitch = 1.0; \/\/ Normal pitch\n\n        const voices = window.speechSynthesis.getVoices();\n\n        \/\/ Define preferred voices by name for English and Spanish\n        let preferredVoices = [];\n\n        if (lang.startsWith('en')) {\n            \/\/ Common natural-sounding English voices\n            preferredVoices = ['Google US English', 'Microsoft Zira Desktop', 'Alex', 'Samantha'];\n        } else if (lang.startsWith('es')) {\n            \/\/ Common natural-sounding Spanish voices\n            preferredVoices = ['Google espa\u00f1ol', 'Microsoft Helena Desktop', 'Paulina'];\n        }\n\n        let selectedVoice = null;\n\n        \/\/ Try to find a preferred voice\n        for (let preferredVoice of preferredVoices) {\n            selectedVoice = voices.find(voice => voice.name === preferredVoice);\n            if (selectedVoice) break;\n        }\n\n        if (!selectedVoice) {\n            \/\/ Fallback to any voice that matches the language\n            selectedVoice = voices.find(voice => voice.lang.startsWith(lang));\n        }\n\n        if (selectedVoice) {\n            utterance.voice = selectedVoice;\n        } else if (voices.length > 0) {\n            \/\/ As last resort, select the first available voice\n            utterance.voice = voices[0];\n        }\n\n        if (callback) {\n            utterance.onend = callback;\n        }\n\n        window.speechSynthesis.speak(utterance);\n    }\n\n    function appendMessage(text, sender) {\n        const messageContainer = document.getElementById('chat-messages');\n        const messageElement = document.createElement('div');\n        messageElement.classList.add('message');\n        messageElement.classList.add(sender === 'bot' ? 'bot-message' : 'user-message');\n        messageElement.innerText = text;\n        messageContainer.appendChild(messageElement);\n        messageContainer.scrollTop = messageContainer.scrollHeight;\n    }\n\n    function formatSentence(sentence) {\n        \/\/ Capitalize the first letter and ensure proper punctuation at the end\n        sentence = sentence.trim();\n        if (sentence.length === 0) return sentence;\n        let firstChar = sentence.charAt(0).toUpperCase();\n        let restOfSentence = sentence.slice(1);\n        let formattedSentence = firstChar + restOfSentence;\n\n        \/\/ Ensure question marks at the beginning and end\n        if (!formattedSentence.startsWith('\u00bf')) {\n            formattedSentence = '\u00bf' + formattedSentence;\n        }\n        if (!formattedSentence.endsWith('?')) {\n            formattedSentence += '?';\n        }\n\n        return formattedSentence;\n    }\n\n    function normalizeSentence(sentence) {\n        \/\/ Remove punctuation and convert to lowercase for comparison\n        return sentence.replace(\/[.,!?\u00bf\u00a1]\/g, '').toLowerCase().trim();\n    }\n    <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Spanish Yes\/No Questions &#8211; Family Vocabulary Sentences Yes\/No Questions WH Questions Internactions See the questions in this box Spanish Yes\/No Questions &#8211; Family Start Lesson Stop<\/p>\n","protected":false},"author":1,"featured_media":1409,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,34,33],"tags":[],"class_list":["post-1636","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-family","category-robots","category-spanish"],"featured_image_src":"https:\/\/phamho.com\/book\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-09-13.38.16-A-family-speaking-to-one-another-in-a-cozy-living-room.-The-family-consists-of-a-mother-father-teenage-daughter-and-a-young-son.-They-are-sitting-o-1024x585.webp","blog_images":{"medium":"https:\/\/phamho.com\/book\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-09-13.38.16-A-family-speaking-to-one-another-in-a-cozy-living-room.-The-family-consists-of-a-mother-father-teenage-daughter-and-a-young-son.-They-are-sitting-o-300x171.webp","large":"https:\/\/phamho.com\/book\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-09-13.38.16-A-family-speaking-to-one-another-in-a-cozy-living-room.-The-family-consists-of-a-mother-father-teenage-daughter-and-a-young-son.-They-are-sitting-o-1024x585.webp"},"ams_acf":[],"_links":{"self":[{"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/posts\/1636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/comments?post=1636"}],"version-history":[{"count":5,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/posts\/1636\/revisions"}],"predecessor-version":[{"id":1659,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/posts\/1636\/revisions\/1659"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/media\/1409"}],"wp:attachment":[{"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/media?parent=1636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/categories?post=1636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/tags?post=1636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}