PowerShell: Webcomic-Download-Script

URL dieses Beitrags: http://blog.stefan-macke.com/2008/01/14/powershell-webcomic-download-script/

Ich lese jeden Morgen in der Frühstückspause ein paar Webcomics. Einer meiner Favoriten ist Cyanide and Happiness (oder auch explosm). Leider bin ich erst vor Kurzem auf diese Seite gestoßen und daher habe ich viele Comics nicht gelesen. Wenn ich zwischendurch mal extreme Langeweile habe (Nein, das kommt nicht vor. Ich will mich nur vorm Lernen drücken.), möchte ich dies nun nachholen. Leider hat die Seite manchmal eine recht lange Ladezeit und sooo viel Zeit habe ich ja nun auch nicht :)

Daher habe ich mir mal schnell ein kleines Download-Script für die PowerShell gebastelt, das die Comics für mich herunterlädt, sodass ich sie später lesen kann. Das ganze funktioniert mit Regular Expressions, da bei explosm die Comics (also die tatsächlichen Bilddateien) nicht etwa durchnummeriert sind, sondern frei vergebene Namen haben und in verschiedenen Ordnern liegen.

Das folgende Script öffnet nach Übergabe von 2 Parametern (Start- und Endnummer) die entsprechenden Comics von explosm und versucht, die URL der Bilddatei zu ermitteln. Sollte das nicht klappen, kann es sein, dass es das Comic mit der Nummer nicht gibt (nicht schlimm), oder dass die URL nicht ausgelesen werden konnte (dann muss der RegEx angepasst werden). Bei letzterem Fall wird die Nummer in die Datei errors.txt gespeichert. Ansonsten lädt das Script die Bilddatei herunter und speichert sie mit der Nummer zu Beginn des Dateinamens ab.

explosmdownloadscript.jpg

  1. if ($args.Count -ne 2)
  2. {
  3.     Write-Host "Start and end number needed" -foregroundcolor "red";
  4.     exit;
  5. }
  6. #
  7. $start = $args[0];
  8. $end = $args[1];
  9. #
  10. $path = Split-Path -Parent $MyInvocation.MyCommand.Path;
  11. $pattern = [regex] 'img alt="Cyanide and Happiness, a daily webcomic" src="(?<url>http:\/\/www\.explosm\.net\/db\/files\/(Comics\/)?(?<author>[a-zA-Z0-9]*\/)?(?<file>[\(\) a-zA-Z0-9_-]*\.[a-zA-Z]{3,4}))"';
  12. $errPattern = [regex] "WAHT YOU DOEN";
  13. $clnt = New-Object System.Net.WebClient
  14. #
  15. for ($i = $start; $i -le $end; $i++)
  16. {
  17.     Write-Host "Comic No" $i.ToString("0000");
  18.     $url = "http://www.explosm.net/comics/" + $i + "/";
  19.     $html = Get-Url $url;
  20.     $m = $pattern.Match($html);
  21.     if ($m.Success)
  22.     {
  23.         $pic = $m.Groups['url'].Value;
  24.         $filename = Join-Path $path ($i.ToString("0000") + "_" + $m.Groups['file'].Value);
  25.         Write-Host "  Saving" $i.ToString("0000") -foregroundcolor "green";
  26.         $clnt.DownloadFile($pic, $filename);
  27.     }
  28.     else
  29.     {
  30.         $m = $errPattern.Match($html);
  31.         if ($m.Success)
  32.         {
  33.             Write-Host "  does not exist" -foregroundcolor "yellow";
  34.         }
  35.         else
  36.         {
  37.             Write-Host "  error" -foregroundcolor "red";
  38.             Add-Content "errors.txt" $i;
  39.         }
  40.     }
  41. }
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Kommentare zu diesem Beitrag

  1. Gravatar WWW-KR
    Am 16. January 2008 um 21:10 Uhr

    Feed ist platt.

  2. Gravatar Stefan
    Am 16. January 2008 um 21:42 Uhr

    Mhh... bei mir geht's!?

Einen Kommentar schreiben

XHTML: Diese Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>