Как получить URL-адрес mp4 для видео Youtube с помощью API Youtube v3

Как получить полный URL-адрес mp4, чтобы воспроизвести видео из его фактического местоположения в моем приложении, используя какой-то другой источник, кроме Youtube. API gdata/youtube устарел, поэтому у меня проблемы. Любая помощь будет оценена. Спасибо.

+21
источник поделиться
7 ответов

я сделал очень простой API: https://gist.github.com/el3zahaby/9e60f1ae3168c38cc0f0054c15cd6a83

Например: ссылка на видео YouTube: https://www.youtube.com/watch?v= YGCLs9Bt_KY

сейчас, чтобы получить прямую ссылку

вам нужно вызвать API, как это:

https://script-url.com/?url=https://www.youtube.com/watch?v=YGCLs9Bt_KY

возвращает:

[
    {
        "url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&signature=81D86D3BC3D34D8A3B865464BE7BC54F34C1B0BC.7316033C2DD2F65E4D345CFA890257B63D7FE2A2&mt=1522999783&expire=1523021537&sparams=dur%2Cei%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cexpire&requiressl=yes&ei=gSLHWvuxDMOUVYaTqYgB&dur=244.204&pl=22&itag=22&ip=185.27.134.50&lmt=1522960451860848&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&ratebypass=yes&ms=au%2Conr&fvip=2&source=youtube&mv=m&ipbits=0&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&mime=video%2Fmp4&c=WEB&initcwndbps=710000",
        "quality": "hd720",
        "itag": "22",
        "type": "video\/mp4; codecs=\"avc1.64001F, mp4a.40.2\""
    },
    {
        "url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cexpire&itag=43&ratebypass=yes&fvip=2&ipbits=0&mime=video%2Fwebm&initcwndbps=710000&signature=71DC48B9BF4B2E3ED46FE0A4CD36FE027DACF31E.4624B7B4BCB947336CEB029E9958B136F79759EB&clen=24203231&requiressl=yes&dur=0.000&pl=22&ip=185.27.134.50&lmt=1522961642553275&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
        "quality": "medium",
        "itag": "43",
        "type": "video\/webm; codecs=\"vp8.0, vorbis\""
    },
    {
        "url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cexpire&itag=18&ratebypass=yes&fvip=2&ipbits=0&mime=video%2Fmp4&initcwndbps=710000&signature=C83DE33E3DC80981A65DB3FE4E6B3A48BF7500E4.361D0EE6210B30D3D3A80F43228DEF1BD20691A4&clen=15954979&requiressl=yes&dur=244.204&pl=22&ip=185.27.134.50&lmt=1522960340235683&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
        "quality": "medium",
        "itag": "18",
        "type": "video\/mp4; codecs=\"avc1.42001E, mp4a.40.2\""
    },
    {
        "url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cexpire&itag=36&fvip=2&ipbits=0&mime=video%2F3gpp&initcwndbps=710000&signature=3E993D911492DA039A16BB26182ACDC6C6A04FCC.BFB9728C71CD03970B0F15AFD51A7355F9D3F899&clen=6759799&requiressl=yes&dur=244.273&pl=22&ip=185.27.134.50&lmt=1522957367267598&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
        "quality": "small",
        "itag": "36",
        "type": "video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
    },
    {
        "url": "https:\/\/r10---sn-aigllnlr.googlevideo.com\/videoplayback?key=yt6&mt=1522999783&gir=yes&expire=1523021537&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cexpire&itag=17&fvip=2&ipbits=0&mime=video%2F3gpp&initcwndbps=710000&signature=810D13A2C507A4EA220E6DA895B39B237FA22DAF.898D020851087CF3C10BC6E3ED7360736A239904&clen=2443931&requiressl=yes&dur=244.273&pl=22&ip=185.27.134.50&lmt=1522957365473654&ei=gSLHWvuxDMOUVYaTqYgB&ms=au%2Conr&source=youtube&mv=m&id=o-AAoaDzyDCVXS404wfqZoCIdolGU-NM3-4yDxC0t868iL&mm=31%2C26&mn=sn-aigllnlr%2Csn-5hne6nsy&c=WEB",
        "quality": "small",
        "itag": "17",
        "type": "video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
    }
]

Обновить:

чтобы увидеть исходный код:

GIST: https://gist.github.com/el3zahaby/9e60f1ae3168c38cc0f0054c15cd6a83

+20
источник

Просто нашел этот полезный онлайн-инструмент:

https://weibomiaopai.com/online-video-downloader/youtube

Он имеет даже API, который можно использовать (в соответствии с политикой справедливого использования).

https://uploadbeta.com/api/video/?cached&video=https://www.youtube.com/watch?v=A4HnJWou-zA

возвращает:

{"host":"youtube.com","url":"https:\/\/r7---sn-aigllnzz.googlevideo.com\/videoplayback?mime=video%2Fmp4&key=yt6&nh=IgpwcjAzLmxocjE0KgkxMjcuMC4wLjE&ratebypass=yes&dur=572.023&clen=50056536&ei=h4USWJWFD6jgigaznbKQAg&source=youtube&initcwndbps=1032500&requiressl=yes&ipbits=0&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&lmt=1449751349064477&ms=au&itag=18&mt=1477608646&upn=u_oP6elD68k&mv=m&id=o-AELeRAI92RCDYH53_v2FnLLEcougM-nuCT4rjkJjheds&gir=yes&pl=19&expire=1477630439&mm=31&ip=78.157.200.133&mn=sn-aigllnzz&signature=B148629A698BB964393DF0BE595E7A8EAF8B73AC.719EFB797D2829AC81AEDDB3683D895040EE33D9"}

Документация по API: https://weibomiaopai.com/download-video-parser.php#api

+10
источник
другие ответы

Связанные вопросы


Похожие вопросы

Для Local на Java/Android, вот как я достиг этого, кредит переходит к @abdo-el-zahaby. Я преобразовал его php-скрипт в ~ эквивалентный java-код, который использует okhttp-клиент для получения URL-адресов.

final String videoInfoUrl = "http://www.youtube.com/get_video_info?video_id=some_video_id&el=embedded&ps=default&eurl=&gl=US&hl=en";
                Request request = new Request.Builder()
                        .cacheControl(CacheControl.FORCE_NETWORK)
                        .url(videoInfoUrl)
                        .build();
                final Response response = okHttpClient.newCall(request).execute();
                InputStream inputStream = response.body().byteStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                final StringBuilder contentBuilder = new StringBuilder();
                while ((line = bufferedReader.readLine()) != null) {
                    contentBuilder.append(line);
                }

                final String streamKey = "url_encoded_fmt_stream_map";
                final Map<String, String> map = new HashMap<>();
                final String content = contentBuilder.toString();
                String[] ampSplit = content.split("&");
                for (String s : ampSplit) {
                    printDivider();
                    final String[] equalsPlit = s.split("=");
                    if (equalsPlit.length >= 2) {
                        String key;
                        String value;
                        key = equalsPlit[0];
                        value = equalsPlit[1];
                        map.put(key, value);
                    }
                    printDivider();
                }
                int count = 0;
                if (map.containsKey(streamKey)) {
                    String[] streams = map.get(streamKey).split(",");
                    for (String stream : streams) {

                        String[] streamSplit = stream.split("&");
                        for (String s : streamSplit) {
                            printDivider();
                            final String urlDecoded = URLDecoder.decode(s, "UTF-8");
                            String[] details = urlDecoded.split(",");
                            for (String detail : details) {
                                System.out.println("Detail " + URLDecoder.decode(detail, "UTF-8"));
                                final String urlContent= URLDecoder.decode(detail, "UTF-8");
                                final String url = urlContent.substring(urlContent.indexOf("http"), urlContent.indexOf(";"));
                                mp4Url.put(Integer.toString(count++), url);
                            }

                        }
                        printDivider();
                    }
                }

Это код, который я использую для загрузки и хранения в SDCard/внутренней памяти

Request request = new Request.Builder()
              .cacheControl(CacheControl.FORCE_NETWORK)
              .url(url)
              .build();
          final Response response = okHttpClient.newCall(request).execute();
          InputStream inputStream = response.body().byteStream();
          final File newFile = new File(location);
          boolean created = newFile.createNewFile();
          System.out.println(location + " new file created: " + created);

          byte[] buff = new byte[4096];
          long downloaded = 0;
          long target = response.body().contentLength();

          System.out.println("File size is: " + Long.toString(target));
          OutputStream outStream = new FileOutputStream(newFile);
          while (true) {

            int read = inputStream.read(buff);
            if (read == -1) {
              break;
            }
            outStream.write(buff, 0, read);
            //write buff
            downloaded += read;
          }

          System.out.println("Target: " + target +", Downloaded: " + downloaded);
          outStream.flush();
+2
источник

Извините, сэр, вы не можете сделать это с помощью youtube api v3. вы должны использовать URL-адрес youtube, который не является api, но здесь вы можете получить все видеоролики, связанные с этим. Видеть http://www.youtube.com/get_video_info?&video_id= '. $My_id '&. ASV = 3 & эль = detailpage & гл = ru

Или вы можете сделать, чтобы получить ссылку на скачивание видео, даже если она закрыта или не разрешена для вашей страны 1-й: перейдите на любую веб-страницу ссылки видео youtube https://www.youtube.com/watch?v=9mdJV5-eias

2nd: просмотр источника этой страницы

3: 188 или 187, где вы найдете исходные коды Javascript, где также доступно местоположение видео с форматом mp4.

Вы можете сделать вторую идею через simplehtmldom и некоторые php-функции. и первый из них можно получить, используя curl, который легко, но немного затруднительно с помощью php. Спасибо, что это поможет вам.

+1
источник

... Получить Youtube mp4 URL для видео на YouTube противоречит их Условиям предоставления услуг, поэтому иногда их API не поддерживает это. Вы можете увидеть страницу со ссылкой относится к Youtube ToS, которая гласит:

Но в прошлом месяце мне пришлось использовать YouTube API для загрузки видео на сайте FbTube. Вы можете увидеть здесь.

Загрузка с YouTube - это простая однострочная версия.

>>> from pytube import YouTube
>>> YouTube('https://youtu.be/9bZkp7q19f0').streams.first().download()
>>> yt = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
>>> yt.streams
... .filter(progressive=True, file_extension='mp4')
... .order_by('resolution')
... .desc()
... .first()
... .download()
-1
источник

Похоже, что этот по-прежнему работает на 20190509 https://www.codexworld.com/download-youtube-video-using-php/

... хотя MP4, который он загружает, не может быть воспроизведен - так что скрипт может потребоваться обновить тоже. Отзовусь, если получу работу.

-1
источник

Я не знаю, как это работает, но зайдите https://podsync.net/.

Когда вы вводите ссылку на плейлист youtube, он делает некоторую магию и генерирует ссылку mp4, которая будет использоваться подлодкими подкастов. Изучите возвращенный файл xml и вы увидите строки, подобные этому для каждого видео в плейлисте:

<enclosure url="http://podsync.net/download/[random-letters]/[video-id].mp4" length="x" type="video/mp4"></enclosure>

По моему опыту, этот URL-адрес работает независимо от того, какой видео-идентификатор вы используете.

-3
источник

Посмотрите другие вопросы по меткам или Задайте вопрос