1. #1
    Avatar von exception
    Registriert seit
    27.03.2012
    Beiträge
    198
    Thanked 57 Times in 36 Posts

    Standard Youtube Download über Filsh

    Hallo, bin gerade dabei ein Snippet zu schreiben welches mir Youtube Videos über filsh.net herunterlädt.

    Vorgehensweise:
    -POST Parameter setzen
    -Request zur Erstellung eines "Download Tickets" durchführen
    -Request Token & Host Name des zugewiesenen Server holen(RegEx)
    -Request Status URL erstellen(Setzt sich aus Host Name & Token zusammen)

    Diese Status URL frage ich dann in einer Loop(mit 1 Sek. Delay) so lange ab, bis der Status nicht mehr auf "pending" ist. Das Problem an der ganzen Sache ist, das er den Status einfach nicht ändert... auch wenn ich die Loop 2 Minuten oder länger laufen lasse, da tut sich nix mehr...

    Anscheinend ist diese URL aber nicht die einzige, wo man den Status bekommt... Mit der Firefox Netzwerk Analyse kann ich sehen das ich wärend dem Downloaden/Converten des Videos folgende URL im Sekundentakt geladen wird: http://c6.filsh.net/api/process/3uSc...=1440132717977

    Hier sehen wir wieder das sich die URL mitunter aus Host Name & Token ID zusammen setzt. Jedoch werden hier 2 Parameter(jsoncallback, _) übergeben von denen ich aber nicht weiß von wo oder wie ich sie bekommen kann...

    Naja, hier jedenfalls mal mein Code:

    Code:
                //declare youtube url & video id
                string youtubeURL = "https://www.youtube.com/watch?v=";
                string videoID = "pJyQpAiMXkg";
    
                //declare filsh ticket
                string ticketURL = "http://de.filsh.net/api/tickets";
    
                //declare post data
                NameValueCollection postData = new NameValueCollection();
                postData.Add("url[]", youtubeURL + videoID);
                postData.Add("settings[format]", "mp3");
                postData.Add("settings[dimensions]", "original");
                postData.Add("settings[audioBitrate]", "original");
                postData.Add("settings[videoBitrate]", "original");
                postData.Add("settings[volume]", "original");
                postData.Add("settings[timeframeFrom]", string.Empty);
                postData.Add("settings[timeframeTo]", string.Empty);
                postData.Add("settings[url]=", string.Empty);
    
                //declare web client
                WebClient httpClient = new WebClient();
                httpClient.Encoding = Encoding.UTF8;
                httpClient.Proxy = null;
        
                //declare response vars
                string html = string.Empty;
                byte[] bytes = null;      
    
                //create ticket request
                try
                {
                    bytes = httpClient.UploadValues(ticketURL, "post", postData);
                    html = Encoding.UTF8.GetString(bytes);
                } catch(Exception e) {
                    Console.WriteLine("ERROR[0]: " + e.Message);
                    Console.ReadLine();
                    return;
                }
    
                //get request token
                Match tokenMT = Regex.Match(html, "\"token\":\"(?<token>.*?)\"");
                if (!tokenMT.Success) {
                    Console.WriteLine("ERROR[1]: Unable to receive token!");
                    Console.ReadLine();
                    return;
                }
    
                //set request token
                string reqToken = tokenMT.Groups["token"].Value;
    
                //get host name
                Match hostMT = Regex.Match(html, "\"hostname\":\"(?<host>.*?)\"");              
                if (!hostMT.Success) {
                    Console.WriteLine("ERROR[2]: Unable to receive host name!");
                    Console.ReadLine();
                    return;
                }
    
                //set host name
                string host = hostMT.Groups["host"].Value;
    
                //declare state url
                string stateURL = "http://" + host + "/api/process/" + reqToken + "/status";
    
        Wait:   
          
                //create state request
                try
                {
                    html = httpClient.DownloadString(stateURL);
                    Console.WriteLine(html);
                }
                catch (Exception e)
                {
                    Console.WriteLine("ERROR[3]: " + e.Message);
                    Console.ReadLine();
                }
    
                //check response text
                if (html == "{\"status\":\"pending\"}")
                {
                    Thread.Sleep(1000);   
                    goto Wait;
                }
    Wäre cool wenn jemand helfen kann!
    Ich will Geld haben und zwar so viel, das ich auch mal sagen kann das es Wichtigeres gibt...

  2. #2
    Avatar von DotNet
    Registriert seit
    10.06.2015
    Beiträge
    661
    Thanked 316 Times in 185 Posts

    Standard AW: Youtube Download über Filsh

    Geht es dir ums Lernen oder um die Lösung? Für letzteres ist deine Variante nämlich sowohl vom Aufwand als auch von der Flexibilität her alles andere als optimal, da würde ich mir mal das hier anschauen: https://github.com/flagbug/YoutubeExtractor
    Da kannst du mit ein paar wenigen Zeilen dir Infos über das Video auslesen, das Video herunterladen und sogar ganz easy den Fortschritt anzeigen, z.B. in einer Progressbar.

Ähnliche Themen

  1. Seiten wie filsh.net?
    Von SantaClauZ im Forum Internet und Technik
    Antworten: 13
    Letzter Beitrag: 11.09.2014, 01:08
  2. How to Download Gema gesperrte Musik von Youtube
    Von ulrikejunker im Forum Tutorials
    Antworten: 9
    Letzter Beitrag: 19.08.2014, 20:24
  3. Morddrohung über Youtube
    Von Tobe im Forum RealLife News
    Antworten: 28
    Letzter Beitrag: 27.11.2012, 22:17
  4. Youtube-Abo-Script über Cookies
    Von Baumstumpf im Forum Internet und Technik
    Antworten: 13
    Letzter Beitrag: 29.05.2012, 13:41
  5. Antworten: 2
    Letzter Beitrag: 12.05.2012, 17:54
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.