Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for http://tv.zing.vn (simple mp4 in source code) #12505

Open
PannenkoekenNL opened this issue Mar 20, 2017 · 1 comment
Open

Add support for http://tv.zing.vn (simple mp4 in source code) #12505

PannenkoekenNL opened this issue Mar 20, 2017 · 1 comment

Comments

@PannenkoekenNL
Copy link

@PannenkoekenNL PannenkoekenNL commented Mar 20, 2017

  • I've verified and I assure that I'm running youtube-dl 2017.03.20
  • At least skimmed through README and most notably FAQ and BUGS sections
  • Searched the bugtracker for similar issues including closed ones
  • Site support request (request for adding support for a new site)

Description of your issue, suggested solution and other information

Please add support for tv.zing.vn. The video URL is a mp4 in the source code:

Example: http://tv.zing.vn/video/Sien-Nhan-Perman-Tap-130/IWZBEEEF.html


            HTML5_PLAYER.player = new zPlayer.Player({
                playlist: [{
                    title:"",
                    poster:"http://zingtv-photo.d.za.zdn.vn/tv_media_225_126/2016/0315/c4/8a2c02e9fdc3d0657c3444df3eb48aaa_1458536147.jpg",
                    source: "http://stream13.tv.zdn.vn/streaming/66b952b13664b2ef1b5f286abb3ea202/58cf8135/2016/0315/c4/7cfd51189796d077b6eeaa83b467c47d.mp4",
                    sourceLevel: [
                        
                        {
                            source: "http://stream13.tv.zdn.vn/streaming/66b952b13664b2ef1b5f286abb3ea202/58cf8135/2016/0315/c4/7cfd51189796d077b6eeaa83b467c47d.mp4",
                            label: '360p'
                        },
                        
                        

@divinity76
Copy link

@divinity76 divinity76 commented Jan 29, 2019

meanwhile, here is an implementation in PHP-cli, maybe it'll help speed up development of a youtube-dl python implementation

#!/usr/bin/env php
<?php
declare (strict_types = 1);
if ($argc !== 2 && $argc !== 3) {
    die("usage: {$argv[0]} url {int_version}\n");
}
$url = $argv[1];
$quality = (int)($argv[2] ?? -1);
class HC
{
    public $ch;
    public function __construct()
    {
        $this->ch = curl_init();
        curl_setopt_array($this->ch, array(
            CURLOPT_ENCODING => '',
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_COOKIEFILE => '',
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_VERBOSE => false
        ));
    }
    public function __destruct()
    {
        curl_close($this->ch);
    }
    public function fetch(string $url)
    {
        curl_setopt($this->ch, CURLOPT_URL, $url);
        return curl_exec($this->ch);
    }
};
$hc = new HC();
$html = $hc->fetch($url);
// playlist.source = "https://ztv-mcloud-mpl-s3.zadn.vn/9aVVgQFDDxU/whls/vod/480/lxgx4OHaPMKb9IVNfG/HaoLanTruyen_10_muxed.m3u8?authen=exp=1548875226~acl=/9aVVgQFDDxU/*~hmac=8c1864f2bcfe04c9bb306a2b1651acb5";
$domd = @DOMDocument::loadHTML($html);
$xp = new DOMXPath($domd);
$title = $xp->query("//div[@class='box-description']//strong")->item(0)->getAttribute("alt");
echo "title: {$title}\n";
$versions = array();
/*
                    playlist.sources.push({
                        label: "720p(VIP)",
                        disabled: true,
                        isHD: true,
                        index: 100
                    });
                playlist.sources.push({
                   label: "480p",
                   source: "https://ztv-mcloud-bf-s3.zadn.vn/mq1rFE38Xsc/635908c4cc8025de7c91/156b34621027f979a036/480/HaoLanTruyen_10_muxed.mp4?authen=exp=1549188788~acl=/mq1rFE38Xsc/*~hmac=3b0f9e0cfdc0ccf043f08b43d5dc3541",
                   index: 1
                });
 */
preg_match_all("/playlist\.sources\.push\s*\(\s*(\{[\s\S]*?\}\s*)\s*\)\s*\;/", $html, $matches);
if (!empty($matches)) {
    $matches = $matches[1];
    $matches = array_filter(array_map(function (string $str) {
        $str = preg_replace('/(\S+)\:([\s\"0-9]|(?:null))/', '"${1}":${2}', $str);
        return (json_decode($str, true) ?? []);
    }, $matches), function (array $data) {
        return (empty($data['disabled']) && !empty($data['label']) && !empty($data['source']));
    });
    foreach ($matches as $match) {
        $versions[] = array(
            'type' => 'direct',
            'quality' => $match['label'],
            'url' => $match['source'],
        );
    }
}


// playlist.source = "https://ztv-mcloud-mpl-s3.zadn.vn/9aVVgQFDDxU/whls/vod/480/lxgx4OHaPMKb9IVNfG/HaoLanTruyen_10_muxed.m3u8?authen=exp=1548875226~acl=/9aVVgQFDDxU/*~hmac=8c1864f2bcfe04c9bb306a2b1651acb5";
preg_match("/playlist\.source\s*\=\s*\"([^\"]*)/", $html, $matches);
$versionsURL = $matches[1];
$versions_raw = $hc->fetch($versionsURL);
$versions_raw = preg_split("/\r?\n/", $versions_raw, -1, PREG_SPLIT_NO_EMPTY);
for ($i = 1; $i < count($versions_raw); $i += 2) {
    preg_match('/NAME\=\"(.*?)\"/', $versions_raw[$i], $q);
    $q = $q[1];
    $u = 'https:' . $versions_raw[$i + 1];
    $versions[] = ['type' => 'm3u8', 'quality' => $q, 'url' => $u];
}
if (!isset($versions[$quality])) {
    echo "available version: \n";
    print_r($versions);
    echo "you must chose a version, as a number, add it as the last argument.\n";
    die(1);
}
if ($versions[$quality]["type"] === 'direct') {
    $cmd = "wget " . escapeshellarg($versions[$quality]['url']) . " -O " . escapeshellarg($title . "." . $versions[$quality]["quality"] . ".mp4");
    echo "{$cmd}\n";
    system($cmd);
} elseif ($versions[$quality]['type'] === 'm3u8') {
    $urls_raw = $hc->fetch($versions[$quality]['url']);
    $fname = $title . ".mp4";
    echo " saving to \"{$fname}\"\n";
    $fp = fopen($title . ".mp4", 'wb');
    $urls_raw = array_values(array_filter(preg_split("/\r?\n/", $urls_raw), function ($str) {
        return ('//' === substr($str, 0, 2));
    }));
//var_dump($urls_raw);

    for ($i = 0, $max = count($urls_raw); $i < $max; ++$i) {
        echo "\rdownloading: " . ($i + 1) . "/{$max}";
        fwrite($fp, $hc->fetch('https:' . $urls_raw[$i]));
    }
    echo " done!\n";
    fclose($fp);
}

(license, if you're looking for one: https://unlicense.org/UNLICENSE )

examples:

php vdl.php 'https://tv.zing.vn/video/Hao-Lan-Truyen-Tap-10/IWZEUOD7.html'
title: Hạo Lan Truyện - Tập 10 Vietsub
available version:
Array
(
    [0] => Array
        (
            [type] => direct
            [quality] => 360p
            [url] => https://ztv-mcloud-bf-s3.zadn.vn/F32TbEFuvIY/39ec5d719935706b2924/3855165c3219db478208/360/HaoLanTruyen_10_muxed.mp4?authen=exp=1549188788~acl=/F32TbEFuvIY/*~hmac=e45964ff18ac53b36bd6090f7e9c9020
        )

    [1] => Array
        (
            [type] => direct
            [quality] => 480p
            [url] => https://ztv-mcloud-bf-s3.zadn.vn/mq1rFE38Xsc/635908c4cc8025de7c91/156b34621027f979a036/480/HaoLanTruyen_10_muxed.mp4?authen=exp=1549188788~acl=/mq1rFE38Xsc/*~hmac=3b0f9e0cfdc0ccf043f08b43d5dc3541
        )

    [2] => Array
        (
            [type] => m3u8
            [quality] => 240p
            [url] => https://mcloud-hls-pl-3-ztv-aka.zdn.vn/tLCZVEubRa4/whls/vod/240/wk_kvPDhQcegAYXGQG/HaoLanTruyen_10_muxed.m3u8?authen=exp=1549275188~acl=/tLCZVEubRa4/*~hmac=4ac9c6f6fbfffb529d466546dd9f3eb9
        )

    [3] => Array
        (
            [type] => m3u8
            [quality] => 480p
            [url] => https://mcloud-hls-pl-3-ztv-aka.zdn.vn/0r7cJgVxuNA/whls/vod/480/yVJrwfnaPMKb9IVNfG/HaoLanTruyen_10_muxed.m3u8?authen=exp=1549275188~acl=/0r7cJgVxuNA/*~hmac=94255dbee530a69c7a6551e8e9d259c0
        )

    [4] => Array
        (
            [type] => m3u8
            [quality] => 360p
            [url] => https://mcloud-hls-pl-3-ztv-aka.zdn.vn/kCGyIZ6njhQ/whls/vod/360/S7LqP1Bgw-khgwcTom/HaoLanTruyen_10_muxed.m3u8?authen=exp=1549275188~acl=/kCGyIZ6njhQ/*~hmac=ae758552e0e9ec3471bcfc1b4f876c81
        )

)
you must chose a version, as a number, add it as the last argument.```



$ php vdl.php 'https://tv.zing.vn/video/Hao-Lan-Truyen-Tap-10/IWZEUOD7.html' 1
title: Hạo Lan Truyện - Tập 10 Vietsub
wget 'https://ztv-mcloud-bf-s3.zadn.vn/mq1rFE38Xsc/635908c4cc8025de7c91/156b34621027f979a036/480/HaoLanTruyen_10_muxed.mp4?authen=exp=1549188788~acl=/mq1rFE38Xsc/*~hmac=3b0f9e0cfdc0ccf043f08b43d5dc3541' -O 'Hạo Lan Truyện - Tập 10 Vietsub.480p.mp4'
--2019-02-02 01:09:05-- https://ztv-mcloud-bf-s3.zadn.vn/mq1rFE38Xsc/635908c4cc8025de7c91/156b34621027f979a036/480/HaoLanTruyen_10_muxed.mp4?authen=exp=1549188788~acl=/mq1rFE38Xsc/*~hmac=3b0f9e0cfdc0ccf043f08b43d5dc3541
Resolving ztv-mcloud-bf-s3.zadn.vn (ztv-mcloud-bf-s3.zadn.vn)... 49.213.106.142, 49.213.106.143
Connecting to ztv-mcloud-bf-s3.zadn.vn (ztv-mcloud-bf-s3.zadn.vn)|49.213.106.142|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://mcloud-bf-3-ztv-aka.zdn.vn/mq1rFE38Xsc/635908c4cc8025de7c91/156b34621027f979a036/480/HaoLanTruyen_10_muxed.mp4?authen=exp=1549188788~acl=/mq1rFE38Xsc/*~hmac=3b0f9e0cfdc0ccf043f08b43d5dc3541 [following]
--2019-02-02 01:09:07-- https://mcloud-bf-3-ztv-aka.zdn.vn/mq1rFE38Xsc/635908c4cc8025de7c91/156b34621027f979a036/480/HaoLanTruyen_10_muxed.mp4?authen=exp=1549188788~acl=/mq1rFE38Xsc/*~hmac=3b0f9e0cfdc0ccf043f08b43d5dc3541
Resolving mcloud-bf-3-ztv-aka.zdn.vn (mcloud-bf-3-ztv-aka.zdn.vn)... 193.212.174.33, 193.212.174.11
Connecting to mcloud-bf-3-ztv-aka.zdn.vn (mcloud-bf-3-ztv-aka.zdn.vn)|193.212.174.33|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 315942033 (301M) [video/mp4]
Saving to: ‘Hạo Lan Truyện - Tập 10 Vietsub.480p.mp4’

Hạo Lan Truyện - Tập 10 Vietsub.480p.mp4 1%[=> ] 3.81M 534KB/s eta 9m 29s```

$ php vdl.php 'https://tv.zing.vn/video/Hao-Lan-Truyen-Tap-10/IWZEUOD7.html' 4
title: Hạo Lan Truyện - Tập 10 Vietsub
 saving to "Hạo Lan Truyện - Tập 10 Vietsub.mp4"
downloading: 3/549
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.