{"id":13056,"date":"2025-02-09T15:50:24","date_gmt":"2025-02-09T18:50:24","guid":{"rendered":"https:\/\/impactar.com.br\/?page_id=13056"},"modified":"2025-02-09T20:35:34","modified_gmt":"2025-02-09T23:35:34","slug":"elementor-13056","status":"publish","type":"page","link":"https:\/\/impactar.com.br\/?page_id=13056","title":{"rendered":"Elementor #13056"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13056\" class=\"elementor elementor-13056\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dc0ca35 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"dc0ca35\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-08807d1\" data-id=\"08807d1\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-52b2dd3 elementor-widget elementor-widget-html\" data-id=\"52b2dd3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"pt\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Player de M\u00fasica Inteligente<\/title>\n    <style>\n        body { font-family: Arial, sans-serif; text-align: center; margin: 20px; }\n        input, button, select { margin: 10px; padding: 10px; font-size: 16px; }\n        #player { margin-top: 20px; }\n        .controls { margin-top: 10px; }\n        .controls button {\n            background-color: rgba(0, 0, 0, 0.7);\n            color: white;\n            border: none;\n            padding: 10px 20px;\n            font-size: 16px;\n            cursor: pointer;\n            border-radius: 5px;\n        }\n        .controls button:hover {\n            background-color: rgba(0, 0, 0, 0.9);\n        }\n    <\/style>\n<\/head>\n<body>\n    <h1>Escolha o modo de reprodu\u00e7\u00e3o<\/h1>\n    <select id=\"playMode\">\n        <option value=\"auto\">Autom\u00e1tico (melhores partes)<\/option>\n        <option value=\"predefined\">Predefinido (30-120 segundos)<\/option>\n        <option value=\"normal\">Normal (m\u00fasica completa)<\/option>\n    <\/select>\n\n    <h2>Digite o nome do artista, m\u00fasica ou g\u00eanero musical<\/h2>\n    <input type=\"text\" id=\"searchQuery\" placeholder=\"Ex: Anitta, Sertanejo, Rock...\" onkeydown=\"handleKeyDown(event)\">\n    \n    <br>\n    <button onclick=\"startPlaylist()\">Tocar<\/button>\n    \n    <div id=\"player\"><\/div>\n    \n    <div class=\"controls\">\n        <button onclick=\"previousVideo()\">\u23ee Voltar<\/button>\n        <button onclick=\"nextVideo()\">Avan\u00e7ar \u23ed<\/button>\n    <\/div>\n    \n    <script>\n        const API_KEY = \"AIzaSyAHsp7PKMl5QVsBkVuQ0jtxBrbyvNaXm28\"; \/\/ \ud83d\udd34 SUBSTITUA PELA SUA NOVA CHAVE DE API!\n\n        let tag = document.createElement('script');\n        tag.src = \"https:\/\/www.youtube.com\/iframe_api\";\n        let firstScriptTag = document.getElementsByTagName('script')[0];\n        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n        let player;\n        let playlist = [];\n        let playedVideos = new Set(); \/\/ Armazena os v\u00eddeos j\u00e1 tocados\n        let currentVideoIndex = -1; \/\/ \u00cdndice do v\u00eddeo atual na playlist\n\n        function onYouTubeIframeAPIReady() {\n            player = new YT.Player('player', {\n                height: '360',\n                width: '640',\n                playerVars: { autoplay: 1, controls: 1 },\n                events: {\n                    \"onStateChange\": onPlayerStateChange\n                }\n            });\n        }\n\n        \/\/ Fun\u00e7\u00e3o para iniciar a playlist ao pressionar \"Enter\"\n        function handleKeyDown(event) {\n            if (event.key === \"Enter\") {\n                startPlaylist();\n            }\n        }\n\n        async function searchMusic(query) {\n            let url = `https:\/\/www.googleapis.com\/youtube\/v3\/search?part=snippet&type=video&q=${query}&key=${API_KEY}&maxResults=20&order=relevance`;\n\n            let response = await fetch(url);\n            let data = await response.json();\n\n            if (data.items.length > 0) {\n                let videoIds = data.items.map(item => item.id.videoId).filter(id => id); \/\/ Filtra IDs v\u00e1lidos\n                addToPlaylist(videoIds);\n            } else {\n                alert(\"Nenhuma m\u00fasica encontrada!\");\n            }\n        }\n\n        function addToPlaylist(videoIds) {\n            \/\/ Filtra v\u00eddeos que ainda n\u00e3o foram tocados\n            let newVideos = videoIds.filter(id => !playedVideos.has(id));\n\n            if (newVideos.length > 0) {\n                playlist.push(...newVideos); \/\/ Adiciona apenas v\u00eddeos novos \u00e0 playlist\n                newVideos.forEach(id => playedVideos.add(id)); \/\/ Marca os v\u00eddeos como tocados\n            }\n\n            if (playlist.length > 0) {\n                currentVideoIndex = 0; \/\/ Come\u00e7a do primeiro v\u00eddeo\n                playNext();\n            } else {\n                alert(\"Nenhuma nova m\u00fasica dispon\u00edvel. Buscando mais...\");\n                searchMusic(document.getElementById(\"searchQuery\").value);\n            }\n        }\n\n        async function playNext() {\n            if (currentVideoIndex < playlist.length - 1) {\n                currentVideoIndex++; \/\/ Avan\u00e7a para o pr\u00f3ximo v\u00eddeo\n                let videoId = playlist[currentVideoIndex];\n                let duration = await getVideoDuration(videoId);\n                playMusic(videoId, duration);\n            } else {\n                alert(\"Fim da playlist. Buscando mais v\u00eddeos...\");\n                searchMusic(document.getElementById(\"searchQuery\").value);\n            }\n        }\n\n        async function playPrevious() {\n            if (currentVideoIndex > 0) {\n                currentVideoIndex--; \/\/ Volta para o v\u00eddeo anterior\n                let videoId = playlist[currentVideoIndex];\n                let duration = await getVideoDuration(videoId);\n                playMusic(videoId, duration);\n            } else {\n                alert(\"Este \u00e9 o primeiro v\u00eddeo da playlist.\");\n            }\n        }\n\n        async function getVideoDuration(videoId) {\n            let url = `https:\/\/www.googleapis.com\/youtube\/v3\/videos?part=contentDetails&id=${videoId}&key=${API_KEY}`;\n            let response = await fetch(url);\n            let data = await response.json();\n            if (data.items.length > 0) {\n                let duration = parseISO8601Duration(data.items[0].contentDetails.duration);\n                return duration;\n            }\n            return 180; \/\/ Padr\u00e3o: 3 minutos se n\u00e3o conseguir buscar a dura\u00e7\u00e3o\n        }\n\n        function parseISO8601Duration(duration) {\n            let match = duration.match(\/PT(\\d+M)?(\\d+S)?\/);\n            let minutes = match[1] ? parseInt(match[1]) : 0;\n            let seconds = match[2] ? parseInt(match[2]) : 0;\n            return minutes * 60 + seconds;\n        }\n\n        function playMusic(videoId, duration) {\n            let playMode = document.getElementById(\"playMode\").value;\n            let startSeconds, endSeconds;\n\n            if (playMode === \"auto\") {\n                startSeconds = Math.max(10, Math.floor(duration * 0.2)); \/\/ Come\u00e7a entre 20% do v\u00eddeo\n                endSeconds = Math.min(duration, startSeconds + 120); \/\/ Reproduz por no m\u00e1ximo 120 segundos\n            } else if (playMode === \"predefined\") {\n                startSeconds = 30; \/\/ Come\u00e7a em 30 segundos\n                endSeconds = Math.min(duration, 120); \/\/ Reproduz at\u00e9 120 segundos\n            } else {\n                startSeconds = 0; \/\/ Come\u00e7a do in\u00edcio\n                endSeconds = duration; \/\/ Reproduz at\u00e9 o final\n            }\n\n            player.loadVideoById({\n                videoId: videoId,\n                startSeconds: startSeconds,\n                endSeconds: endSeconds\n            });\n        }\n\n        function onPlayerStateChange(event) {\n            if (event.data === YT.PlayerState.ENDED) {\n                playNext();\n            }\n        }\n\n        function startPlaylist() {\n            let query = document.getElementById(\"searchQuery\").value;\n            if (query.trim() === \"\") {\n                alert(\"Por favor, digite o nome de um artista, m\u00fasica ou g\u00eanero musical.\");\n                return;\n            }\n\n            playlist = [];\n            playedVideos.clear();\n            currentVideoIndex = -1; \/\/ Reinicia o \u00edndice\n            searchMusic(query);\n        }\n\n        function previousVideo() {\n            playPrevious();\n        }\n\n        function nextVideo() {\n            playNext();\n        }\n    <\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Player de M\u00fasica Inteligente Escolha o modo de reprodu\u00e7\u00e3o Autom\u00e1tico (melhores partes)Predefinido (30-120 segundos)Normal (m\u00fasica completa) Digite o nome do artista, m\u00fasica ou g\u00eanero musical Tocar \u23ee Voltar Avan\u00e7ar \u23ed<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"content-type":"","footnotes":""},"class_list":["post-13056","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/impactar.com.br\/index.php?rest_route=\/wp\/v2\/pages\/13056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/impactar.com.br\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/impactar.com.br\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/impactar.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/impactar.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13056"}],"version-history":[{"count":0,"href":"https:\/\/impactar.com.br\/index.php?rest_route=\/wp\/v2\/pages\/13056\/revisions"}],"wp:attachment":[{"href":"https:\/\/impactar.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}