Giter VIP home page Giter VIP logo

Comments (15)

mwindischbauer91 avatar mwindischbauer91 commented on July 18, 2024

me too ...

from youtubeextractor.

tmontney avatar tmontney commented on July 18, 2024

Same issue:

at System.Text.RegularExpressions.Match.Result(String replacement) at YoutubeExtractor.DownloadUrlResolver.GetHtml5PlayerVersion(JObject json) at YoutubeExtractor.DownloadUrlResolver.GetDownloadUrls(String videoUrl, Boolean decryptSignature)

from youtubeextractor.

noammaoz avatar noammaoz commented on July 18, 2024

I have found that the json don't contains args url_encoded_fmt_stream_map and adaptive_fmts so the functions GetStreamMap and GetAdaptiveStreamMap failed to provide the urls.

Any idea how to solve this?

from youtubeextractor.

noammaoz avatar noammaoz commented on July 18, 2024

I have tried to change the GetStreamMap from
json["args"]["url_encoded_fmt_stream_map"];
to
json["args"]["player_response"];
and then navigate to ["streamingData"]["formats"]
the same thing in GetAdaptiveStreamMap json["args"]["player_response"]; -> ["streamingData"]["adaptiveFormats"];
The function ExtractDownloadUrls is still failed because of the change of the structure.
Any idea how to solve this?

from youtubeextractor.

noammaoz avatar noammaoz commented on July 18, 2024

from youtubeextractor.

rizksobhi avatar rizksobhi commented on July 18, 2024

I was able to get around this by doing the following:
1- Replace ExtractDownloadUrls by the following:

private static IEnumerable<ExtractionInfo> ExtractDownloadUrls(JObject json)
        {
            var info = new List<ExtractionInfo>();

            var formats = GetStreamMap(json);
            var adaptiveFormats = GetAdaptiveStreamMap(json);

            ExtractInfo(info, formats);
            ExtractInfo(info, adaptiveFormats);

            return info;
        }
        

2- Add the following helper function:

        private static void ExtractInfo(List<ExtractionInfo> info, JArray items)
        {
            if (items != null)
            {
                foreach (var item in items)
                {
                    bool requiresDecryption = false;
                    var url = item["url"]?.ToString();
                    info.Add(new ExtractionInfo { RequiresDecryption = requiresDecryption, Uri = new Uri(url) });
                }
            }
        }

3- Replace GetAdaptiveStreamMap by the following

        private static JArray GetAdaptiveStreamMap(JObject json)
        {
            JArray adaptiveFormat = null;
            JToken streamMap = json["args"]["player_response"];

            string streamMapString = streamMap == null ? null : streamMap.ToString();

            if (streamMapString != null)
            {
                dynamic playerResponse = JsonConvert.DeserializeObject(streamMapString);
                adaptiveFormat = playerResponse?.streamingData?.adaptiveFormats;
            }

            return adaptiveFormat;
        }

4- Replace GetStreamMap by the following:

        private static JArray GetStreamMap(JObject json)
        {
            JToken streamMap = json["args"]["player_response"];

            string streamMapString = streamMap == null ? null : streamMap.ToString();

            if (streamMapString == null || streamMapString.Contains("been+removed"))
            {
                throw new Exception("Video is removed or has an age restriction.");
            }

            dynamic playerResponse = JsonConvert.DeserializeObject(streamMapString);

            return playerResponse.streamingData?.formats;
        }

5- Replace GetHtml5PlayerVersion by the following:

        private static string GetHtml5PlayerVersion(JObject json)
        {
            var regex = new Regex(@"player[-|_](.+?).js");

            string js = json["assets"]["js"].ToString();

            return regex.Match(js).Result("$1");
        }

My fix will work only for unencrypted contents. We still need to fix the isEncrypted attribute
Cheers

from youtubeextractor.

noammaoz avatar noammaoz commented on July 18, 2024

Thanks a lot for the response and solution.
the URL is not in var url = item["url"]?.ToString(); it should be
var url = item["url"]?.ToString();
if (url == null)
{
url = item["cipher"]?.ToString();
}

The Decipherer.cs - DecipherWithVersion need to change
from string jsUrl = string.Format("http://s.ytimg.com/yts/jsbin/player{0}.js", cipherVersion);
to string jsUrl = string.Format("http://s.ytimg.com/yts/jsbin/player_{0}.js", cipherVersion);

I have still having problem to download and i think it related to encrypted/signature. i'm getting 403 error.

from youtubeextractor.

thehighboy avatar thehighboy commented on July 18, 2024

Whats the link with the issue or are you having problems with all in general ?

from youtubeextractor.

noammaoz avatar noammaoz commented on July 18, 2024

for example: https://www.youtube.com/watch?v=DkeiKbqa02g

from youtubeextractor.

thehighboy avatar thehighboy commented on July 18, 2024

for example: https://www.youtube.com/watch?v=DkeiKbqa02g

i get it no problem
Annotation 2020-01-08 213157

i will download this library and see if i can fix for you.

from youtubeextractor.

noammaoz avatar noammaoz commented on July 18, 2024

Which library you are using?

from youtubeextractor.

thehighboy avatar thehighboy commented on July 18, 2024

Which library you are using?

im using my own code but when i started my project i used the decipher from this one.i am working on this one as i type and should be able to upload it tomorrow.

from youtubeextractor.

LinPolly avatar LinPolly commented on July 18, 2024

LinPolly/YoutubeExtractor

I fixed the structure change of Youtube. You can try it.

from youtubeextractor.

thehighboy avatar thehighboy commented on July 18, 2024

LinPolly/YoutubeExtractor

I fixed the structure change of Youtube. You can try it.

took a quick look at it and it did download noammaoz link.i see you never changed the get title does it ever return a title that way ? and if you get the cipher once you can reuse for the lifetime of the app.Thank you now i will continue my own app as it needs love too ;)

from youtubeextractor.

noammaoz avatar noammaoz commented on July 18, 2024

LinPolly/YoutubeExtractor

This library is working fine. Thanks a lot.

from youtubeextractor.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.