Portal SAMP
[Lançamento] Sistema de Música por nome - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Filterscripts (https://portalsamp.com/forumdisplay.php?fid=9)
+---- Tópico: [Lançamento] Sistema de Música por nome (/showthread.php?tid=4133)



Sistema de Música por nome - Cifra Modder - 28/10/2023

Venho trazer um pequeno sistema corrigido por mim do Vaca Marinha. Os créditos vão para ele pela base. Você precisará de um servidor web para que funcione, e que não tenha nenhum atraso na Api. Tem algumas hospedagem web de graça, mais tem alguns que não funciona.

Código:
<?php
// Verifica se o parâmetro 'n' foi passado na URL, e se sim, codifica o valor.
$nome = isset($_GET['n']) ? urlencode($_GET['n']) : exit("Digite um nome");

// Constrói a URL para buscar o conteúdo.
$url = "http://site.mtabrasil.com.br/musicas/?s=" . $nome;

// Tenta obter o conteúdo da URL.
$content = file_get_contents($url);

// Verifica se a busca pelo início da tag de áudio teve sucesso.
$audioTagStart = '<audio controls preload="none">';
$audioTagEnd = "</audio>";
$links = [];

// Divide o conteúdo em partes com base na tag de áudio.
$firstStep = explode($audioTagStart, $content);

foreach ($firstStep as $key => $value) {
    if ($key > 0) {
        // Divide a parte com base no fim da tag de áudio.
        $secondStep = explode($audioTagEnd, $value);

        // Procura o URL do arquivo de áudio dentro da parte.
        if (preg_match('/"([^"]+)"/', $secondStep[0], $matches)) {
            $links[] = $matches[1];
            break;
        }
    }
}

// Se pelo menos um link de áudio for encontrado, continue.
if (count($links) > 0) {
    $audioUrl = $links[0];

    // Tenta obter os dados do áudio do URL encontrado.
    $audioData = file_get_contents($audioUrl);

    if ($audioData) {
        // Obtenha o nome do arquivo da URL do áudio.
        $filename = basename($audioUrl);

        // Defina os cabeçalhos apropriados para a resposta HTTP.
        header('Content-Type: audio/mpeg');
        header('Content-Length: ' . strlen($audioData));
        header('Content-Disposition: inline; filename="' . $filename . '"');

        // Envia os dados do áudio para o navegador.
        echo $audioData;
    } else {
        exit("Falha ao carregar a música.");
    }
} else {
    exit("Nenhum link de áudio encontrado.");
}
?>


Código:
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define FILTERSCRIPT

public OnFilterScriptInit()
{
    print("Sistema musicas por nome corrigido.");
    return 1;
}

#define Dialog_Ouvir 5343
CMD:ouvir(playerid, params[])
{
    return ShowPlayerDialog(playerid, Dialog_Ouvir, DIALOG_STYLE_INPUT, "Ouvir musica", "Digite o nome da musica que quer ouvir:", "Ouvir", "Cancelar");
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new urlfinal[1024];
    if(dialogid == Dialog_Ouvir)
    {
        format(urlfinal, 1024, "exemplo/musica.php?n=%s", inputtext);
        PlayAudioStreamForPlayer(playerid, urlfinal);
        SendClientMessage(playerid, 0x00ff00ff, "Reproduzindo musica!");
        return 1;
    }
    return 0;
}
CMD:parar(playerid)
{
    StopAudioStreamForPlayer(playerid);
    SendClientMessage(playerid, 0xff0000ff, "Parando musica!");
    return 1;
}



RE: Sistema de Música por nome - White_Blue - 28/10/2023

Existem possíveis 2 problemas aqui:
1. O SA-MP mobile, ele não aceita URLs com redirecionamento HTTPS ativado (Como é o caso do site do MTA Brasil, salvo engano, e as vezes a requisição falha até mesmo no SA-MP de PC).
2. O código PHP acima é uma gambiarra.

Conclusão: O recomendado é criar uma API de upload de músicas própria (O que alguém com conhecimento básico-intermediário em backend conseguiria fazer sem grandes problemas) e criar um subdomínio na hospedagem e desativar o SSL/Redirecionamento HTTPS no subdomínio onde as músicas ficariam hospedadas. Inclusive, quando eu tiver um tempinho livre, vou trabalhar em um sistema parecido usando Next e Django.


RE: Sistema de Música por nome - Cifra Modder - 29/10/2023

(28/10/2023 12:45)White_Blue Escreveu: Existem possíveis 2 problemas aqui:
1. O SA-MP mobile, ele não aceita URLs com redirecionamento HTTPS ativado (Como é o caso do site do MTA Brasil, salvo engano, e as vezes a requisição falha até mesmo no SA-MP de PC).
2. O código PHP acima é uma gambiarra, como o próprio autor original (Vaca Marinha) disse.

Conclusão: O recomendado é criar uma API de upload de músicas própria (O que alguém com conhecimento básico-intermediário em backend conseguiria fazer sem grandes problemas) e criar um subdomínio na hospedagem e desativar o SSL/Redirecionamento HTTPS no subdomínio onde as músicas ficariam hospedadas. Inclusive, quando eu tiver um tempinho livre, vou trabalhar em um sistema parecido usando Next e Django.

Este script PHP não envolve redirecionamento. Em vez disso, ele busca e reproduz músicas diretamente do site mencionado, sem encaminhar o usuário para outra página da web.
Ou seja essa não é a melhor forma de ser criado mais funciona. acabo de testar aqui em uma hospedagem da optilink e funcionou perfeitamente! Se caso alguém quiser testar é só usar essa URL: https://neonpvp.samp.optikl.ink/musica.php?n=Nome da musica