Skrip pengunduh video YouTube PHP

Programming

Oleh Vinci terakhir diubah pada 15 September 2022.

YouTube adalah platform numero uno untuk meng-hosting video. Ini memungkinkan pengguna untuk mempublikasikan dan berbagi video lebih seperti jejaring sosial.

Mengunduh video YouTube terkadang diperlukan. Sebelum mengunduh video, Anda harus membaca syarat dan ketentuan YouTube dan mengikuti izin yang diberikan. Misalnya, Anda mungkin ingin mengunduh untuk memiliki cadangan video lama yang akan diganti atau dihapus.

Contoh singkat ini menyediakan skrip pengunduh video YouTube dalam PHP. Ini memiliki URL video yang didefinisikan dalam variabel PHP. Itu juga menghasilkan kunci untuk mengakses meta video YouTube melalui API.

Konfigurasikan kuncinya Dan simpan URL video untuk mendapatkan tautan pengunduh video menggunakan skrip ini.

Contoh cepat

<?php
$apiKey = "API_KEY";
$videoUrl = "YOUTUBE_VIDEO_URL";
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $videoUrl, $match);
$youtubeVideoId = $match[1];
$videoMeta = json_decode(getYoutubeVideoMeta($youtubeVideoId, $apiKey));
$videoTitle = $videoMeta->videoDetails->title;
$videoFormats = $videoMeta->streamingData->formats;
foreach ($videoFormats as $videoFormat) {
    $url = $videoFormat->url;
    if ($videoFormat->mimeType)
        $mimeType = explode(";", explode("https://phppot.com/", $videoFormat->mimeType)[1])[0];
    else
        $mimeType = "mp4";
    ?>
<a
    href="https://phppot.com/php/php-youtube-video-downloader/video-downloader.php?link=<?php echo urlencode($url)?>&title=<?php echo urlencode($videoTitle)?>&type=<?php echo $mimeType; ?>">
    Download Video</a>
<?php
}

function getYoutubeVideoMeta($videoId, $key)
{
    $ch = curl_init();
    $curlUrl="https://www.youtube.com/youtubei/v1/player?key=" . $key;
    curl_setopt($ch, CURLOPT_URL, $curlUrl);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    $curlOptions="{"context": {"client": {"hl": "en","clientName": "WEB",
        "clientVersion": "2.20210721.00.00","clientFormFactor": "UNKNOWN_FORM_FACTOR","clientScreen": "WATCH",
        "mainAppWebInfo": {"graftUrl": "/watch?v=" . $videoId . '",}},"user": {"lockedSafetyMode": false},
        "request": {"useSsl": true,"internalExperimentFlags": [],"consistencyTokenJars": []}},
        "videoId": "' . $videoId . '",  "playbackContext": {"contentPlaybackContext":
        {"vis": 0,"splay": false,"autoCaptionsDefaultOn": false,
        "autonavState": "STATE_NONE","html5Preference": "HTML5_PREF_WANTS","lactMilliseconds": "-1"}},
        "racyCheckOk": false,  "contentCheckOk": false}';
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlOptions);
    $headers = array();
    $headers[] = 'Content-Type: application/json';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $curlResult = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    return $curlResult;
}
?>

Contoh kode dalam alur di bawah ini berfungsi untuk menampilkan tautan unduhan video YouTube.

  1. Dapatkan ID unik video YouTube dari URL masukan.
  2. Untuk mengakses metadata video, minta API YouTube melalui pos PHP cURL.
  3. Dapatkan judul video, larik data dalam berbagai format dan tipe MIME dengan mem-parsing respons cURL.
  4. Transfer tautan video, judul, dan jenis mikrofon ke skrip pengunduh video.
  5. Terapkan PHP file baca() Untuk mengunduh file video dengan mengatur header PHP Jenis konten.

Link download video youtube php

Skrip pengunduh video berikut dipanggil dengan mengeklik tautan “Unduh Video” di peramban.

Mendapatkan judul dan ekstensi video untuk menentukan nama file video output. Itu juga mendapatkan tautan video dari mana ia membaca video untuk dimuat di browser.

Skrip ini menetapkan header konten dalam PHP untuk file video YouTube keluaran.

video-downloader.php

<?php
// this PHP script reads and downloads the video from YouTube
$downloadURL = urldecode($_GET['link']);
$downloadFileName = urldecode($_GET['title']) . '.' . urldecode($_GET['type']);
if (! empty($downloadURL) && substr($downloadURL, 0, 8) === 'https://') {
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment;filename=\"$downloadFileName\"");
    header("Content-Transfer-Encoding: binary");
    readfile($downloadURL);
}
?>

Tampilkan demo

Kumpulkan URL video YouTube melalui formulir dan proses skrip unduhan video

Contoh cepat memiliki contoh untuk hardcoding URL video YouTube menjadi variabel PHP.

Namun, kode di bawah ini memungkinkan pengguna untuk memasukkan URL video alih-alih mengkodekannya secara keras.

Formulir HTML mengirimkan URL video yang dimasukkan ke API YouTube untuk memproses permintaan PHP cURL.

Setelah mengirimkan URL video, alur PHP secepat contoh. Tetapi perbedaannya adalah ia menunjukkan lebih banyak tautan untuk mengunduh video dalam semua format yang kompatibel.

index.php

<form method="post" action="">
    <h1>PHP YouTube Video Downloader Script</h1>
    <div class="row">
        <input type="text" class="inline-block" name="youtube-video-url">
        <button type="submit" name="submit" id="submit">Download Video</button>
    </div>
</form>
<?php
if (isset($_POST['youtube-video-url'])) {
    $videoUrl = $_POST['youtube-video-url'];
    ?>
<p>
    URL: <a href="https://phppot.com/php/php-youtube-video-downloader/<?php echo $videoUrl;?>"><?php echo $videoUrl;?></a>
</p>
<?php
}
if (isset($_POST['submit'])) {
    preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $videoUrl, $match);
    $youtubeVideoId = $match[1];
    require './youtube-video-meta.php';
    $videoMeta = json_decode(getYoutubeVideoMeta($youtubeVideoId, $key));
    $videoThumbnails = $videoMeta->videoDetails->thumbnail->thumbnails;
    $thumbnail = end($videoThumbnails)->url;
    ?>
<p>
    <img src="<?php echo $thumbnail; ?>">
</p>
<?php $videoTitle = $videoMeta->videoDetails->title; ?>
<h2>Video title: <?php echo $videoTitle; ?></h2>
<?php
    $shortDescription = $videoMeta->videoDetails->shortDescription;
    ?>
<p><?php echo str_split($shortDescription, 100)[0];?></p>
<?php
    $videoFormats = $videoMeta->streamingData->formats;
    if (! empty($videoFormats)) {
        if (@$videoFormats[0]->url == "") {
            ?>
<p>
    <strong>This YouTube video cannot be downloaded by the downloader!</strong><?php
            $signature = "https://example.com?" . $videoFormats[0]->signatureCipher;
            parse_str(parse_url($signature, PHP_URL_QUERY), $parse_signature);
            $url = $parse_signature['url'] . "&sig=" . $parse_signature['s'];
            ?>
        </p>
<?php
            die();
        }
        ?>
<h3>With Video & Sound</h3>
<table class="striped">
    <tr>
        <th>Video URL</th>
        <th>Type</th>
        <th>Quality</th>
        <th>Download Video</th>
    </tr>
                    <?php
        foreach ($videoFormats as $videoFormat) {
            if (@$videoFormat->url == "") {
                $signature = "https://example.com?" . $videoFormat->signatureCipher;
                parse_str(parse_url($signature, PHP_URL_QUERY), $parse_signature);
                $url = $parse_signature['url'] . "&sig=" . $parse_signature['s'];
            } else {
                $url = $videoFormat->url;
            }
            ?>
            <tr>
        <td><a href="<?php echo $url; ?>">View Video</a></td>
        <td><?php if($videoFormat->mimeType) echo explode(";",explode("https://phppot.com/",$videoFormat->mimeType)[1])[0]; else echo "Unknown";?></td>
        <td><?php if($videoFormat->qualityLabel) echo $videoFormat->qualityLabel; else echo "Unknown"; ?></td>
        <td><a
            href="video-downloader.php?link=<?php echo urlencode($url)?>&title=<?php echo urlencode($videoTitle)?>&type=<?php if($videoFormat->mimeType) echo explode(";",explode("https://phppot.com/",$videoFormat->mimeType)[1])[0]; else echo "mp4";?>">
                Download Video</a></td>
    </tr>
                    <?php } ?>
                </table>
<?php
        // if you wish to provide formats based on different formats
        // then keep the below two lines
        $adaptiveFormats = $videoMeta->streamingData->adaptiveFormats;
        include 'adaptive-formats.php';
        ?>
    <?php
    }
}
?>

Program ini akan memiliki output berikut setelah menerima respons dari pengunduh video.

php unduh video dari YouTube

Skrip PHP cURL untuk mendapatkan metadata video

Skrip PHP cURL yang digunakan untuk mengakses titik akhir YouTube untuk membaca meta file sudah terlihat dalam contoh cepat.

Cuplikan kode di atas memiliki pernyataan PHP require_once untuk memiliki penangan posting cURL.

ini youtube-video-meta.php File memiliki pengontrol ini untuk membaca meta file video. Mendapatkan ID unik dari video dan kunci yang digunakan dalam mengurai PHP CURL.

Dalam artikel yang baru-baru ini diposting, kami telah mengumpulkan meta file untuk diunggah ke Google Drive.

Tampilkan pengunduh video YouTube dalam format yang kompatibel

Halaman arahan menunjukkan tabel unduhan lain untuk mendapatkan file video dalam format kompatibel yang tersedia.

skrip PHP untuk Format adaptif Fitur objek meta video YouTube untuk menampilkan unduhan ini.

adaptif-formats.php

<h3>YouTube Videos Adaptive Formats</h3>
<table class="striped">
    <tr>
        <th>Type</th>
        <th>Quality</th>
        <th>Download Video</th>
    </tr>
            <?php
            foreach ($adaptiveFormats as $videoFormat) {
                try {
                    $url = $videoFormat->url;
                } catch (Exception $e) {
                    $signature = $videoFormat->signatureCipher;
                    parse_str(parse_url($signature, PHP_URL_QUERY), $parse_signature);
                    $url = $parse_signature['url'];
                }
                ?>
                <tr>
        <td><?php if(@$videoFormat->mimeType) echo explode(";",explode("https://phppot.com/",$videoFormat->mimeType)[1])[0]; else echo "Unknown";?></td>
        <td><?php if(@$videoFormat->qualityLabel) echo $videoFormat->qualityLabel; else echo "Unknown"; ?></td>
        <td><a
            href="https://phppot.com/php/php-youtube-video-downloader/video-downloader.php?link=<?php print urlencode($url)?>&title=<?php print urlencode($videoTitle)?>&type=<?php if($videoFormat->mimeType) echo explode(";",explode("https://phppot.com/",$videoFormat->mimeType)[1])[0]; else echo "mp4";?>">Download
                Video</a></td>
    </tr>
            <?php }?>
</table>

Tampilkan DemoUnduh

Kembali ke atas


Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.