Downloads von DeviantArt – gar nicht mal so einfach

Long time no see, lieber Blag. Wie dem auch sei, fangen wir gleich mal an.
Ein aktuelles Projekt von mir erforderte wieder einmal ein paar Sachen, die so nicht vorgesehen sind. Ich muss mir eine DeviantArt-Page holen, dort eine Versionsnummer finden und die Datei, die sich hinter der Seite verbirgt, mit meinem Programm downloaden können. Von der Sache her klingt das ganze recht einfach, die Umsetzung hingegen ist etwas lustig, da DeviantArt keine solche Verwendung ihrer Seite vorsieht und damit auch keine API anbietet.

Ich will nicht groß um den heißen Brei drum herum reden. Ich werde kurz in Worten erklären, was gemacht werden muss, dann folgt ein Code-Beispiel in C#.
Im Grunde muss nur die DeviantArt-Seite geholt und untersucht werden. Für den ganzen Kram braucht ihr einen vernünftigen User-Agent, ich hab mich an dieser Stelle einfach mal bei useragentstring.com bedient und mir den UA für einen alten Chrome (37) geschnappt. Wenn die DeviantArt-Seite das erste Mal herunterladet, bekommt ihr Cookies zugewiesen – gut aufbewahren! Als nächstes müsst ihr nach dem passenden Download-Link suchen. Der ist für jeden Seitenaufruf und für jede Datei (surprise, surprise) natürlich anders, sonst würde ich hier nicht darüber schreiben. Da ich mich in den letzten Monaten in reguläre Ausdrücke verliebt habe, habe ich das ganze natürlich auch damit umgesetzt. Ist eigentlich auch gar nicht so schwer:
"(http://www\.deviantart\.com/download/\d*/.*)"
In Matchgroup 1 ist anschließend der Download-Link enthalten. Wichtig ist hier, dass die double quotes mit in den regulären Ausdruck reingehören, diese haben mir als Start- und Endmarker gedient. Wer das soweit hat, muss noch & durch & ersetzen, dann hat man einen funktionierenden Download-Link. Um diesen aber auch wirklich nutzen zu können, müssen beim neuen Request die alten Cookies und als Referer die DeviantArt-Seite mit übergeben werden. Anschließend wird einem auch schon der Download entgegen geworfen.

Zum Schluss jetzt mal noch das Beispiel in C# und mithilfe des .NET Framework. Ich verwende für die ganze Sache meine eigene Klasse BetterWebClient, die von WebClient erbt und einfach nur die Unterstützung für Cookies, User-Agent-Strings und Referer hinzufügt – nicht allzu schwer umzusetzen. Wer den Code nicht durch meine Erklärung oben umsetzen konnte, findet hier einen Gist mit dem benötigten Code. Wie man dem WebClient Cookies, Referer und User-Agents beibringt, findet ihr bestimmt problemlos selbst heraus.

Das war’s auch erstmal wieder, man sieht sich!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.