Mp3goo

Тема в разделе "Создание, продвижение", создана пользователем Darkensand, 14 янв 2019.

  1. TopicStarter Overlay
    Darkensand

    Darkensand VIP
    Отправить ЛС

    Регистрация:
    30 июн 2017
    Сообщения:
    55
    Симпатии:
    2
    Баллы:
    8
    всем привет кто знает что за модуль или поиск стоит на сайте MP3GOO двиг стоит WordPress
    Кто знает подскажите пожалуйста!
     
  2. newdancer

    newdancer
    Отправить ЛС

    Регистрация:
    9 июл 2017
    Сообщения:
    51
    Симпатии:
    4
    Баллы:
    8
    Интересный парсер youtube, тоже интересует этот вопрос
     
  3. TopicStarter Overlay
    Darkensand

    Darkensand VIP
    Отправить ЛС

    Регистрация:
    30 июн 2017
    Сообщения:
    55
    Симпатии:
    2
    Баллы:
    8
    ага + найти не могу нигде чет такого!
     
  4. igrovik

    igrovik
    Отправить ЛС

    Регистрация:
    28 июн 2017
    Сообщения:
    134
    Симпатии:
    49
    Баллы:
    28
    Где-то валялся когда-то, подобный парсер, для скачивания файлов с ютуб, но в работоспособности не уверен, + нужно затачивать под Дле.
     
  5. TopicStarter Overlay
    Darkensand

    Darkensand VIP
    Отправить ЛС

    Регистрация:
    30 июн 2017
    Сообщения:
    55
    Симпатии:
    2
    Баллы:
    8
    а для WordPress чет такое есть?
     
  6. igrovik

    igrovik
    Отправить ЛС

    Регистрация:
    28 июн 2017
    Сообщения:
    134
    Симпатии:
    49
    Баллы:
    28
    Навряд ли, только под заказ у кодера разве что!
     
  7. TopicStarter Overlay
    Darkensand

    Darkensand VIP
    Отправить ЛС

    Регистрация:
    30 июн 2017
    Сообщения:
    55
    Симпатии:
    2
    Баллы:
    8
  8. Ruhas

    Ruhas VIP
    Отправить ЛС

    Регистрация:
    8 фев 2018
    Сообщения:
    199
    Симпатии:
    28
    Баллы:
    28
  9. MainC0de

    MainC0de
    Отправить ЛС

    Регистрация:
    3 окт 2017
    Сообщения:
    62
    Симпатии:
    10
    Баллы:
    8
    @Ruhas, Смысла нет никакого. Парсер просто ищет по Ютубу ключевые слова запроса, выводит их на страницу и прячет видео, оставляя только звук. Поэтому ни закачки, ни прослушивания на моб. устройствах, когда экран заблокирован он не умеет. Так же работает кстати Bemusic, но он хотя бы выглядит красиво и информацию тянет с Last.fm.

    Из готовых парсеров более менее рабочие я нашел только 3 штуки по всему инету. Это MSE, парсер Zk.fm и парсер ВК через апи я.ws. Все остальное либо на заказ, либо без нужного функционала.
     
  10. newdancer

    newdancer
    Отправить ЛС

    Регистрация:
    9 июл 2017
    Сообщения:
    51
    Симпатии:
    4
    Баллы:
    8
  11. Ruhas

    Ruhas VIP
    Отправить ЛС

    Регистрация:
    8 фев 2018
    Сообщения:
    199
    Симпатии:
    28
    Баллы:
    28
    У него туго не только с индексацией но с многим другим. Я все эти движки прошёл лет пять ( года четыре назад точно) что би музик, этот двиг, ещё был один, там вообще был выбор формата скачиваемого файл MP3 MP4 , как оказалось, из этого нечего путного нет.
     
  12. CanceL

    CanceL Кодер
    Отправить ЛС

    Регистрация:
    20 янв 2018
    Сообщения:
    49
    Симпатии:
    22
    Баллы:
    8
    youtube downloader

    php-библиотека для скачивания видео с youtube.
    Код:
    <?php
    // YouTube is capitalized twice because that's how youtube itself does it:
    // https://developers.google.com/youtube/v3/code_samples/php
    class YouTubeDownloader
    {
        private $storage_dir;
        private $cookie_dir;
        private $client;
        private $itag_info = array(
            5 => "FLV 400x240",
            6 => "FLV 450x240",
            13 => "3GP Mobile",
            17 => "3GP 144p",
            18 => "MP4 360p",
            22 => "MP4 720p (HD)",
            34 => "FLV 360p",
            35 => "FLV 480p",
            36 => "3GP 240p",
            37 => "MP4 1080",
            38 => "MP4 3072p",
            43 => "WebM 360p",
            44 => "WebM 480p",
            45 => "WebM 720p",
            46 => "WebM 1080p",
            59 => "MP4 480p",
            78 => "MP4 480p",
            82 => "MP4 360p 3D",
            83 => "MP4 480p 3D",
            84 => "MP4 720p 3D",
            85 => "MP4 1080p 3D",
            91 => "MP4 144p",
            92 => "MP4 240p HLS",
            93 => "MP4 360p HLS",
            94 => "MP4 480p HLS",
            95 => "MP4 720p HLS",
            96 => "MP4 1080p HLS",
            100 => "WebM 360p 3D",
            101 => "WebM 480p 3D",
            102 => "WebM 720p 3D",
            120 => "WebM 720p 3D",
            127 => "TS Dash Audio 96kbps",
            128 => "TS Dash Audio 128kbps"
        );
        function __construct()
        {
            $this->storage_dir = sys_get_temp_dir();
            $this->cookie_dir = sys_get_temp_dir();
            $this->client = null;
        }
        function setStorageDir($dir)
        {
            $this->storage_dir = $dir;
        }
        // if URL: download it
        private function toHtml($html)
        {
        }
        // what identifies each request? user agent, cookies...
        public function curl($url)
        {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            //curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpfname);
            //curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpfname);
            //curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        }
        // TODO: remove this as it required PECL extension
        public static function head($url)
        {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_HEADER, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
            curl_setopt($ch, CURLOPT_NOBODY, 1);
            $result = curl_exec($ch);
            curl_close($ch);
            return http_parse_headers($result);
        }
        // accepts either raw HTML or url
        // <script src="//s.ytimg.com/yts/jsbin/player-fr_FR-vflHVjlC5/base.js" name="player/base"></script>
        public function getPlayerUrl($video_html)
        {
            if (strpos($video_html, 'http') === 0) {
                $video_html = $this->curl($video_html);
            }
            $player_url = null;
            // check what player version that video is using
            if (preg_match('@<script\s*src="([^"]+player[^"]+js)@', $video_html, $matches)) {
                $player_url = $matches[1];
                // relative protocol?
                if (strpos($player_url, '//') === 0) {
                    $player_url = 'http://' . substr($player_url, 2);
                } elseif (strpos($player_url, '/') === 0) {
                    // relative path?
                    $player_url = 'http://www.youtube.com' . $player_url;
                }
            }
            return $player_url;
        }
        // Do not redownload player.js everytime - cache it
        public function getPlayerHtml($video_html)
        {
            $player_url = $this->getPlayerUrl($video_html);
            $cache_path = sprintf('%s/%s', $this->storage_dir, md5($player_url));
            if (file_exists($cache_path)) {
                $contents = file_get_contents($cache_path);
                //return unserialize($contents);
            }
            $contents = $this->curl($player_url);
            // cache it too!
            file_put_contents($cache_path, serialize($contents));
            return $contents;
        }
        /*
         * Youtube Sep2018 Changes
        deDE:
            var aL={NI:function(a,b){a.splice(0,b)},jl:function(a){a.reverse()},l5:function(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c}}
            bL=function(a){a=a.split("");aL.jl(a,58);aL.NI(a,2);aL.l5(a,35);aL.NI(a,2);aL.jl(a,45);aL.l5(a,4);aL.jl(a,46);return a.join("")};
        ->$L=function(a,b,c){b=void 0===b?"":b;c=void 0===c?"":c;var d=new g.cL(a);a.match(/https:\/\/yt.akamaized.net/)||d.set("alr","yes");c&&d.set(b,bL(c));return d};
        */
        public function getSigDecodeFunctionName($player_html)
        {
            $pattern = '@yt\.akamaized\.net\/\)\s*\|\|\s*.*?\s*c\s*&&\s*d\.set\([^,]+\s*,\s*\([^\)]+\)\(([a-zA-Z0-9$]+)@is';
            if (preg_match($pattern, $player_html, $matches)) {
                $func_name = $matches[1];
                $func_name = preg_quote($func_name);
                return $func_name;
            }
            return null;
        }
        // convert JS code for signature decipher to PHP code
        public function getSigDecodeInstructions($player_html, $func_name)
        {
            // extract code block from that function
            // single quote in case function name contains $dollar sign
            // xm=function(a){a=a.split("");wm.zO(a,47);wm.vY(a,1);wm.z9(a,68);wm.zO(a,21);wm.z9(a,34);wm.zO(a,16);wm.z9(a,41);return a.join("")};
            if (preg_match('/' . $func_name . '=function\([a-z]+\){(.*?)}/', $player_html, $matches)) {
                $js_code = $matches[1];
                // extract all relevant statements within that block
                // wm.vY(a,1);
                if (preg_match_all('/([a-z0-9]{2})\.([a-z0-9]{2})\([^,]+,(\d+)\)/i', $js_code, $matches) != false) {
                    // must be identical
                    $obj_list = $matches[1];
                    //
                    $func_list = $matches[2];
                    // extract javascript code for each one of those statement functions
                    preg_match_all('/(' . implode('|', $func_list) . '):function(.*?)\}/m', $player_html, $matches2, PREG_SET_ORDER);
                    $functions = array();
                    // translate each function according to its use
                    foreach ($matches2 as $m) {
                        if (strpos($m[2], 'splice') !== false) {
                            $functions[$m[1]] = 'splice';
                        } elseif (strpos($m[2], 'a.length') !== false) {
                            $functions[$m[1]] = 'swap';
                        } elseif (strpos($m[2], 'reverse') !== false) {
                            $functions[$m[1]] = 'reverse';
                        }
                    }
                    // FINAL STEP! convert it all to instructions set
                    $instructions = array();
                    foreach ($matches[2] as $index => $name) {
                        $instructions[] = array($functions[$name], $matches[3][$index]);
                    }
                    return $instructions;
                }
            }
            return null;
        }
        public function decodeSignature($signature, $video_html)
        {
            $player_html = $this->getPlayerHtml($video_html);
            $func_name = $this->getSigDecodeFunctionName($player_html);
            // PHP instructions
            $instructions = $this->getSigDecodeInstructions($player_html, $func_name);
            foreach ($instructions as $opt) {
                $command = $opt[0];
                $value = $opt[1];
                if ($command == 'swap') {
                    $temp = $signature[0];
                    $signature[0] = $signature[$value % strlen($signature)];
                    $signature[$value] = $temp;
                } elseif ($command == 'splice') {
                    $signature = substr($signature, $value);
                } elseif ($command == 'reverse') {
                    $signature = strrev($signature);
                }
            }
            return trim($signature);
        }
        // this is in beta mode!!
        // TODO: move this to its own HttpClient class
        public function stream($id)
        {
            $links = $this->getDownloadLinks($id, "mp4");
            if (count($links) == 0) {
                die("no url found!");
            }
            // grab first available MP4 link
            $url = $links[0]['url'];
            // request headers
            $headers = array(
                'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0'
            );
            if (isset($_SERVER['HTTP_RANGE'])) {
                $headers[] = 'Range: ' . $_SERVER['HTTP_RANGE'];
            }
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
            // we deal with this ourselves
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            // whether request to video success
            $headers = '';
            $headers_sent = false;
            $success = false;
            curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $data) use (&$headers, &$headers_sent) {
                $headers .= $data;
                // this should be first line
                if (preg_match('@HTTP\/\d\.\d\s(\d+)@', $data, $matches)) {
                    $status_code = $matches[1];
                    // status=ok or partial content
                    if ($status_code == 200 || $status_code == 206) {
                        $headers_sent = true;
                        header(rtrim($data));
                    }
                } else {
                    // only headers we wish to forward back to the client
                    $forward = array('content-type', 'content-length', 'accept-ranges', 'content-range');
                    $parts = explode(':', $data, 2);
                    if ($headers_sent && count($parts) == 2 && in_array(trim(strtolower($parts[0])), $forward)) {
                        header(rtrim($data));
                    }
                }
                return strlen($data);
            });
            // if response is empty - this never gets called
            curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($curl, $data) use (&$headers_sent) {
                if ($headers_sent) {
                    echo $data;
                    flush();
                }
                return strlen($data);
            });
            $ret = @curl_exec($ch);
            $error = curl_error($ch);
            curl_close($ch);
            // if we are still here by now, return status_code
            return true;
        }
        // extract youtube video_id from any piece of text
        public function extractVideoId($str)
        {
            if (preg_match('/[a-z0-9_-]{11}/i', $str, $matches)) {
                return $matches[0];
            }
            return false;
        }
        // selector by format: mp4 360,
        private function selectFirst($links, $selector)
        {
            $result = array();
            $formats = preg_split('/\s*,\s*/', $selector);
            // has to be in this order
            foreach ($formats as $f) {
                foreach ($links as $l) {
                    if (stripos($l['format'], $f) !== false || $f == 'any') {
                        $result[] = $l;
                    }
                }
            }
            return $result;
        }
        // some of the data may need signature decoding
        public function parseStreamMap($video_html, $video_id)
        {
            $stream_map = array();
            $result = array();
            // http://stackoverflow.com/questions/35608686/how-can-i-get-the-actual-video-url-of-a-youtube-live-stream
            if (preg_match('@url_encoded_fmt_stream_map["\']:\s*["\']([^"\'\s]*)@', $video_html, $matches)) {
                $stream_map = $matches[1];
            } else {
                $gvi = $this->curl("https://www.youtube.com/get_video_info?el=embedded&eurl=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D" . urlencode($video_id) . "&video_id={$video_id}");
                if (preg_match('@url_encoded_fmt_stream_map=([^\&\s]+)@', $gvi, $matches_gvi)) {
                    $stream_map = urldecode($matches_gvi[1]);
                }
            }
            if ($stream_map) {
                $parts = explode(",", $stream_map);
                foreach ($parts as $p) {
                    $query = str_replace('\u0026', '&', $p);
                    parse_str($query, $arr);
                    $result[] = $arr;
                }
                return $result;
            }
            // TODO:
            // elseif (strpos($html, 'player-age-gate-content') !== false) { // age-gate
            // youtube must have changed something
            return $result;
        }
        // options | deep_links | append_redirector
        // TODO: make it accept video_html too
        public function getDownloadLinks($video_id, $selector = false)
        {
            // you can input HTML of /watch? page directory instead of id
            $video_id = $this->extractVideoId($video_id);
            $video_html = $this->curl("https://www.youtube.com/watch?v={$video_id}");
            $result = array();
            $url_map = $this->parseStreamMap($video_html, $video_id);
            foreach ($url_map as $arr) {
                $url = $arr['url'];
                if (isset($arr['sig'])) {
                    $url = $url . '&signature=' . $arr['sig'];
                } elseif (isset($arr['signature'])) {
                    $url = $url . '&signature=' . $arr['signature'];
                } elseif (isset($arr['s'])) {
                    $signature = $this->decodeSignature($arr['s'], $video_html);
                    $url = $url . '&signature=' . $signature;
                }
                // redirector.googlevideo.com
                //$url = preg_replace('@(\/\/)[^\.]+(\.googlevideo\.com)@', '$1redirector$2', $url);
                $itag = $arr['itag'];
                $format = isset($this->itag_info[$itag]) ? $this->itag_info[$itag] : 'Unknown';
                $result[$itag] = array(
                    'url' => $url,
                    'format' => $format
                );
            }
            // do we want all links or just select few?
            if ($selector) {
                return $this->selectFirst($result, $selector);
            }
            return $result;
        }
    }
    Необходимиы PHP Зависимости: cURL

    Код:
    $yt = new YouTubeDownloader();
    
    $links = $yt->getDownloadLinks("https://www.youtube.com/watch?v=QxsmWxxouIM");
    
    var_dump($links);
    Код:
    array(5) {
      [22]=>
      array(2) {
        ["url"]=>
        string(670) "https://r3---sn-vgqs7ney.googlevideo.com/videoplayback?ratebypass=yes&requiressl=yes&initcwndbps=1142500&nh=IgpwZjAxLm9yZDM1Kg42Ni4yMDguMjI4LjIwMQ&key=yt6&mime=video%2Fmp4&mn=sn-vgqs7ney&mm=31&id=o-APybfQxBq_Uf0UwtAWdBuT2hoXzus5lvuXnd9VSmh5Dl&ip=67.184.200.25&gcr=us&sparams=dur%2Cei%2Cgcr%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mt=1482861742&ms=au&pl=16&itag=22&ei=Fq1iWM-PIsLyugLMor-gBA&mv=m&source=youtube&upn=pDkyvSW9InM&dur=265.357&ipbits=0&expire=1482883446&lmt=1478829845344913&signature=A27686411B20AD4EB61A29BC695509DB4D003681.9AE606614F809319EEE0B230BFCEFD09F5C39E12"
        ["format"]=>
        string(13) "MP4 720p (HD)"
      }
      [43]=>
      array(2) {
        ["url"]=>
        string(704) "https://r3---sn-vgqs7ney.googlevideo.com/videoplayback?ratebypass=yes&requiressl=yes&initcwndbps=1142500&nh=IgpwZjAxLm9yZDM1Kg42Ni4yMDguMjI4LjIwMQ&key=yt6&gir=yes&mime=video%2Fwebm&mn=sn-vgqs7ney&mm=31&id=o-APybfQxBq_Uf0UwtAWdBuT2hoXzus5lvuXnd9VSmh5Dl&clen=23934795&ip=67.184.200.25&gcr=us&sparams=clen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mt=1482861742&ms=au&pl=16&itag=43&ei=Fq1iWM-PIsLyugLMor-gBA&mv=m&source=youtube&upn=pDkyvSW9InM&dur=0.000&ipbits=0&expire=1482883446&lmt=1466552369088504&signature=4A9B43F989EF4DB937C56AC889BF9AFAA1363439.87B358B93A19E3C292BE823A2E7FD505E527956C"
        ["format"]=>
        string(9) "WebM 360p"
      }
      [18]=>
      array(2) {
        ["url"]=>
        string(705) "https://r3---sn-vgqs7ney.googlevideo.com/videoplayback?ratebypass=yes&requiressl=yes&initcwndbps=1142500&nh=IgpwZjAxLm9yZDM1Kg42Ni4yMDguMjI4LjIwMQ&key=yt6&gir=yes&mime=video%2Fmp4&mn=sn-vgqs7ney&mm=31&id=o-APybfQxBq_Uf0UwtAWdBuT2hoXzus5lvuXnd9VSmh5Dl&clen=18431345&ip=67.184.200.25&gcr=us&sparams=clen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mt=1482861742&ms=au&pl=16&itag=18&ei=Fq1iWM-PIsLyugLMor-gBA&mv=m&source=youtube&upn=pDkyvSW9InM&dur=265.357&ipbits=0&expire=1482883446&lmt=1478827692757115&signature=0C2203FABCEBC01A0B154C109EA7A03EBB778A17.7FFE657A41B06ABB4729E03253A92E1AA5562D3E"
        ["format"]=>
        string(8) "MP4 360p"
      }
      [36]=>
      array(2) {
        ["url"]=>
        string(677) "https://r3---sn-vgqs7ney.googlevideo.com/videoplayback?requiressl=yes&initcwndbps=1142500&nh=IgpwZjAxLm9yZDM1Kg42Ni4yMDguMjI4LjIwMQ&key=yt6&gir=yes&mime=video%2F3gpp&mn=sn-vgqs7ney&mm=31&id=o-APybfQxBq_Uf0UwtAWdBuT2hoXzus5lvuXnd9VSmh5Dl&clen=7400500&ip=67.184.200.25&gcr=us&sparams=clen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&mt=1482861742&ms=au&pl=16&itag=36&ei=Fq1iWM-PIsLyugLMor-gBA&mv=m&source=youtube&upn=pDkyvSW9InM&dur=265.404&ipbits=0&expire=1482883446&lmt=1466551971126275&signature=121F4D6F18C10D31951E2C2A857E52351BCC1A8C.B6EFCCB6734190053A0F3980FC67D3E508EA30FF"
        ["format"]=>
        string(7) "Unknown"
      }
      [17]=>
      array(2) {
        ["url"]=>
        string(677) "https://r3---sn-vgqs7ney.googlevideo.com/videoplayback?requiressl=yes&initcwndbps=1142500&nh=IgpwZjAxLm9yZDM1Kg42Ni4yMDguMjI4LjIwMQ&key=yt6&gir=yes&mime=video%2F3gpp&mn=sn-vgqs7ney&mm=31&id=o-APybfQxBq_Uf0UwtAWdBuT2hoXzus5lvuXnd9VSmh5Dl&clen=2661359&ip=67.184.200.25&gcr=us&sparams=clen%2Cdur%2Cei%2Cgcr%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&mt=1482861742&ms=au&pl=16&itag=17&ei=Fq1iWM-PIsLyugLMor-gBA&mv=m&source=youtube&upn=pDkyvSW9InM&dur=265.404&ipbits=0&expire=1482883446&lmt=1466551946325771&signature=9C0017C6EE3EC754BCB73E4546483807143CC495.A738E50D2B2C9073E9369A8828BA780B6BA453F7"
        ["format"]=>
        string(8) "3GP 144p"
      }
    }
     
    Ruslan, MainC0de и Darkensand нравится это.
  13. MainC0de

    MainC0de
    Отправить ЛС

    Регистрация:
    3 окт 2017
    Сообщения:
    62
    Симпатии:
    10
    Баллы:
    8
    @CanceL, Полезно, спасибо. Жаль, что мп3 не умеет.
     
  14. CanceL

    CanceL Кодер
    Отправить ЛС

    Регистрация:
    20 янв 2018
    Сообщения:
    49
    Симпатии:
    22
    Баллы:
    8
    MainC0de нравится это.
  15. MainC0de

    MainC0de
    Отправить ЛС

    Регистрация:
    3 окт 2017
    Сообщения:
    62
    Симпатии:
    10
    Баллы:
    8
    @CanceL, Инициализация не проходит. Должно перекидывать на страницу админа, но просто голая html страница вместо этого. Требования все выполнены, в консоли ошибок нету. Будем разбираться..
     
  16. CanceL

    CanceL Кодер
    Отправить ЛС

    Регистрация:
    20 янв 2018
    Сообщения:
    49
    Симпатии:
    22
    Баллы:
    8
    Если вы о theabhisheksingh/youtube-mp3-downloader-pro (не тестировал!), нашел другое:

     
    Darkensand нравится это.
  17. MainC0de

    MainC0de
    Отправить ЛС

    Регистрация:
    3 окт 2017
    Сообщения:
    62
    Симпатии:
    10
    Баллы:
    8
    @CanceL, с этим получше, код кстати почти такой же. Инициализацию проходит, потом появляется приглашение в админку и потом при нажатии на ссылку админки выдает 404 The requested URL /$admin was not found on this server. Урл как-то странно выглядит..

    P.S. Разобрался. Все работает. Но есть одно "но". Он хочет "Purchase code". Где ж я ему возьму? :)
     
    Последнее редактирование: 15 янв 2019
  18. MainC0de

    MainC0de
    Отправить ЛС

    Регистрация:
    3 окт 2017
    Сообщения:
    62
    Симпатии:
    10
    Баллы:
    8
    В смысле ОК? Без кода активации работает конвертер?
     
  19. CanceL

    CanceL Кодер
    Отправить ЛС

    Регистрация:
    20 янв 2018
    Сообщения:
    49
    Симпатии:
    22
    Баллы:
    8
    попробуй что небудь ввести)
     
  20. MainC0de

    MainC0de
    Отправить ЛС

    Регистрация:
    3 окт 2017
    Сообщения:
    62
    Симпатии:
    10
    Баллы:
    8
    Пробывал. Он вообще не сохраняет никаких настроек в админке. Хотя пишет, что настройки успешно применены. Я уже на конфиги права на запись поставил, пофиг ему..