{"id":1484,"date":"2025-07-31T13:51:02","date_gmt":"2025-07-31T16:51:02","guid":{"rendered":"https:\/\/sarrorecords.com.br\/?page_id=1484"},"modified":"2025-09-09T15:23:57","modified_gmt":"2025-09-09T18:23:57","slug":"radio-2-3-2","status":"publish","type":"page","link":"https:\/\/sarrorecords.com.br\/?page_id=1484","title":{"rendered":"Melodic &amp; Deep House Music"},"content":{"rendered":"<div id=\"dslc-theme-content\"><div id=\"dslc-theme-content-inner\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"287\" height=\"51\" src=\"https:\/\/sarrorecords.com.br\/wp-content\/uploads\/2022\/12\/logo05.png\" alt=\"\" class=\"wp-image-295\"\/><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<style type=\"text\/css\">\n\/* Ocultar no mobile *\/\n@media (max-width: 768px) {\n   .shortcode-desktop { display: none !important; }\n}\n\n\/* Ocultar no desktop *\/\n@media (min-width: 769px) {\n   .shortcode-mobile { display: none !important; }\n}\n<\/style>\n\n<center>\n<table style=\"width: 70%; border-collapse: collapse; border: none;\">\n    <tr>\n        <td style=\"border: none;\">    <div class=\"flex\">\r\n        <div id=\"RadioCard\">\r\n\t\t\t\t\t  <h3 id=\"songTitle\"><\/h3>\r\n            <p>&nbsp<\/p>\r\n            <button id=\"playbtn\">\r\n                <svg id=\"playicon\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 64 64\" width=\"64\" height=\"64\">\r\n                    <path d=\"M22 14 L50 32 L22 50 z\" fill=\"#000\" \/>\r\n                <\/svg>\r\n                <svg id=\"pauseicon\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 64 64\" width=\"64\" height=\"64\">\r\n                    <rect x=\"18\" y=\"14\" width=\"12\" height=\"36\" fill=\"#111\" \/>\r\n                    <rect x=\"34\" y=\"14\" width=\"12\" height=\"36\" fill=\"#111\" \/>\r\n                <\/svg>\r\n\r\n            <\/button>\r\n            <audio id=\"audioplayer\" crossorigin=\"anonymous\" src=\"https:\/\/radio.sarrorecords.com.br:8000\/deephouse\"\r\n                type=\"audio\/mpeg\">Your browser\r\n                doesn't support the audio element<\/audio>\r\n            <p>&nbsp<\/p>\r\n            <p>&nbsp<\/p>\r\n            <p>&nbsp<\/p>\r\n            <p>&nbsp<\/p>\r\n            <p>&nbsp<\/p>\r\n            <div class=\"visualizer-container\"><\/div>\r\n        <\/div>\r\n    <\/div><\/td>\n        <td style=\"border: none;\"><div class=\"shortcode-desktop\"><div id=\"cover-container\">\r\n  <div id=\"cover\" class=\"vinyl-spin\"><\/div>\r\n\t<p id=\"track-info\"><\/p>\r\n<\/div>\r\n\r\n<style>\r\n#cover-container {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n\r\n  padding: 0px;\r\n  border-radius: 20px;\r\n  width: 300px;\r\n  margin: auto;\r\n}\r\n\r\n#cover {\r\n  width: 250px;\r\n  height: 250px;\r\n  border-radius: 50%;\r\n  border: 2px solid #0af;\r\n \r\n  background-size: cover;\r\n  background-position: center;\r\n  animation: spin 15s linear infinite;\r\n  margin-bottom: 0px;\r\n}\r\n\r\n@keyframes spin {\r\n  0% { transform: rotate(0deg); }\r\n  100% { transform: rotate(360deg); }\r\n}\r\n\r\n<\/style>\r\n\r\n<script>\r\nconst icecastUrl = 'https:\/\/radio.sarrorecords.com.br:8000\/status-json.xsl';\r\n\r\nlet accessToken = '';\r\nlet lastTitle = '';\r\n\r\n\/\/ Remove tudo entre par\u00eanteses para ajudar a busca no Spotify\r\nfunction sanitizeTrackName(name) {\r\n  return name.replace(\/\\(.*?\\)\/g, '').trim();\r\n}\r\n\r\nfunction updateCover(imageUrl) {\r\n  const cover = document.getElementById('cover');\r\n  cover.style.backgroundImage = `url(${imageUrl})`;\r\n}\r\n\r\nfunction fetchCoverArt(artist, track) {\r\n  const sanitizedTrack = sanitizeTrackName(track);\r\n  const query = `track:${sanitizedTrack} artist:${artist}`;\r\n  const encodedQuery = encodeURIComponent(query);\r\n  const url = `https:\/\/api.spotify.com\/v1\/search?offset=0&limit=1&query=${encodedQuery}&type=track`;\r\n\r\n  console.log(\"\ud83c\udfb5 URL da requisi\u00e7\u00e3o Spotify:\", url);\r\n  console.log(\"\ud83e\uddea Token atual:\", accessToken);\r\n\r\n  fetch(url, {\r\n    headers: {\r\n      Authorization: `Bearer ${accessToken}`,\r\n      'Content-Type': 'application\/json'\r\n    }\r\n  })\r\n  .then(res => {\r\n    if (!res.ok) throw new Error(`Erro HTTP ${res.status}`);\r\n    return res.json();\r\n  })\r\n  .then(data => {\r\n    console.log(\"\ud83c\udfa7 Resposta Spotify:\", data);\r\n    const image = data.tracks?.items?.[0]?.album?.images?.[0]?.url;\r\n    if (image) {\r\n      updateCover(image);\r\n    } else {\r\n      console.warn(\"\u2757 Nenhuma imagem encontrada. Usando imagem padr\u00e3o.\");\r\n      updateCover(\"https:\/\/sarrorecords.com.br\/wp-content\/uploads\/2025\/07\/vinyl.png\");\r\n    }\r\n  })\r\n  .catch(err => {\r\n    console.error(\"\u274c Erro ao buscar no Spotify:\", err);\r\n    updateCover(\"https:\/\/sarrorecords.com.br\/wp-content\/uploads\/2025\/07\/vinyl.png\");\r\n  });\r\n}\r\n\r\nfunction fetchMetadata() {\r\n  return fetch(icecastUrl)\r\n    .then(res => res.json())\r\n    .then(data => {\r\n      const title = data.icestats?.source?.title;\r\n      if (!title) throw new Error(\"Metadado ausente\");\r\n      return title;\r\n    });\r\n}\r\n\r\nfunction getSpotifyToken(callback = () => {}) {\r\n  fetch('https:\/\/sarrorecords.com.br\/sarro-player\/php\/get_spotify_token.php')\r\n    .then(res => res.json())\r\n    .then(data => {\r\n      if (data.access_token) {\r\n        accessToken = data.access_token;\r\n        console.log(\"\ud83d\udd10 Token do Spotify obtido com sucesso via PHP.\");\r\n        callback();\r\n      } else {\r\n        console.error(\"\u26a0\ufe0f Token n\u00e3o obtido:\", data);\r\n      }\r\n    })\r\n    .catch(err => {\r\n      console.error(\"\u274c Erro ao obter token via PHP:\", err);\r\n    });\r\n}\r\n\r\n\/\/ Fun\u00e7\u00e3o principal de atualiza\u00e7\u00e3o peri\u00f3dica\r\nasync function updateLoop() {\r\n  try {\r\n    const currentTitle = await fetchMetadata();\r\n\r\n    if (currentTitle !== lastTitle) {\r\n      lastTitle = currentTitle;\r\n\r\n      const [artist, track] = currentTitle.split(\" - \");\r\n      if (artist && track) {\r\n        await getSpotifyToken(() => {\r\n          console.log(\"\ud83c\udf99\ufe0f Artista:\", artist);\r\n          console.log(\"\ud83c\udfb6 M\u00fasica:\", track);\r\n          fetchCoverArt(artist.trim(), track.trim());\r\n        });\r\n      } else {\r\n        console.warn(\"Formato de t\u00edtulo inesperado:\", currentTitle);\r\n      }\r\n    } else {\r\n      console.log(\"Sem altera\u00e7\u00e3o na m\u00fasica.\");\r\n    }\r\n  } catch (err) {\r\n    console.error(\"Erro no updateLoop:\", err);\r\n  }\r\n}\r\n\r\n\/\/ Inicializa e executa a cada 10 segundos\r\ngetSpotifyToken(() => {\r\n  updateLoop(); \/\/ roda uma vez logo de cara\r\n  setInterval(updateLoop, 10000);\r\n});\r\n<\/script>\r\n<\/div><\/td>\n    <\/tr>\n<\/table>\n<\/center>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Se preferir um player com equalizador (Alex Player), clique <strong><a href=\"https:\/\/sarrorecords.com.br\/?page_id=1550\">AQUI<\/a><\/strong>.<\/p>\n\n\n<p><center><br \/>\n<div id=\"P8Kzw4zDpsO+Kl3Dvid6K0DDm8OWw75Tw4Aow5cqw6jCpMON\" class=\"P8Kzw4zDpsOKl3Dvid6K0DDm8OWw75Tw4Aow5cqw6jCpMON mytuner-widget\" data-target=\"502340\" data-requires_initialization=\"true\" data-fdow=\"0\" style=\"width: 80%; height: 712px; max-width: 100%; max-height: 800px; position: relative; overflow: hidden; border: 1px solid rgb(129, 127, 128); border-radius: 6px;\"><style type=\"text\/css\"> .mytuner-widget { all: initial; display: block; color: #3D3D3D; } .mytuner-widget, .mytuner-widget * { box-sizing: border-box; font-family: sans-serif; } .dow:hover { background-color: rgba(249,240,240,0.3); } .P8Kzw4zDpsOKl3Dvid6K0DDm8OWw75Tw4Aow5cqw6jCpMON .dow.active { background-color: #F9F0F0; \/*border-top-color: #F9F0F0;*\/ color: #634545 !important; } .play-button { background: url(\"https:\/\/mytuner-radio.com\/static\/icons\/widgets\/BT_Play\/BT_Play.png\") no-repeat center; width: 40px; height: 40px; cursor: pointer; display: inline-flex; align-items: center; margin: auto 4px auto 19px; \/* align with radio logo *\/ } .play-button.loading { background: url(\"https:\/\/static2.mytuner.mobi\/static\/images\/sprite-loading.gif\") no-repeat center; filter: grayscale(1); background-size: 28px; } .play-button.playing { background: url(\"https:\/\/mytuner-radio.com\/static\/icons\/widgets\/BT_Pause\/BT_Pause.png\") no-repeat center; } .play-button.error { background: url(\"https:\/\/mytuner-radio.com\/static\/icons\/widgets\/BT_Error\/erro.png\") no-repeat center; background-size: 15px; } .play-button.disabled { opacity: 0.3; } .play-button.disabled:hover { cursor: not-allowed; } <\/style><a href=\"\" rel=\"noopener\" target=\"_blank\" style=\"background: rgb(249, 240, 240); height: 76px; width: 100%; display: block; padding: 5px; line-height: 65px; overflow: hidden; text-decoration: none;\"><img decoding=\"async\" src=\"https:\/\/static2.mytuner.mobi\/media\/tvos_radios\/340\/sarro-records.ebe35afa.png\" alt=\"Sarro Records\" style=\"float: left; height: 76px; margin-top: -5px; margin-left: -5px; box-shadow: black 0px 0px 3px -1px;\"><span style=\"margin-left: 10px; color: rgb(61, 61, 61); font-weight: bold; font-size: 20px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; float: left; max-width: calc(100% - 175px);\">M\u00fasicas Tocadas\/Played Songs<\/span><\/a><ul id=\"P8Kzw4zDpsO+Kl3Dvid6K0DDm8OWw75Tw4Aow5cqw6jCpMONplaylist-day-selector\" style=\"width: 100%; background-color: rgb(150, 105, 105); height: 35px; line-height: 24px; padding: 0px; margin: 0px; text-align: center; user-select: none; cursor: pointer; box-sizing: border-box; border-top: 1px solid rgb(249, 240, 240);\"><li class=\"dow\" data-dow=\"0\" style=\"display: inline-block; height: 34px; box-sizing: border-box; padding: 5px; width: 14.2857%; color: rgb(255, 255, 255); overflow: hidden;\">Mon<\/li><li class=\"dow\" data-dow=\"1\" style=\"display: inline-block; height: 34px; box-sizing: border-box; padding: 5px; width: 14.2857%; color: rgb(255, 255, 255); overflow: hidden; border-left: 1px solid rgb(249, 240, 240);\">Tue<\/li><li class=\"dow\" data-dow=\"2\" style=\"display: inline-block; height: 34px; box-sizing: border-box; padding: 5px; width: 14.2857%; color: rgb(255, 255, 255); overflow: hidden; border-left: 1px solid rgb(249, 240, 240);\">Wed<\/li><li class=\"dow\" data-dow=\"3\" style=\"display: inline-block; height: 34px; box-sizing: border-box; padding: 5px; width: 14.2857%; color: rgb(255, 255, 255); overflow: hidden; border-left: 1px solid rgb(249, 240, 240);\">Thu<\/li><li class=\"dow\" data-dow=\"4\" style=\"display: inline-block; height: 34px; box-sizing: border-box; padding: 5px; width: 14.2857%; color: rgb(255, 255, 255); overflow: hidden; border-left: 1px solid rgb(249, 240, 240);\">Fri<\/li><li class=\"dow\" data-dow=\"5\" style=\"display: inline-block; height: 34px; box-sizing: border-box; padding: 5px; width: 14.2857%; color: rgb(255, 255, 255); overflow: hidden; border-left: 1px solid rgb(249, 240, 240);\">Sat<\/li><li class=\"dow\" data-dow=\"6\" style=\"display: inline-block; height: 34px; box-sizing: border-box; padding: 5px; width: 14.2857%; color: rgb(255, 255, 255); overflow: hidden; border-left: 1px solid rgb(249, 240, 240);\">Sun<\/li><\/ul><ul id=\"P8Kzw4zDpsO+Kl3Dvid6K0DDm8OWw75Tw4Aow5cqw6jCpMONplaylist_songs\" data-border=\"1\" data-bordercolor=\"#F9F0F0\" style=\"width: 100%; background-color: rgb(238, 238, 238); max-height: calc(600px); padding: 0px; margin: 0px; overflow-y: scroll;\"><\/ul><br \/>\n<\/center><\/p>\n\n\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Se preferir um player com equalizador (Alex Player), clique AQUI.<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","footnotes":""},"class_list":["post-1484","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=\/wp\/v2\/pages\/1484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1484"}],"version-history":[{"count":51,"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=\/wp\/v2\/pages\/1484\/revisions"}],"predecessor-version":[{"id":1582,"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=\/wp\/v2\/pages\/1484\/revisions\/1582"}],"wp:attachment":[{"href":"https:\/\/sarrorecords.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}