{"id":1517,"date":"2024-09-15T17:15:36","date_gmt":"2024-09-15T17:15:36","guid":{"rendered":"https:\/\/phamho.com\/book\/?p=1517"},"modified":"2024-10-10T03:16:21","modified_gmt":"2024-10-10T03:16:21","slug":"learn-vocabulary-sports","status":"publish","type":"post","link":"https:\/\/phamho.com\/book\/learn-vocabulary-sports\/","title":{"rendered":"English Vocabulary &#8211; Sports"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>English-Vietnamese Vocabulary &#8211; Sports<\/title>\n    <style>\n        \/* Reset and Base Styles *\/\n        body {\n            font-family: Arial, sans-serif;\n            background-color: #ffffff;\n            margin: 0;\n            padding: 0;\n            display: flex;\n            flex-direction: column; \/* Stack elements vertically *\/\n            min-height: 100vh;\n        }\n\n        \/* Menu Styles *\/\n        .menu {\n            width: 100%;\n            background-color: #d97b0f;\n            padding: 8px; \/* Reduced padding *\/\n            text-align: center;\n            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n            flex-shrink: 0;\n            overflow-x: auto;\n            white-space: nowrap;\n        }\n        .menu a {\n            color: #fff;\n            text-decoration: none;\n            margin: 0 6px; \/* Reduced margin *\/\n            font-weight: bold;\n            font-size: 12px; \/* Reduced font size *\/\n            display: inline-block;\n        }\n        .menu a:hover,\n        .menu a:focus {\n            text-decoration: underline;\n            outline: 2px dashed #fff;\n            outline-offset: 4px;\n        }\n\n        \/* Container Styles *\/\n        .container {\n            display: flex;\n            flex-direction: column; \/* Stack vertically on smaller screens *\/\n            align-items: center;\n            flex: 1 0 auto;\n            padding: 8px; \/* Reduced padding *\/\n            box-sizing: border-box;\n            justify-content: center;\n        }\n        .image-container, .vocab-container {\n            width: 100%;\n            max-width: 400px; \/* Reduced max-width *\/\n            margin-bottom: 16px; \/* Reduced margin *\/\n        }\n        .image-container {\n            text-align: center;\n        }\n        .image-container img {\n            width: 100%;\n            height: auto;\n            border-radius: 12px; \/* Reduced border-radius *\/\n            box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);\n        }\n        .vocab-text {\n            margin: 8px 0; \/* Reduced margin *\/\n            font-weight: bold;\n            color: #333;\n            font-size: 14px; \/* Reduced font size *\/\n        }\n        .vocab-box {\n            margin-top: 8px; \/* Reduced margin *\/\n            padding: 8px; \/* Reduced padding *\/\n            background-color: #fff;\n            border: 1.5px solid #026c96; \/* Slightly reduced border thickness *\/\n            border-radius: 8px; \/* Reduced border-radius *\/\n            box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);\n            font-size: 16px; \/* Reduced font size *\/\n            font-weight: bold;\n            color: #026c96;\n            text-align: left;\n            max-height: 300px; \/* Reduced max-height *\/\n            overflow-y: auto;\n        }\n\n        \/* Vocabulary Container Styles *\/\n        .vocab-container {\n            background-color: #026c96;\n            border-radius: 12px; \/* Reduced border-radius *\/\n            box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);\n            overflow: hidden;\n            display: flex;\n            flex-direction: column;\n            height: auto; \/* Adjusted for dynamic height *\/\n        }\n        .vocab-header {\n            background-color: #d97b0f;\n            color: #fff;\n            padding: 8px; \/* Reduced padding *\/\n            text-align: center;\n            border-bottom: 1px solid #69010a;\n        }\n        .vocab-header h2 {\n            margin: 0;\n            font-size: 16px; \/* Reduced font size *\/\n        }\n        .vocab-messages {\n            padding: 8px; \/* Reduced padding *\/\n            overflow-y: auto;\n            flex: 1;\n            background-color: #fff;\n            max-height: 250px; \/* Reduced max-height *\/\n        }\n        .message {\n            margin-bottom: 8px; \/* Reduced margin *\/\n            padding: 8px; \/* Reduced padding *\/\n            border-radius: 4px; \/* Reduced border-radius *\/\n            font-size: 12px; \/* Reduced font size *\/\n            line-height: 1.3;\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\n        \/* Chat Input Styles *\/\n        .vocab-input {\n            display: flex;\n            align-items: center;\n            background-color: #a3e106;\n            padding: 8px; \/* Reduced padding *\/\n            justify-content: center;\n        }\n        .start-button, .stop-button {\n            background-color: #17c686;\n            color: #fff;\n            font-weight: bold;\n            border: none;\n            border-radius: 4px; \/* Reduced border-radius *\/\n            padding: 12px 16px; \/* Reduced padding *\/\n            cursor: pointer;\n            transition: background-color 0.3s;\n            flex: 1;\n            margin: 0 4px; \/* Reduced margin *\/\n            max-width: 120px; \/* Reduced max-width *\/\n            font-size: 14px; \/* Reduced font size *\/\n        }\n        .stop-button {\n            background-color: #c86722;\n        }\n        .start-button:hover,\n        .stop-button:hover,\n        .start-button:focus,\n        .stop-button:focus {\n            background-color: #45a049;\n            outline: none;\n        }\n\n        \/* Loader Styles *\/\n        .loader {\n            border: 3px solid #f3f3f3; \/* Reduced border thickness *\/\n            border-top: 3px solid #2196f3;\n            border-radius: 50%;\n            width: 16px; \/* Reduced size *\/\n            height: 16px; \/* Reduced size *\/\n            animation: spin 1.5s linear infinite; \/* Faster spin *\/\n            display: inline-block;\n            margin-left: 8px; \/* Reduced margin *\/\n        }\n\n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n\n        \/* Responsive Design Adjustments *\/\n        @media (max-width: 600px) {\n            .menu a {\n                margin: 0 4px; \/* Further reduced margin *\/\n                font-size: 11px; \/* Further reduced font size *\/\n            }\n            .vocab-text {\n                font-size: 13px; \/* Further reduced font size *\/\n            }\n            .vocab-box {\n                font-size: 14px; \/* Further reduced font size *\/\n                max-height: 250px; \/* Further reduced max-height *\/\n            }\n            .vocab-header h2 {\n                font-size: 14px; \/* Further reduced font size *\/\n            }\n            .vocab-messages {\n                max-height: 220px; \/* Further reduced max-height *\/\n            }\n            .message {\n                font-size: 11px; \/* Further reduced font size *\/\n            }\n            .start-button, .stop-button {\n                padding: 10px 14px; \/* Further reduced padding *\/\n                font-size: 13px; \/* Further reduced font size *\/\n                max-width: 100px; \/* Further reduced max-width *\/\n            }\n        }\n        @media (max-width: 400px) {\n            .menu a {\n                margin: 0 2px; \/* Further reduced margin *\/\n                font-size: 10px; \/* Further reduced font size *\/\n            }\n            .vocab-text {\n                font-size: 12px; \/* Further reduced font size *\/\n            }\n            .vocab-box {\n                font-size: 13px; \/* Further reduced font size *\/\n                max-height: 200px; \/* Further reduced max-height *\/\n            }\n            .vocab-header h2 {\n                font-size: 13px; \/* Further reduced font size *\/\n            }\n            .vocab-messages {\n                max-height: 180px; \/* Further reduced max-height *\/\n            }\n            .message {\n                font-size: 10px; \/* Further reduced font size *\/\n            }\n            .start-button, .stop-button {\n                padding: 10px 12px; \/* Further reduced padding *\/\n                font-size: 12px; \/* Further reduced font size *\/\n                max-width: 90px; \/* Further reduced max-width *\/\n            }\n        }\n\n        \/* Android Specific Adjustments *\/\n        @media only screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2) {\n            \/* Adjust font sizes and button sizes for high-density screens *\/\n            .vocab-header h2 {\n                font-size: 18px; \/* Slightly increased for better readability *\/\n            }\n            .start-button, .stop-button {\n                padding: 14px 18px; \/* Increased padding *\/\n                font-size: 14px; \/* Increased font size *\/\n            }\n            .message {\n                font-size: 12px; \/* Increased font size *\/\n            }\n            .vocab-box {\n                font-size: 14px; \/* Increased font size *\/\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"menu\">\n      <a href=\"https:\/\/phamho.com\/book\/2024\/09\/15\/learn-vocabulary-sports\/\">Vocabulary<\/a>\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/16\/english-playing-sports\/\">Sentences<\/a>\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/16\/english-sports-yes-no-questions\/\">Yes\/No Questions<\/a>\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/16\/english-sports-wh-questions\/\">WH-Questions<\/a>\n        <a href=\"https:\/\/phamho.com\/book\/2024\/09\/15\/interaction-sports\/\">Interaction<\/a> \n    <\/div>\n\n    <div class=\"container\">\n        <div class=\"image-container\">\n            <img decoding=\"async\" src=\"https:\/\/phamho.com\/book\/wp-content\/uploads\/2024\/09\/Robotic.webp\" alt=\"Lesson Robot\">\n            <div class=\"vocab-text\">Vocabulary and Examples<\/div>\n            <div id=\"vocab-box\" class=\"vocab-box\">\n                <!-- Learned vocabulary will be displayed here -->\n            <\/div>\n        <\/div>\n        <div class=\"vocab-container\">\n            <div class=\"vocab-header\">\n                <h2>English-Vietnamese Vocabulary &#8211; Sports<\/h2>\n            <\/div>\n            <div class=\"vocab-messages\" id=\"vocab-messages\">\n                <!-- Messages will appear here -->\n            <\/div>\n            <div class=\"vocab-input\">\n                <button id=\"start-btn\" class=\"start-button\" aria-label=\"Start Lesson\">Start Lesson<\/button>\n                <button id=\"stop-btn\" class=\"stop-button\" aria-label=\"Stop Lesson\">Stop<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n    const vocabulary = [\n        { word: \"Soccer\", translation: \"B\u00f3ng \u0111\u00e1\", example: \"I play soccer every weekend.\" },\n        { word: \"Basketball\", translation: \"B\u00f3ng r\u1ed5\", example: \"She practices basketball after school.\" },\n        { word: \"Swimming\", translation: \"B\u01a1i l\u1ed9i\", example: \"Swimming is a great way to stay fit.\" },\n        { word: \"Running\", translation: \"Ch\u1ea1y b\u1ed9\", example: \"Running in the park helps me relax.\" },\n        { word: \"Cycling\", translation: \"\u0110\u1ea1p xe\", example: \"He goes cycling to work every day.\" },\n        { word: \"Tennis\", translation: \"Qu\u1ea7n v\u1ee3t\", example: \"They enjoy playing tennis on sunny afternoons.\" },\n        { word: \"Martial Arts\", translation: \"V\u00f5 thu\u1eadt\", example: \"Martial arts improve discipline and strength.\" },\n        { word: \"Yoga\", translation: \"Yoga\", example: \"Yoga helps with flexibility and mindfulness.\" },\n        { word: \"Mountain Climbing\", translation: \"Leo n\u00fai\", example: \"Mountain climbing is both challenging and rewarding.\" },\n        { word: \"Hiking\", translation: \"\u0110i b\u1ed9 \u0111\u01b0\u1eddng d\u00e0i\", example: \"Hiking through the trails is a wonderful experience.\" },\n        \/\/ Additional 10 vocabulary words with examples\n        { word: \"Volleyball\", translation: \"B\u00f3ng chuy\u1ec1n\", example: \"Volleyball requires teamwork and agility.\" },\n        { word: \"Skateboarding\", translation: \"Tr\u01b0\u1ee3t v\u00e1n\", example: \"Skateboarding can be both fun and dangerous.\" },\n        { word: \"Track and Field\", translation: \"\u0110i\u1ec1n kinh\", example: \"Track and field events test speed and endurance.\" },\n        { word: \"Skiing\", translation: \"Tr\u01b0\u1ee3t tuy\u1ebft\", example: \"Skiing during winter is a popular pastime.\" },\n        { word: \"Baseball\", translation: \"B\u00f3ng ch\u00e0y\", example: \"Baseball games are exciting to watch.\" },\n        { word: \"Gymnastics\", translation: \"Th\u1ec3 d\u1ee5c d\u1ee5ng c\u1ee5\", example: \"Gymnastics showcases strength and grace.\" },\n        { word: \"Rugby\", translation: \"B\u00f3ng b\u1ea7u d\u1ee5c\", example: \"Rugby is a physically demanding sport.\" },\n        { word: \"Badminton\", translation: \"C\u1ea7u l\u00f4ng\", example: \"Badminton is a fast-paced racquet sport.\" },\n        { word: \"Table Tennis\", translation: \"B\u00f3ng b\u00e0n\", example: \"Table tennis improves hand-eye coordination.\" },\n        { word: \"Golf\", translation: \"Golf\", example: \"Golf is a sport that requires precision and patience.\" }\n    ];\n\n    let currentVocabIndex = 0;\n    let repeatAttempts = 0;\n    let recognition;\n\n    const stopKeywords = [\"goodbye\", \"good bye\", \"bye\", \"bye bye\", \"stop\", \"end\", \"quit\", \"exit\"];\n\n    const speechSynthesisSupported = 'speechSynthesis' in window;\n    const speechRecognitionSupported = window.SpeechRecognition || window.webkitSpeechRecognition;\n\n    if (speechRecognitionSupported) {\n        recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();\n        recognition.lang = 'en-US';\n        recognition.interimResults = false;\n        recognition.maxAlternatives = 1;\n    }\n\n    let voices = [];\n    function loadVoices() {\n        voices = window.speechSynthesis.getVoices();\n        if (voices.length === 0) {\n            \/\/ Some browsers load voices asynchronously\n            window.speechSynthesis.onvoiceschanged = () => {\n                voices = window.speechSynthesis.getVoices();\n                console.log(\"Voices loaded:\", voices);\n            };\n        } else {\n            console.log(\"Voices loaded:\", voices);\n        }\n    }\n\n    loadVoices();\n\n    window.onload = function() {\n        if (speechSynthesisSupported) {\n            \/\/ Delay greeting to ensure voices are loaded\n            setTimeout(() => greetUser(), 500); \n        } else {\n            appendMessage(\"Sorry, your browser does not support speech synthesis.\", \"bot\");\n        }\n\n        if (!speechRecognitionSupported) {\n            appendMessage(\"Sorry, your browser does not support speech recognition.\", \"bot\");\n        }\n    };\n\n    function greetUser() {\n        const greeting = \"Welcome! In this lesson, you will learn 20 sports-related English vocabulary words with their Vietnamese translations and examples. I will say each word and its example sentence. Are you ready? Click Start Lesson to begin.\";\n        appendMessage(greeting, 'bot');\n        sayText(greeting, 'en-US');\n    }\n\n    document.getElementById('start-btn').onclick = function() {\n        if (!speechSynthesisSupported) {\n            appendMessage(\"Speech synthesis is not supported in your browser.\", \"bot\");\n            return;\n        }\n        if (speechRecognitionSupported) {\n            currentVocabIndex = 0;\n            repeatAttempts = 0;\n            startLesson();\n        } else {\n            appendMessage(\"Speech recognition is not supported in your browser.\", \"bot\");\n        }\n    };\n\n    document.getElementById('stop-btn').onclick = function() {\n        endLesson(true); \/\/ Stop the lesson when \"Stop\" button is clicked\n    };\n\n    function startLesson() {\n        if (currentVocabIndex < vocabulary.length) {\n            const vocab = vocabulary[currentVocabIndex].word;\n            const translation = vocabulary[currentVocabIndex].translation;\n            const example = vocabulary[currentVocabIndex].example;\n\n            \/\/ **Change 1: Remove \"Word:\" prefix**\n            appendMessage(`${vocab} - ${translation}`, 'bot');\n            appendMessage(`For example: ${example}`, 'bot');\n            addVocabToBox(vocab, translation, example);\n            \/\/ **Change 3: Only say the English word**\n            sayText(`${vocab}`, \"en-US\");\n            \/\/ **Change 4: Change \"Example:\" to \"For example:\" in speech**\n            setTimeout(() => sayText(`For example: ${example}`, \"en-US\"), 1500); \/\/ Say the example sentence\n\n            \/\/ **Change 2: Update prompt message**\n            setTimeout(() => {\n                const repeatMessage = `Repeat after me: ${vocab}`;\n                appendMessage(repeatMessage, 'bot');\n                sayText(repeatMessage, \"en-US\");\n                listenUserResponse(vocab);\n            }, 3000);\n        } else {\n            endLesson();\n        }\n    }\n\n    function listenUserResponse(expectedWord) {\n        recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();\n        recognition.lang = 'en-US';\n        recognition.interimResults = false;\n        recognition.maxAlternatives = 1;\n\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            const normalizedInput = userInput.toLowerCase().replace(\/[\\s?!.,']+\/g, '');\n            const normalizedExpected = expectedWord.toLowerCase().replace(\/[\\s?!.,']+\/g, '');\n\n            if (normalizedInput === normalizedExpected) {\n                const positiveMessage = \"Great job! Let's move to the next word.\";\n                appendMessage(positiveMessage, 'bot');\n                sayText(positiveMessage, 'en-US'); \/\/ Feedback in English\n                repeatAttempts = 0; \/\/ Reset the attempts counter\n                currentVocabIndex++;\n                setTimeout(startLesson, 2000); \/\/ Move to next vocabulary after 2 seconds\n            } else {\n                repeatAttempts++;\n                if (repeatAttempts < 2) {\n                    const correctionMessage = `That's not quite right. Let's try again. Please repeat the word: ${expectedWord}`;\n                    appendMessage(correctionMessage, 'bot');\n                    sayText(\"That's not quite right. Let's try again.\", 'en-US'); \/\/ Feedback in English\n                    sayText(`Please repeat the word: ${expectedWord}`, 'en-US'); \/\/ Prompt to repeat in English\n                    setTimeout(() => {\n                        listenUserResponse(expectedWord);\n                    }, 3000);\n                } else {\n                    const nextVocabMessage = `You've tried twice. The correct word is ${expectedWord}. Let's proceed to the next word.`;\n                    appendMessage(nextVocabMessage, 'bot');\n                    sayText(nextVocabMessage, 'en-US'); \/\/ Feedback in English\n                    repeatAttempts = 0; \/\/ Reset the attempts counter\n                    currentVocabIndex++;\n                    setTimeout(startLesson, 2000);\n                }\n            }\n        };\n\n        recognition.onspeechend = function() {\n            recognition.stop();\n        };\n\n        recognition.onerror = function(event) {\n            appendMessage('Error: ' + event.error, 'bot');\n            repeatAttempts++;\n            if (repeatAttempts < 2) {\n                const retryMessage = `I didn't catch that. Please repeat the word: ${expectedWord}`;\n                appendMessage(retryMessage, 'bot');\n                sayText(\"I didn't catch that. Please repeat the word:\", 'en-US');\n                sayText(expectedWord, 'en-US');\n                listenUserResponse(expectedWord);\n            } else {\n                const nextVocabMessage = `You've tried twice. The correct word is ${expectedWord}. Let's move on to the next word.`;\n                appendMessage(nextVocabMessage, 'bot');\n                sayText(nextVocabMessage, 'en-US');\n                repeatAttempts = 0;\n                currentVocabIndex++;\n                setTimeout(startLesson, 2000);\n            }\n        };\n    }\n\n    function addVocabToBox(word, translation, example) {\n        const vocabBox = document.getElementById('vocab-box');\n        const vocabElement = document.createElement('div');\n        vocabElement.innerHTML = `<strong>${word} - ${translation}<\/strong>: ${example}`;\n        vocabBox.appendChild(vocabElement);\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 vocabulary lesson.\";\n        } else {\n            message = \"Excellent! You've learned 20 sports-related English vocabulary words with their Vietnamese translations and examples. Keep practicing!\";\n        }\n        appendMessage(message, \"bot\");\n        sayText(message, \"en-US\"); \/\/ End feedback in English\n    }\n\n    function sayText(text, lang, callback) {\n        if (!speechSynthesisSupported) {\n            if (callback) callback();\n            return;\n        }\n        const utterance = new SpeechSynthesisUtterance(text);\n        utterance.lang = lang;\n        utterance.rate = 1.0;\n        utterance.pitch = 1.0;\n\n        if (voices.length === 0) {\n            \/\/ If voices are not loaded yet, wait for them\n            window.speechSynthesis.onvoiceschanged = () => {\n                voices = window.speechSynthesis.getVoices();\n                selectVoice(utterance, lang);\n                utterance.onend = function() {\n                    if (callback) callback();\n                };\n                window.speechSynthesis.speak(utterance);\n            };\n        } else {\n            selectVoice(utterance, lang);\n            utterance.onend = function() {\n                if (callback) callback();\n            };\n            window.speechSynthesis.speak(utterance);\n        }\n    }\n\n    function selectVoice(utterance, lang) {\n        \/\/ Prioritize specific high-quality voices\n        const preferredVoiceNames = [\n            'Google US English',\n            'Google UK English Female',\n            'Google UK English Male',\n            'Google US English Female',\n            'Google US English Male'\n        ];\n\n        \/\/ Try to find a preferred voice first\n        let selectedVoice = voices.find(voice => preferredVoiceNames.includes(voice.name));\n\n        \/\/ If no preferred voice is found, fallback to any English voice\n        if (!selectedVoice) {\n            selectedVoice = voices.find(voice => voice.lang === lang && voice.name.toLowerCase().includes('english')) ||\n                            voices.find(voice => voice.lang.startsWith('en'));\n        }\n\n        if (selectedVoice) {\n            utterance.voice = selectedVoice;\n            console.log(`Selected voice: ${selectedVoice.name}`);\n        } else {\n            console.warn(\"No suitable English voice found. Using default voice.\");\n        }\n    }\n\n    function appendMessage(text, sender) {\n        const messageContainer = document.getElementById('vocab-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    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>English-Vietnamese Vocabulary &#8211; Sports Vocabulary Sentences Yes\/No Questions WH-Questions Interaction Vocabulary and Examples English-Vietnamese Vocabulary &#8211; Sports Start Lesson Stop<\/p>\n","protected":false},"author":1,"featured_media":1503,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,35,47,34,27,39,30],"tags":[],"class_list":["post-1517","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adults","category-b1","category-pet","category-robots","category-speaking","category-sports","category-young-learners"],"featured_image_src":"https:\/\/phamho.com\/book\/wp-content\/uploads\/2024\/09\/DALL\u00b7E-2024-09-15-18.17.33-A-classroom-scene-where-advanced-robots-are-teaching-English-to-B1-level-students.-The-robots-have-a-humanoid-design-with-sleek-metallic-bodies-and-f.webp","blog_images":{"medium":"https:\/\/phamho.com\/book\/wp-content\/uploads\/2024\/09\/DALL\u00b7E-2024-09-15-18.17.33-A-classroom-scene-where-advanced-robots-are-teaching-English-to-B1-level-students.-The-robots-have-a-humanoid-design-with-sleek-metallic-bodies-and-f-300x300.webp","large":"https:\/\/phamho.com\/book\/wp-content\/uploads\/2024\/09\/DALL\u00b7E-2024-09-15-18.17.33-A-classroom-scene-where-advanced-robots-are-teaching-English-to-B1-level-students.-The-robots-have-a-humanoid-design-with-sleek-metallic-bodies-and-f.webp"},"ams_acf":[],"_links":{"self":[{"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/posts\/1517","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=1517"}],"version-history":[{"count":24,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/posts\/1517\/revisions"}],"predecessor-version":[{"id":1697,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/posts\/1517\/revisions\/1697"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/media\/1503"}],"wp:attachment":[{"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/media?parent=1517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/categories?post=1517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/phamho.com\/book\/wp-json\/wp\/v2\/tags?post=1517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}