2016-03-29 28 views
1

Ich versuche, MP3 von http://www.audiodump.com/ herunterladen. Die Seite hat viele Umleitungen. Aber ich habe es geschafft, dass ein Teil davon funktionierte. Dies ist meine Methode, um alle Informationen wie DL-Links, Titel, MP3-Dauer zu erhalten.Herunterladen von Datei von Umleiten von URLs

private void _InetGetHTMLSearch(string sArtist) 
{ 
    if(_AudioDumpQuery == string.Empty) 
    { 
     //return string.Empty; 
    } 
    string[] sStringArray; 
    string sResearchURL = "http://www.audiodump.biz/music.html?" + _AudioDumpQuery + sArtist.Replace(" ", "+"); 
    string aRet; 
    HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(sResearchURL); 
    webReq.Referer = "http://www.audiodump.com/"; 
    try 
    { 
     webReq.CookieContainer = new CookieContainer(); 
     webReq.Method = "GET"; 
     using (WebResponse response = webReq.GetResponse()) 
     { 
      using (Stream stream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(stream); 
       aRet = reader.ReadToEnd(); 
       //Console.WriteLine(aRet); 
       string[] aTable = _StringBetween(aRet, "<BR><table", "table><BR>", RegexOptions.Singleline); 
       if (aTable != null) 
       { 
        string[] aInfos = _StringBetween(aTable[0], ". <a href=\"", "<a href=\""); 
        if (aInfos != null) 
        { 
         for(int i = 0; i < aInfos.Length; i++) 
         { 
          aInfos[i] = aInfos[i].Replace("\">", "*"); 
          aInfos[i] = aInfos[i].Replace("</a> (", "*"); 
          aInfos[i] = aInfos[i].Remove(aInfos[i].Length - 2); 

          sStringArray = aInfos[i].Split('*'); 

          aLinks.Add(sStringArray[0]); 
          aTitles.Add(sStringArray[1]); 

          sStringArray[2] = sStringArray[2].Replace("`", "'"); 
          sStringArray[2] = sStringArray[2].Replace("dont", "don't"); 
          sStringArray[2] = sStringArray[2].Replace("lets", "let's"); 
          sStringArray[2] = sStringArray[2].Replace("cant", "can't"); 
          sStringArray[2] = sStringArray[2].Replace("shes", "she's"); 
          sStringArray[2] = sStringArray[2].Replace("aint", "ain't"); 
          sStringArray[2] = sStringArray[2].Replace("didnt", "didn't"); 
          sStringArray[2] = sStringArray[2].Replace("im", "i'm"); 
          sStringArray[2] = sStringArray[2].Replace("youre", "you're"); 
          sStringArray[2] = sStringArray[2].Replace("ive", "i've"); 
          sStringArray[2] = sStringArray[2].Replace("youll", "you'll"); 
          sStringArray[2] = sStringArray[2].Replace("&#39;", "'"); 
          sStringArray[2] = sStringArray[2].Replace("'", "simplequotes"); 
          sStringArray[2] = sStringArray[2].Replace("vk.com", ""); 
          sStringArray[2] = _StringReplaceCyrillicChars(sStringArray[2]); 
          sStringArray[2] = Regex.Replace(sStringArray[2], @"<[^>]+>|&nbsp;", "").Trim(); 
          sStringArray[2] = Regex.Replace(sStringArray[2], @"\s{2,}", " "); 
          sStringArray[2] = sStringArray[2].TrimStart('\''); 
          sStringArray[2] = sStringArray[2].TrimStart('-'); 
          sStringArray[2] = sStringArray[2].TrimEnd('-'); 
          sStringArray[2] = sStringArray[2].Replace("- -", "-"); 
          sStringArray[2] = sStringArray[2].Replace("http", ""); 
          sStringArray[2] = sStringArray[2].Replace("www", ""); 
          sStringArray[2] = sStringArray[2].Replace("mp3", ""); 
          sStringArray[2] = sStringArray[2].Replace("simplequotes", "'"); 

          aDurations.Add(sStringArray[2]); 
         } 
        } 
        else 
        { 
         //Console.WriteLine("Debug"); 
        } 
       } 
       else 
       { 
        //Console.WriteLine("Debug 2"); 
       } 

       //return aRet; 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     //return null; 
     ////Console.WriteLine("Debug message: " + ex.Message); 
    } 
} 

Ich hatte einfach Referrer hinzufügen, um die Suche von einer Umleitung webReq.Referer = "http://www.audiodump.com/"; jedoch zu verhindern, wenn ich das MP3-Format herunterladen möchte ich es nicht funktioniert bekommen. Die URLs sind korrekt und werden mit denen überprüft, die ich erhalte, wenn ich sie manuell statt programmatisch herunterlade. Das ist mein mp3 download Teil:

private void _DoDownload(string dArtist, ref string dPath) 
{ 
    if (!Contain && skip <= 3 && !Downloading) 
    { 
     Random rnd = new Random(); 
     int Link = rnd.Next(5); 
     _InetGetHTMLSearch(dArtist); 
     Console.WriteLine("--------------------------------> " + aLinks[0]); 
     string path = mp3Path + "\\" + dArtist + ".mp3"; 
     if (DownloadOne(aLinks[Link], path, false)) 
     { 
      hTimmer.Start(); 
      Downloading = true; 
     } 
    } 
    else if (Downloading) 
    { 
     int actualBytes = strm.Read(barr, 0, arrSize); 
     fs.Write(barr, 0, actualBytes); 
     bytesCounter += actualBytes; 
     double percent = 0d; 
     if (fileLength > 0) 
      percent = 
       100.0d * bytesCounter/
       (preloadedLength + fileLength); 
     label1.Text = Math.Round(percent).ToString() + "%"; 
     if (Math.Round(percent) >= 100) 
     { 
      string path = mp3Path + "\\" + dArtist + ".mp3"; 
      label1.Text = ""; 
      dPath = path; 
      aLinks.Clear(); 
      hTimmer.Stop(); 
      hTimmer.Reset(); 
      fs.Flush(); 
      fs.Close(); 
      lastArtistName = "N/A"; 
      Downloading = false; 
     } 
     if (Math.Round(percent) <= 1) 
     { 
      if (hTimmer.ElapsedMilliseconds >= 3000) 
      { 
       string path = mp3Path + "\\" + dArtist + ".mp3"; 
       hTimmer.Stop(); 
       hTimmer.Reset(); 
       fs.Flush(); 
       fs.Close(); 
       File.Delete(path); 
       Contain = false; 
       skip += 1; 
       Downloading = false; 
      } 
     } 
    } 
} 

private static string ConvertUrlToFileName(string url) 
{ 
    string[] terms = url.Split(
     new string[] { ":", "//" }, 
     StringSplitOptions.RemoveEmptyEntries); 
    string fname = terms[terms.Length - 1]; 
    fname = fname.Replace('/', '.'); 
    return fname; 
} //ConvertUrlToFileName 

private static long GetExistingFileLength(string filename) 
{ 
    if (!File.Exists(filename)) return 0; 
    FileInfo info = new FileInfo(filename); 
    return info.Length; 
} //GetExistingFileLength 

private static bool DownloadOne(string url, string existingFilename, bool quiet) 
{ 
    ServicePointManager.DefaultConnectionLimit = 20; 
    HttpWebRequest webRequest; 
    HttpWebResponse webResponse; 
    IWebProxy proxy = null; //SA??? 
          //fmt = CreateFormat(
          //"{0}: {1:#} of {2:#} ({3:g3}%)", "#"); 
    try 
    { 
     fname = existingFilename; 
     if (fname == null) 
      fname = ConvertUrlToFileName(url); 
     if (File.Exists(existingFilename)) 
     { 
      File.Delete(existingFilename); 
     } 
     webRequest = (HttpWebRequest)WebRequest.Create(url); 
     webRequest.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"; 
     webRequest.Referer = "http://www.audiodump.com/"; 
     preloadedLength = GetExistingFileLength(fname); 
     if (preloadedLength > 0) 
      webRequest.AddRange((int)preloadedLength); 
     webRequest.Proxy = proxy; //SA??? or DefineProxy 
     webResponse = (HttpWebResponse)webRequest.GetResponse(); 
     fs = new FileStream(fname, FileMode.Append, FileAccess.Write); 
     fileLength = webResponse.ContentLength; 
     strm = webResponse.GetResponseStream(); 
     if (strm != null) 
     { 
      bytesCounter = preloadedLength; 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    catch (Exception e) 
    { 
     //Console.WriteLine(
     //"{0}: {1} '{2}'", 
     // url, e.GetType().FullName, 
     //e.Message); 
     return false; 
    } 
    //exception 
} //DownloadOne 

Verfahren _DoDownload() von einem Zeitgeber ausgeführt wird, die alle 250 Millisekunden ausgeführt wird. Dieser Weg funktioniert perfekt auf anderen Seiten. Allerdings bereitet mir Audiodump mit diesen Umleitungen Schwierigkeiten.

Ich bin kein Genie mit httprequest. Ich habe es geschafft, das Suchproblem zu lösen, aber der Download-Teil macht mich verrückt. Irgendwelche Tipps, wie Sie das Download-Problem lösen können?

+0

Die Website will offensichtlich nicht, dass Sie es kratzen. Fragen _ _ "Wie kann ich es kratzen" _ ist zu breit. ** Sie ** müssen das Problem isolieren und von dort aus forschen. – CodeCaster

Antwort

Verwandte Themen