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 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!!!

    🇧🇷 Detectamos que você está usando extensões para bloquear anúncios.
    Por favor, apoie nosso trabalho desativando o bloqueador de anúncios ao navegar por aqui.
    🇺🇸 We have detected that you are using extensions to block ads.
    Please support us by disabling your ad blocker while browsing our site.

    DMCA.com Protection Status