Laden...

MP3-Downloader

Erstellt von snoopy90 vor 17 Jahren Letzter Beitrag vor 17 Jahren 14.757 Views
snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren
MP3-Downloader

Guten Abend

Könnte mir vielleicht jemand einen Tipp geben, wie ich ein Programm schreiben könnte, welches alle MP3-Dateien auf einer Website sucht und automatisch downloadet.

Möchte mir zum Beispiel von der Seite http://www.radioaktuell.ch/index.php?ressort=kroegerundco/comedy/fonfreak

alle MP3's runterladen.

Gruss Snoopy

PS: Bin noch ziemlicher Anfänger im Programmieren

www.mkellenberger.ch Was ich täglich (neu) entdecke...

S
223 Beiträge seit 2006
vor 17 Jahren

reguläre ausdrücke zum findne der links und wie du per c# was runterlädst erfährt du ganz einfach per google, z.b. c# http download

edit:
webdl mit c#
http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=115

edit2:
ich glaube ich code dir sogar mal was, ist echt praktisch, geh leider gleich weg, schnell gemacht wräs ja... 🙂

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Währ cool, wenn du das machen könntest.

Werde es aber auch selber versuchen. Sollte ja nicht all zu schwer sein.

Lg Snoopy

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Oder, falls du so etwas häufiger vor hast: WinHTTrack.

35 Beiträge seit 2006
vor 17 Jahren

Ist das nicht eigentlich illegal?
OK, auf der Seite ist es ja kein Problem auber auf Sites wie musikload.de ist es doch illegal.

S
223 Beiträge seit 2006
vor 17 Jahren

Original von xXeRaptorXx
Ist das nicht eigentlich illegal?

was soll daran illegal sein? der sender stellt die mp3s ja zur verfügung. zudem zahlen wir alle tolle gebühren....

35 Beiträge seit 2006
vor 17 Jahren

Mist, hab mein Beitrag zu späit editiert😉
Also auf dieser Site ist es ja wie es aussieht legal, aber wenn er das auf andere Sites anwendet könnte das doch illegal sein.

B
1.529 Beiträge seit 2006
vor 17 Jahren

So lange die Dateien frei herunterladbar sind, d.h. du keinen Kopierschutz oder Authentifizierungssystem umgehen musst, ist das legal.

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Das ist 100% legal!!!


Ist ja wie Borg sagt frei herunterladbar.

Eigentlich wollte ich keine Disskussion über legal oder illegal auslösen.

Aber ich könnte noch ein paar konkrete Code-Beispiele gebrauchen.

Lg Micha

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Prinzipiell ist es ganz einfach:1.lade die Startseite als HTML in einen String 1.setze i = 0 1.durchsuche den HTML-String nach Links und speichere diese in einer List< URI >, falls der Link dort nicht schon enthalten ist oder auf eine externe Domain verweist 1.ist i größer als die Anzahl an Elementen der Liste?
Falls ja: gehe zu 6.

1.ist der i-te Link in der Liste eine mp3?
Falls ja: lade sie herunter (DownloadFileAsync), inkrementiere i, gehe zu 4.
Falls nein: lade den Link als HTML in einen String, gehe zu 3.

1.warte, bis alle Downloads abgeschlossen sind, fertig

Das einzige, was dabei Schwierigkeiten bereitet, ist Punkt 3: durchsuche die Seite nach Links. Links können auf verschiedene Arten angegeben werden, für den Anfang ist ein Suchen nach "href=" aber ein guter Anfang.

S
223 Beiträge seit 2006
vor 17 Jahren

Original von xXeRaptorXx
Mist, hab mein Beitrag zu späit editiert😉
Also auf dieser Site ist es ja wie es aussieht legal, aber wenn er das auf andere Sites anwendet könnte das doch illegal sein.

naja n downloadprogramm is nix illegales, ok tauschbörsen sidn teils verboten/werden verklagt, aber das hat auch n primären zweck - warez.
so mp3s als direkt dl findet man eher bei kleinen labels etc, warez seiten bieten das meistens nicht direkt an.

Downloader:
http://agh653.ag.funpic.de/MP3Loader.exe <-- binary
http://agh653.ag.funpic.de/MP3Loader.zip <-- project/source etc.

Nutzung:
Ordner c:\mp3\ erstellen - wichtig!
Dann einfach auf download.

angepasst speziell auf diese eine seite und es schaut aus als bricht das programm ab - ist aber nicht so. ist halt nicht multithreaded und auch sonst so ziemlich das simpelste was geht 😉
ich geb zu mit dem regulären ausdruck hatte ich probleme, weil meine idee auch http://bild.gif .... mp3 erfasst, anstatt nur http://bla.mp3
naja atm wie gesagt angepasst an diese eine seite und funzt, aber ist kein tolles codingbeispiel, kein errorhandling etc.
ganz simples beispiel halt 😉

ich denke ich werde mir am we mal was besseres basteln 🙂
für independent labels oder so ist das echt ne feine sache. man sollte es nur nicht übertreiben, traffic kostet ja auch.

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Oh Mann

Ich blick da einfach nicht durch.

Könnte mir nicht jemand den Code (oder das Programm) schreiben...???

Will ja eigentlich etwas daraus lernen, aber ich denke, ich kann ein fertiges Programm auch gut selber erweitern und so meine Erfahrungen sammel.

Lg Micha

www.mkellenberger.ch Was ich täglich (neu) entdecke...

S
223 Beiträge seit 2006
vor 17 Jahren

Original von snoopy90
Oh Mann

Ich blick da einfach nicht durch.

Könnte mir nicht jemand den Code (oder das Programm) schreiben...???

Will ja eigentlich etwas daraus lernen, aber ich denke, ich kann ein fertiges Programm auch gut selber erweitern und so meine Erfahrungen sammel.

Lg Micha

da hast du wohl grade geschrieben als ich gepostet habe 😜
also bei meinem code gibs viel zu erweitern etc 🙂

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Vielen Dank, ich werde mich da mal durchkämpfen 😁

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

@srynoname: Ich glaube dein extrem minimalistisches Progrämmchen durchsucht nicht die gesamte Website. Und alle mp3s auf der aktuell angezeigten Seite zu speichern, kostet mich mit Firefox und der Erweiterung DownThemAll nur ein paar Klicks.
Desweiteren glaube ich nicht, dass snoopy90 durch das Vorsetzen von fertigem Code irgendetwas lernt.

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Vielleicht ne dumme Frage, aber was sollte denn da in der Testbox angezeigt werden???
Der aktuelle Download???

@Borg
Kannste mir ja ein besseres Programm liefern! Auf diese Firefox Plug-Ins steh ich nicht so!

Lg Snoopy90

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Ich habe dir oben einen Ablaufplan geliefert, wie ich das realisieren würde. Fertigen Code werde ich dir nicht liefern. Falls du dich daran versuchst und dabei konkrete Fragen auftauchen, helfe ich dir gerne.

PS.: Wenn du die Firefox Add-Ons nicht magst, deine Sache. Für mich stellen diese einen der größten Vorteile von FF dar.

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

den code von srynonamefinde ich eigentlich gar nicht so schlecht.

Ich hätte nur gerne eine ListBox, in der die fertiggestellten Downloads angezeigt werden.
Hab aber keine Ahnung, wie ich das anstellen soll!!!

Lg Micha

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Probier mal das:

private void button1_Click(object sender, EventArgs e)
{
   WebClient Client = new WebClient();
   string filecontent = Client.DownloadString(textBox1.Text);
   MatchCollection matches=Regex.Matches(filecontent, @"(mp3\/.+\.mp3)");
   foreach (Match match in matches)
   {
      richTextBox1.Text += "Downloading " + match.ToString() + "...\n";
      richTextBox1.Refresh();
      Client.DownloadFile("http://www.radioaktuell.ch/" + match.ToString(), @"c:\" + match.ToString());
   }
}

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Kannst du mir sagen, wieso das Form beim download einfriert???
ich möchte da noch gerne einen Abbrechen Button, aber wenn alles einfriert ist das nicht so toll.

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Es friert ein, weil das Programm die ganze Zeit nur downlädt und sich nicht mehr um die Oberfläche kümmert. Daher oben das Refresh. Dies veranlasst, dass die Oberfläche wenigstens neu gezeichnet wird. Allerdings reagiert sie immer noch nicht auf Ereignisse.
Um dies zu realisieren, must du das ganze parallel (also in einem anderen Thread) downloaden. Dies kannst du erreichen, indem du statt DownloadFile DownloadFileAsync einsetzt.
Allerdings habe ich das gesamte Programm damit schon fast selbst geschrieben. Du must den Rest schon selbst rausfinden...

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Vielen Dank für deine Hilfe, isch denke jetzt werde ich mal ne Weile selber rumprobieren!!!

Lg Snoopy90

www.mkellenberger.ch Was ich täglich (neu) entdecke...

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Habe da doch noch ein kleines Problem, dass sich nicht von selber zu lösen scheint 😉

HAT SICH ERLEDIGT!!!

www.mkellenberger.ch Was ich täglich (neu) entdecke...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo snoopy90,

warum willst du denn da was selber programmieren? Es gibt doch viele fertige und kostenlose Programme für den Zweck. Ich benutze wget (Kommandozeile), aber es gibt auch ne Menge Tools mit grafischer Oberfläche.

herbivore

35 Beiträge seit 2006
vor 17 Jahren

Original von herbivore
Hallo snoopy90,

warum willst du denn da was selber programmieren? Es gibt doch viele fertige und kostenlose Programme für den Zweck. Ich benutze wget (Kommandozeile), aber es gibt auch ne Menge Tools mit grafischer Oberfläche.

herbivore

Ich würd mal denken dass das ganz einfach ein Drang ist 😁
Er will ein Erfolgsgef 😄ühl haben wenn er das endlich fertig hat 👍

S
223 Beiträge seit 2006
vor 17 Jahren

geht doch eher darum was zu lernen 🙂
das irefox plugin werde ich wohl trotzdem nutzen, genau sowas habe ich nämlich schon gesucht 🙂

habe mal ne frage, wollte mir n regulären ausdruck basteln, aber irgendwie bekomm ichs grade nicht hin:

MatchCollection matches = Regex.Matches(filecontent, "href=[^\"][^\s]+\.mp3[^\"])");

gefunden werden soll href=irgendwas/irgendwas.mp3 aber ohne ", also nicht
href="irgendwas/irgendwas.mp3".
auch befürchte ich, das obiges auch href=irgendwas/irgendwas.mp3testtest trefefn würde (wenn der ausdruck syntaktisch korrekt wäre)?
als fehler erhalte ich:
Fehler 1 Nicht erkannte Escapesequenz. --> bezogen auf \s
Fehler 2 Nicht erkannte Escapesequenz. --> bezogen auf . (.mp3)
verstehe nicht, was daran falsch ist? schonmal danke 🙂

@srynoname: Ich glaube dein extrem minimalistisches Progrämmchen durchsucht nicht die gesamte Website.

107 treffer hat meins, das ff plugin auch.

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

So, ich habe die Idee von Borg mal ein bisschen weiterverfolgt.
Habe dann die TextBox durch eine ListBox ersetzt, da mir diese für diesen Zweck geeingneter scheint. Ihr dürft mich aber gerne vom Gegentail überzeugen. Das Programm läuft soweit gut. Jetzt ist meine Frage, wie ich den Text "Downloading" durch den Text "Download fertiggestellt" ersetzen kann, sobald die Datei fertig geladen ist????

Meine Idee war, den Items. Count, zu nehmen um die Zeilen zu zählen und festzustellen, ob es eine mehr geworden ist! Ich habe aber noch keine Lösung gefunden, den Text zu ersetzen.

Ich hoffe, der Code (unten) ist euch übersichtlich genug, um mir eine Antwort zu geben.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
namespace MP3Loader
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
WebClient Client = new WebClient();
string filecontent = Client.DownloadString(ctrlURL.Text);
MatchCollection matches = Regex.Matches(filecontent, @";(mp3\/.+\.mp3)";);
foreach (Match match in matches)
{
ctrlDownloaded.Items.Add("Downloading..." + match.ToString() + "...";);
if (ctrlDownloaded.Items.Count == +1)
{
/*Beim Eintrag vor dem Neuesten, das "Downloading" durch "Download fertiggestellt" ersetzen.
\* Sonst sieht es ja aus, also ob er die ganze Zeit lädt. */
}
else
{
ctrlDownloaded.Refresh();
}
ctrlDownloaded.Refresh();
Client.DownloadFile("http://www.radioaktuell.ch/" + match.ToString(), @"c:\" + match.ToString());
}
}
}
}

PS: Vieleicht könnte mir noch jemand nen Tipp geben, wie ich den Code hier sclau einfügen kann.

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Ehrlich gesagt schau ich mir den Code erst an, wenn du die ganzen Tags da raus genommen hast...
Das kann man ja so nicht lesen. einfach nur das CSHARP-Tag und gut ist...

EDIT: Und einrücken wäre auch gut, aber jeweils nur 2 oder 3 Leerzeichen...

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

muss isch denn da die ganze quellcode-ansicht nach tags durchsuchen???

Gibts da keine einfachere Lösung??

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Du hast sie von Hand eingefügt, da musst du sie zur Strafe auch von Hand löschen... 😉

PS.: Text aus der TextBox in einen Editor kopieren, Suchen und Ersetzen und Text zurückkopieren.

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

die Tags sind weg, aber das Einrücken hat noch nicht so ganz geklappt... Naja, ich werde wohl noch oft genug mit dem Editor zu tun haben. Man könnte doch ein Prog schreiben, welches die Tags entfernt und die Einrückungen erstellt 😉

@Borg:

Ich hoffe, dir ist es genug übersichtlich und du kannst mir helfen.

Lg Snoopy90

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Die gesamte if-Abfrage raus und dafür hinter die foreach-Schleife ein ctrlDownloaded.Items.Add("Download abgeschlossen.");

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

So, habe deinen Vorschlag mal umgesetzt.

Jetzt ist mir die Idee einer ProgressBar gekommen (wie könnte es auch anders sein, wenns um Downloads geht).

Wie stellt man das am besten an???

Mein Vorschlag:

  1. Grösse der Datei auf dem Server ermitteln
  2. Immer die aktuelle Grösse der Datei auf dem PC abrufen
  3. Berechnung

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Für jeder einzelne Datei kannst du so keine ProgressBar erzeugen (dazu müsstest du die Dateien "von Hand" in Blöcken downloaden).
Du kannst nur eine ProgressBar für den Gesamtfortschritt erzeugen.

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Soll mir recht sein, ist so oder so besser als für jede einzele Datei.
Aber mein Ansatz mit der Dateigrösse war doch richtig, oder???

Wie stelle ich das Ganze nur an???

EDIT:

Ach ja, wie kann ich das Programm so gestalten, das es nicht nur für diese radioaktuell.ch Seite, sondern auch zum Beispiel altavista.ch funktioniert???

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Die Dateigröße wird nicht kontinuierlich geändert, sondern immer erst blockweise oder sogar erst beim Schliessen der Datei. Daher nützt es nichts, auf die Größe zu prüfen.

Nun, du erzeugst eine ProgressBar. Vor der foreach-Schleife weist du ihr als Minimum 0 und als Maximum die Anzahl der Matches zu.
In der Schleife inkrementierst du den aktuellen Wert der ProgressBar (Refresh nicht vergessen, s.o.).

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Wollte heute noch schnell ein Textfeld einbauen, in welchem man den Dateityp (z.B. ".mp3";) eingeben kann.

Gehe ich recht in der Annahme , dass ich die folgende Zeile ändern muss???


MatchCollection matches = Regex.Matches(filecontent, @"(mp3\/.+\.mp3)");

Irgendwie krieg ich da nie ein gutes Resultat. Habe folgendes versucht:


MatchCollection matches = Regex.Matches(filecontent, @"(""mp3\/.+\" + ctrlDateityp.Text + ")");

www.mkellenberger.ch Was ich täglich (neu) entdecke...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Snoopy, ich weiss, du bist noch sehr jung, sehr unerfahren und sehr ungeduldig.
Allerdings muss ich ehrlich gesagt zugeben, dass ich an einem Samstag nur deswegen vor einem Rechner sitze, weil ich an eben diesem selbst etwas zu tun habe.
Es freut mich natürlich, dich ab und zu auf den richtigen Weg schubsen zu können, nur spiele ich für dich weder Tutor noch Supporter.

Du wolltest ein paar Dateien von einer Website herunterladen. Dazu hast du Code. Bring den doch erstmal zum Laufen (so, wie er oben gepostet ist, wirst du nämlich noch ein paar Compilerfehler erhalten, aber ich will ja nicht zuviel verraten).
Jetzt kommt bei dir immer eins zum anderen, ohne dass du dir - der Vielzahl deiner Ideen entsprechende - Mühe gibst. Plötzlich ne ProgressBar, dann variable Dateierweiterungen, das ganze noch heute...

Bastel dir eine funktionierende Version und erweitere diese dann Schritt für Schritt. Man lernt programmieren nämlich nur durch "Trial & Error" und viel viel Lesen (vor allem in der MSDN Library).

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo snoopy90,

die Kombination aus Reguläre Ausdrücke von .NET Framework und On-the-fly Regex-Tester: Regex-Lab sollte dir weiterhelfen.

herbivore

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

So, hier jetzt mal mein ganzes Projekt.

Irgendwie klappt das mit der Suche und dem Download von anderen Dateitypen noch nicht so ganz.
Vielleicht kann mir ja da jemand helfen.

Die Frage wegen den Downloads von anderen Seiten, habe ich auch noch nicht gelöst. Scheint wirklich nur von dieser einen Seite zu funktionieren.

Das Menu habe ich mehr zum Spass als zur Funktionalität gebastelt. Bin halt noch recht neu und schaue mir die Möglichkeiten ein wenig an.

Lg Snoopy90

www.mkellenberger.ch Was ich täglich (neu) entdecke...

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Habe das mit den verschiedenen Dateitypen jetzt auf die verschiedensten Arten und Weisen versucht, aber das Programm will immer noch nur mp3-Files downloaden.

Ich hoffe, mir kann geholfen werden!!!

www.mkellenberger.ch Was ich täglich (neu) entdecke...

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Ich wollte noch den Dialog zum Abspeichern der Files in einen anderen Ordner machen.
Jedoch habe ich ein Problem mit der Angabe des Speicherortes.

Bitte helft mir!!! Bin jetzt schon ca. 2 Stunden daran, aber es funktioniert immer noch nicht.


Client.DownloadFile("http://www.radioaktuell.ch/" + match.ToString(), m_PfadDialog.SelectedPath.ToString() + match.ToString());

Ich würde mich sehr über eine Antwort freuen.

www.mkellenberger.ch Was ich täglich (neu) entdecke...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo snoopy90,

eigentlich eine Frage für einen neuen Thread, oder?

Davon abgesehen, ist die Frage m.E. noch zu allgemein, um da sinnvoll was zu sagen zu können. Was genau ist dein Problem?

herbivore

snoopy90 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

www.mkellenberger.ch Was ich täglich (neu) entdecke...