{"id":202,"date":"2025-10-03T19:23:15","date_gmt":"2025-10-03T19:23:15","guid":{"rendered":"https:\/\/shop.duckndata.com\/?page_id=202"},"modified":"2025-10-03T20:24:04","modified_gmt":"2025-10-03T20:24:04","slug":"shows","status":"publish","type":"page","link":"https:\/\/shop.duckndata.com\/?page_id=202","title":{"rendered":"Shows"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"202\" class=\"elementor elementor-202\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32fa935 e-flex e-con-boxed e-con e-parent\" data-id=\"32fa935\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7f6ab08 elementor-widget elementor-widget-heading\" data-id=\"7f6ab08\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\"><strong>I do not have control over the ads do not install anything that pops up.<\/strong><br><strong>Install an adblock to get no ads.<\/strong> (less on mobile)<br><br><strong>Links to download:<br>PC\/Laptop: <a href=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/ublock-origin\/\" data-type=\"link\" data-id=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/ublock-origin\/\" target=\"_blank\" rel=\"noreferrer noopener\">Firefox<\/a>   <a href=\"https:\/\/chromewebstore.google.com\/detail\/ublock-origin-lite\/ddkjiahejlhfcafbddmgiahcphecmpfh?hl=en\" data-type=\"link\" data-id=\"https:\/\/chromewebstore.google.com\/detail\/ublock-origin\/cjpalhdlnbpafiamejdnhcphjbkeiagm\" target=\"_blank\" rel=\"noreferrer noopener\">Chrome<\/a><\/strong><br>Android: <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=org.mozilla.firefox&amp;hl=en_US&amp;pli=1\" data-type=\"link\" data-id=\"https:\/\/play.google.com\/store\/apps\/details?id=org.mozilla.firefox&amp;hl=en_US&amp;pli=1\" target=\"_blank\" rel=\"noreferrer noopener\">FireFox App<\/a> + ublock extension<br><a href=\"http:\/\/www.duckndata.com\/wp-content\/uploads\/2024\/11\/blockguide.gif\" data-type=\"link\" data-id=\"http:\/\/www.duckndata.com\/wp-content\/uploads\/2024\/11\/blockguide.gif\" target=\"_blank\" rel=\"noreferrer noopener\">Guide<\/a><\/h6>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b8c85d3 e-flex e-con-boxed e-con e-parent\" data-id=\"b8c85d3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8c76678 elementor-widget elementor-widget-html\" data-id=\"8c76678\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<h2>Search for TV Shows<\/h2>\n<div style=\"display: flex; flex-wrap: wrap; align-items: center; gap: 8px;\">\n    <input type=\"text\" id=\"search-title\" placeholder=\"Enter TV show name\" style=\"padding: 8px; width: 100%; max-width: 200px;\">\n    <button onclick=\"searchTVShows()\" style=\"padding: 8px;\">Search<\/button>\n<\/div>\n\n<!-- Server Switch Dropdown -->\n<label for=\"server-select\" style=\"margin-top: 10px; display: block;\">Select Video Server<\/label>\n<select id=\"server-select\" onchange=\"switchServer()\" style=\"padding: 8px; width: 100%; max-width: 250px;\">\n    <option value=\"vidsrc.me\">\u2b50 me, Stable<\/option>\n    <option value=\"vidsrc.dev\">\u2b50 dev, Backup<\/option>\n    <option value=\"vidsrc.vip\">\u2b50 vip<\/option>\n    <option value=\"vidsrc.me\">me<\/option>\n    <option value=\"vidsrc.xyz\">xyz<\/option>\n    <option value=\"vidsrc.to\">to<\/option>  \n<\/select>\n\n<div id=\"search-results\" style=\"margin-top: 20px; display: flex; flex-wrap: wrap; gap: 16px; padding: 16px; background: #f5f5f5; border-radius: 8px;\">\n    <!-- TV show posters will be added here -->\n<\/div>\n\n<div id=\"episode-details\" style=\"display:none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.9); padding: 40px; z-index: 9999; overflow-y: auto;\">\n    <h3 id=\"episode-title\" style=\"color: white; font-size: 24px;\">Episode Details<\/h3>\n\n    <!-- Video Player -->\n    <div id=\"episode-video\" style=\"width: 100%; height: 50vh; margin-top: 20px; position: relative;\">\n        <!-- Video iframe will be added here -->\n    <\/div>\n\n    <!-- Episode List (Seasons and Episodes) -->\n    <div id=\"episodes-list\" style=\"margin-top: 20px; margin-bottom: 20px; max-height: 300px; overflow-y: auto;\">\n        <!-- Season and Episode buttons will appear here -->\n    <\/div>\n\n    <!-- Back Button -->\n    <button onclick=\"closeEpisodeDetails()\" style=\"background-color: #ff6347; color: white; padding: 12px 24px; font-size: 16px; border: none; border-radius: 5px; cursor: pointer; display: block; margin-top: 20px; text-align: center; width: 100%; max-width: 200px; margin-left: auto; margin-right: auto;\">\n        Back to Search\n    <\/button>\n<\/div>\n\n<script>\n    const apiKey = '395de9052435b5517885ed82441ff295'; \/\/ Replace with your TMDb API key\n    let searchTimeout = null; \/\/ Variable to hold timeout ID for debouncing\n    let searchCache = {}; \/\/ Cache for previously searched results\n    let videoSource = 'vidsrc.me'; \/\/ Default video source\n\n    \/\/ Debounced search function to minimize API calls\n    async function searchTVShows() {\n        const title = document.getElementById('search-title').value.trim();\n        \n        if (title) {\n            clearTimeout(searchTimeout); \/\/ Clear any ongoing timeouts to avoid unnecessary requests\n            searchTimeout = setTimeout(() => {\n                \/\/ Check cache first\n                if (searchCache[title]) {\n                    displayTVShows(searchCache[title]);\n                } else {\n                    fetchTVShows(title); \/\/ Fetch results if not cached\n                }\n            }, 300); \/\/ Debounce by 300ms\n        } else {\n            document.getElementById('search-results').innerHTML = ''; \/\/ Clear results if title is empty\n        }\n    }\n\n    async function fetchTVShows(title) {\n        try {\n            const response = await fetch(`https:\/\/api.themoviedb.org\/3\/search\/tv?api_key=${apiKey}&query=${encodeURIComponent(title)}`);\n            const data = await response.json();\n            if (data.results && data.results.length > 0) {\n                searchCache[title] = data.results; \/\/ Cache the results\n                displayTVShows(data.results);\n            } else {\n                document.getElementById('search-results').innerHTML = 'No results found.';\n            }\n        } catch (error) {\n            console.error('Error fetching data:', error);\n        }\n    }\n\n    function displayTVShows(results) {\n        const resultsContainer = document.getElementById('search-results');\n        resultsContainer.innerHTML = ''; \/\/ Clear previous results\n\n        results.forEach(tvShow => {\n            const tvShowElement = document.createElement('div');\n            tvShowElement.style.cursor = 'pointer';\n            tvShowElement.style.flex = '0 0 auto';\n            tvShowElement.style.width = '150px';\n            tvShowElement.style.textAlign = 'center';\n\n            const posterPath = tvShow.poster_path ? `https:\/\/image.tmdb.org\/t\/p\/w200${tvShow.poster_path}` : 'https:\/\/via.placeholder.com\/150';\n            tvShowElement.innerHTML = `\n                <img decoding=\"async\" src=\"${posterPath}\" alt=\"${tvShow.name}\" style=\"width: 100%; border-radius: 8px;\">\n                <p>${tvShow.name}<\/p>\n            `;\n\n            tvShowElement.onclick = () => openTVShowDetails(tvShow.id);\n            resultsContainer.appendChild(tvShowElement);\n        });\n    }\n\n    async function openTVShowDetails(tvId) {\n        try {\n            const response = await fetch(`https:\/\/api.themoviedb.org\/3\/tv\/${tvId}?api_key=${apiKey}`);\n            const data = await response.json();\n            document.getElementById('episode-title').innerText = data.name;\n            document.getElementById('episode-details').style.display = 'block';\n\n            const episodeListContainer = document.getElementById('episodes-list');\n            episodeListContainer.innerHTML = '';\n            data.seasons.forEach(season => {\n                const seasonButton = document.createElement('button');\n                seasonButton.innerText = `Season ${season.season_number}`;\n                seasonButton.style.margin = '8px';\n                seasonButton.style.padding = '10px';\n                seasonButton.style.fontSize = '16px';\n                seasonButton.style.cursor = 'pointer';\n                seasonButton.style.backgroundColor = '#4CAF50';\n                seasonButton.style.color = 'white';\n                seasonButton.style.border = 'none';\n                seasonButton.style.borderRadius = '5px';\n                seasonButton.onclick = () => loadSeasonEpisodes(tvId, season.season_number);\n                episodeListContainer.appendChild(seasonButton);\n            });\n        } catch (error) {\n            console.error('Error fetching TV show details:', error);\n        }\n    }\n\n    async function loadSeasonEpisodes(tvId, seasonNumber) {\n        try {\n            const response = await fetch(`https:\/\/api.themoviedb.org\/3\/tv\/${tvId}\/season\/${seasonNumber}?api_key=${apiKey}`);\n            const data = await response.json();\n            const episodeListContainer = document.getElementById('episodes-list');\n            episodeListContainer.innerHTML = ''; \/\/ Clear previous episode list\n\n            data.episodes.forEach(episode => {\n                const episodeButton = document.createElement('button');\n                episodeButton.innerText = `Episode ${episode.episode_number}: ${episode.name}`;\n                episodeButton.style.margin = '8px';\n                episodeButton.style.padding = '10px';\n                episodeButton.style.fontSize = '14px';\n                episodeButton.style.cursor = 'pointer';\n                episodeButton.style.backgroundColor = '#2196F3';\n                episodeButton.style.color = 'white';\n                episodeButton.style.border = 'none';\n                episodeButton.style.borderRadius = '5px';\n                episodeButton.onclick = () => playEpisode(tvId, seasonNumber, episode.episode_number);\n                episodeListContainer.appendChild(episodeButton);\n            });\n        } catch (error) {\n            console.error('Error fetching season episodes:', error);\n        }\n    }\n\n    function playEpisode(tvId, seasonNumber, episodeNumber) {\n        const iframeContainer = document.getElementById('episode-video');\n        iframeContainer.innerHTML = ''; \/\/ Clear previous iframe\n\n        const iframe = document.createElement('iframe');\n        iframe.allowFullscreen = true;\n        iframe.scrolling = \"no\";\n        iframe.src = `https:\/\/${videoSource}\/embed\/tv\/${tvId}\/${seasonNumber}\/${episodeNumber}`;\n        iframe.style.width = '100%';\n        iframe.style.height = '100%';\n        iframe.style.border = 'none';\n\n        iframeContainer.appendChild(iframe);\n    }\n\n    function closeEpisodeDetails() {\n        document.getElementById('episode-details').style.display = 'none';\n        document.getElementById('episode-video').innerHTML = ''; \/\/ Clear the iframe\n        document.getElementById('episodes-list').innerHTML = ''; \/\/ Clear episodes list\n    }\n\n    function switchServer() {\n        const serverSelect = document.getElementById('server-select');\n        videoSource = serverSelect.value;\n        document.getElementById('note').textContent = `You are currently using: ${serverSelect.options[serverSelect.selectedIndex].text}`;\n    }\n<\/script>\n\n<style>\n    @media (max-width: 600px) {\n        #episode-video {\n            height: 40vh; \/* Adjust video player height for smaller screens *\/\n        }\n        #episodes-list {\n            margin-top: 10px;\n        }\n        #search-results {\n            flex-direction: column;\n            gap: 16px;\n        }\n    }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>I do not have control over the ads do not install anything that pops up.Install an adblock to get no [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":11,"comment_status":"open","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-202","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"mailpoet_newsletter_max":false,"woocommerce_thumbnail":false,"woocommerce_single":false,"woocommerce_gallery_thumbnail":false},"uagb_author_info":{"display_name":"madmin","author_link":"https:\/\/shop.duckndata.com\/?author=1"},"uagb_comment_info":7,"uagb_excerpt":"I do not have control over the ads do not install anything that pops up.Install an adblock to get no [&hellip;]","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=\/wp\/v2\/pages\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=202"}],"version-history":[{"count":10,"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=\/wp\/v2\/pages\/202\/revisions"}],"predecessor-version":[{"id":222,"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=\/wp\/v2\/pages\/202\/revisions\/222"}],"wp:attachment":[{"href":"https:\/\/shop.duckndata.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}