Favor ativar o javascript para poder utilizar este site.

Please enable javascript in order to use this website.

🎬 Como Criar um Script para Postar Filmes com Upload de Thumbnail no ImgBB (via API) 🎬 – Lucre Bem

🎬 Como Criar um Script para Postar Filmes com Upload de Thumbnail no ImgBB (via API) 🎬

Lucre Bem
0
(0)

Imagine ter à sua disposição um painel simples, direto, bonito e funcional — onde você pode postar um filme, gerar automaticamente o nome do arquivo .mp4 com base no título e, de quebra, enviar a thumbnail diretamente para o ImgBB. Soa poderoso, não?

Pois é isso que vamos construir agora. E o melhor: de forma prática, didática e totalmente adaptável à sua realidade.

🧰 Pré-requisitos Essenciais

Antes de mergulhar no código, precisamos alinhar alguns pontos. Para colocar esse sistema no ar, você vai precisar de:

  • Um ambiente com PHP e MySQL configurado.
  • Uma tabela de gêneros no banco de dados, chamada genres.
  • Uma conta no ImgBB — com a API Key em mãos.

💡 Estrutura Inicial — HTML e CSS

A Interface do Formulário

Abaixo está o ponto de partida da nossa interface. Um layout centrado, moderno, com cores que remetem à estética da Netflix — escuro, elegante, direto ao ponto.



ANUNCIE AQUI, ENTRE EM CONTATO
<div class="container">
  <h1>POSTAR FILME</h1>

O Estilo da Página

Repare na escolha das cores, no espaçamento, nos contornos sutis. Isso não é apenas estética — é usabilidade.

body {
  font-family: 'Arial', sans-serif;
  background-color: #141414;
  color: #eaeaea;
}

📝 Campos do Formulário: O Que o Usuário Vai Preencher

O formulário é simples, mas poderoso. São três entradas fundamentais:

<input type="text" name="title" required>
<input type="file" name="poster" accept="image/*" required>
<input type="text" name="video_link" required>

Com isso, o usuário define:

  • O título do filme.
  • A capa (thumbnail), que será enviada ao ImgBB.
  • O link do vídeo, que pode ser um arquivo .mp4, um stream HLS ou um embed.

Seleção de Gêneros: Dinâmica e Automática

<select name="genres[]" multiple required>
  <?php
    $stmt = $pdo->query("SELECT id, title FROM genres");
    while ($genre = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "<option value='{$genre['id']}'>{$genre['title']}</option>";
    }
  ?>
</select>

🌍 Link para o Gerador Externo de Thumbnails

<p>
  <a href="https://st58347.ispot.cc/gerador-de-thumbnail.html" target="_blank">
    Acessar o gerador de thumbnail, título e nome de arquivo.
  </a>
</p>

📦 Back-end com PHP: Lidando com o Upload da Imagem

A seguir, o trecho responsável por enviar a thumbnail ao ImgBB:

if ($_FILES['poster']['tmp_name']) {
    $api_key = 'SUA_API_KEY_DO_IMGBB';
    $image = base64_encode(file_get_contents($_FILES['poster']['tmp_name']));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://api.imgbb.com/1/upload?key=' . $api_key);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, [
        'image' => $image,
        'name' => pathinfo($_FILES['poster']['name'], PATHINFO_FILENAME)
    ]);
    $response = curl_exec($ch);
    curl_close($ch);

    $json = json_decode($response, true);
    if (isset($json['data']['url'])) {
        $poster_url = $json['data']['url'];
    } else {
        $error = 'Erro ao fazer upload da imagem.';
    }
}

🧠 Gerando o Nome do Arquivo .mp4 com Base no Título

$title = $_POST['title'];
$filename = strtolower(preg_replace('/[^a-z0-9]+/', '-', $title)) . '.mp4';

Por exemplo: “Avatar 2: O Caminho da Água” vira avatar-2-o-caminho-da-agua.mp4

✅ Finalizando: Exibindo Mensagens e Enviando os Dados

Para dar feedback ao usuário:

<?php if ($message): ?>
  <div class="message"><?php echo $message; ?></div>
<?php endif; ?>

Botão de envio do formulário:

<input type="submit" value="POSTAR FILME">

🔐 Segurança e Boas Práticas

  • Utilize prepare() com PDO para evitar SQL Injection.
  • Valide dados com isset(), empty() e filter_var().
  • Teste exaustivamente com arquivos reais antes de publicar.

✅ Código completo (index.php, por exemplo)

<?php
// Conexão com banco de dados (ajuste conforme seu ambiente)
$host = 'localhost';
$db   = 'nome_do_banco';
$user = 'usuario';
$pass = 'senha';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    exit("Erro ao conectar ao banco: " . $e->getMessage());
}

$message = '';
$error = '';

// Processamento do formulário
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $title = $_POST['title'];
    $video_link = $_POST['video_link'];
    $video_type = $_POST['video_type'];
    $genres = $_POST['genres'] ?? [];

    // Geração do nome do arquivo com base no título
    $filename = strtolower(preg_replace('/[^a-z0-9]+/', '-', $title)) . '.mp4';

    // Upload da imagem para o ImgBB
    if (isset($_FILES['poster']['tmp_name'])) {
        $api_key = 'SUA_IMGBB_API_KEY_AQUI';
        $image = base64_encode(file_get_contents($_FILES['poster']['tmp_name']));

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://api.imgbb.com/1/upload?key=' . $api_key);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, [
            'image' => $image,
            'name' => pathinfo($_FILES['poster']['name'], PATHINFO_FILENAME)
        ]);
        $response = curl_exec($ch);
        curl_close($ch);

        $json = json_decode($response, true);
        if (isset($json['data']['url'])) {
            $poster_url = $json['data']['url'];

            // Inserção no banco
            $stmt = $pdo->prepare("INSERT INTO movies (title, poster, video_link, video_type, filename) VALUES (?, ?, ?, ?, ?)");
            $stmt->execute([$title, $poster_url, $video_link, $video_type, $filename]);

            $movie_id = $pdo->lastInsertId();

            // Relacionar gêneros
            foreach ($genres as $genre_id) {
                $stmt = $pdo->prepare("INSERT INTO movie_genre (movie_id, genre_id) VALUES (?, ?)");
                $stmt->execute([$movie_id, $genre_id]);
            }

            $message = 'Filme postado com sucesso!';
        } else {
            $error = 'Erro ao fazer upload da imagem.';
        }
    } else {
        $error = 'Imagem não enviada.';
    }
}
?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>POSTAR FILME</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            background-color: #141414;
            color: #eaeaea;
            margin: 0;
            padding: 0;
        }

        .container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            border-radius: 8px;
            background: linear-gradient(180deg, rgba(0,0,0,0.8), rgba(20,20,20,0.8));
            box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);
        }

        h1 {
            text-align: center;
            color: #e50914;
        }

        label {
            margin-top: 10px;
            display: block;
        }

        input[type="text"],
        input[type="file"],
        select {
            width: 100%;
            padding: 10px;
            margin: 10px 0;
            border: 1px solid #e50914;
            border-radius: 5px;
            background-color: #333;
            color: #fff;
        }

        input[type="submit"] {
            background-color: #e50914;
            border: none;
            color: white;
            padding: 15px;
            cursor: pointer;
            border-radius: 5px;
            width: 100%;
        }

        .message {
            background: green;
            padding: 10px;
            text-align: center;
            margin: 10px 0;
        }

        .error {
            background: red;
            padding: 10px;
            text-align: center;
            margin: 10px 0;
        }

        a {
            color: #FF0;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>POSTAR FILME</h1>

        <?php if ($message): ?>
            <div class="message"><?php echo $message; ?></div>
        <?php endif; ?>

        <?php if ($error): ?>
            <div class="error"><?php echo $error; ?></div>
        <?php endif; ?>

        <form method="POST" enctype="multipart/form-data">
            <label for="title">Título:</label>
            <input type="text" name="title" required>

            <label for="poster">Capa do Filme:</label>
            <input type="file" name="poster" accept="image/*" required>

            <label for="video_link">URL do Vídeo:</label>
            <input type="text" name="video_link" required>
            
            <p>
                <a href="https://st58347.ispot.cc/gerador-de-thumbnail.html" target="_blank">
                    Acessar o gerador de thumbnail, título e nome de arquivo.
                </a>
            </p>

            <label for="video_type">Tipo de Vídeo:</label>
            <select name="video_type" required>
                <option value="embed">Embed</option>
                <option value="mp4">MP4</option>
                <option value="hls">HLS</option>
            </select>

            <label for="genres">Gêneros:</label>
            <select name="genres[]" multiple required>
                <?php
                $stmt = $pdo->query("SELECT id, title FROM genres");
                while ($genre = $stmt->fetch(PDO::FETCH_ASSOC)) {
                    echo "<option value='{$genre['id']}'>{$genre['title']}</option>";
                }
                ?>
            </select>

            <input type="submit" value="POSTAR FILME">
        </form>
    </div>
</body>
</html>

🧱 Estrutura do Banco de Dados (Exemplo)

CREATE TABLE genres (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL
);

CREATE TABLE movies (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    poster TEXT,
    video_link TEXT,
    video_type VARCHAR(50),
    filename VARCHAR(255)
);

CREATE TABLE movie_genre (
    movie_id INT,
    genre_id INT,
    FOREIGN KEY (movie_id) REFERENCES movies(id) ON DELETE CASCADE,
    FOREIGN KEY (genre_id) REFERENCES genres(id) ON DELETE CASCADE
);

🧩 Conclusão

Esse sistema não é apenas funcional — ele é inteligente. Automatiza tarefas, organiza seus vídeos e economiza tempo.

Você pode expandi-lo, incluir sinopses, trailers, campos para avaliação e muito mais. Basta querer.

O que você achou disso?

Clique nas estrelas

Média da classificação 0 / 5. Número de votos: 0

Nenhum voto até agora! Seja o primeiro a avaliar este post.

Conheça as pessoas que tornaram este conteúdo possível

Se você gostou do conteúdo, considere fazer uma doação para os colabadores listados logo abaixo, pode ser apenas o valor de um cafezinho:

Você também poderá se interessar por:

0 Comments

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
100% Free SEO Tools - Tool Kits PRO
DMCA.com Protection Status