[follow-up] Webscraping: Podcast aus Directory Listing erstellen

In einem älteren Artikel hatte ich beschrieben, wie ich aus einzelnen Seiten des Bassdrive Archive mit PHP ein RSS-Feed zusammenbaue, das man dann als Podcast abonnieren kann. So lädt der Podfetcher immer die zuletzt eingestellten Aufnahmen meiner Lieblings-DJs herunter, z.B. Komatic, Ronin Selecta oder Carl Matthes.

Das Problem an Webscraping, also dem maschinellen “herauskratzen” von Inhalten aus einer HTML-Seite, ist natürlich dass der Betreiber der Seite manchmal die Struktur der Seite ändert, um optische Veränderungen umzusetzen. Dann greift der mühevoll entwickelte Algorithmus nicht mehr. Genau das ist nun passiert, die Bassdrive Archives haben ein Redesign erfahren.

Ich musste also das Script ändern. Mein Glück: durch das Redesign wurde die vorher sehr unübersichtliche Tabellen-Struktur durch ein modernes, gut strukturiertes Design ersetzt. Das macht das scraping im DOM wesentlich einfacher. So ist das Script deutlich kürzer und lesbarer geworden. Zum Vergleich, die wesentliche Funktion vorher:

  1.  
  2. function get_mp3_links($url) {
  3.     $html = load_page($url);
  4.     $dom = new DOMDocument();
  5.     $dom->preserveWhiteSpace = FALSE;
  6.     if (!@$dom->loadHTML($html)) {
  7.         die(‘could not load html’);
  8.     }
  9.     $trs = $dom->getElementsByTagName(‘tr’);
  10.     $links = array();
  11.     foreach ($trs AS $tr) {
  12.         $class = $tr->getAttribute(‘class’);
  13.         if ($class != ‘file_bg1′ AND $class != ‘file_bg2′) {
  14.             continue;
  15.         }
  16.         $tds = $tr->getElementsByTagName(‘td’);
  17.         foreach ($tds AS $td) {
  18.             if (!$td->hasAttribute(‘width’)) {
  19.                 continue;
  20.             }
  21.             $width = $td->getAttribute(‘width’);
  22.             if ($width == ’450′) {
  23.                 $title = $td->nodeValue;
  24.                 $div = $td->childNodes->item(0);
  25.                 $href = $div->childNodes->item(1)->getAttribute(‘href’);
  26.                 $url = ‘http://archives.bassdrivearchive.com’ . trim($href, ‘.’);
  27.             }
  28.             if ($width == ’100′) {
  29.                 $size = $td->nodeValue;
  30.             }
  31.             if ($width == ’125′) {
  32.                 $date = strtotime($td->nodeValue);
  33.             }
  34.         }
  35.         $links[$date] = array(‘title’ => $title, ‘url’ => $url, $size => $size, ‘date_uploaded’ => $date);
  36.     }
  37.     return $links;
  38. }
  39.  

Und Nachher:

  1.  
  2. function get_mp3_links($url) {
  3.     $html = load_page($url);
  4.     $dom = new DOMDocument();
  5.     $dom->preserveWhiteSpace = FALSE;
  6.     if (!@$dom->loadHTML($html)) {
  7.         die(‘could not load html’);
  8.     }
  9.     foreach($dom->getElementsByTagName(‘a’) AS $a) {
  10.         if (substr($a->getAttribute(‘href’), -3, 3) == ‘mp3′) {
  11.             $children = $a->childNodes;
  12.             $title = $children->item(1)->nodeValue;
  13.             $url = ‘http://archives.bassdrivearchive.com/’ . $a->getAttribute(‘href’);
  14.             $size = $children->item(3)->nodeValue;
  15.             $date = strtotime($children->item(4)->nodeValue);
  16.             $links[$date] = array(‘title’ => $title, ‘url’ => $url, ‘size’ => $size, ‘date_uploaded’ => $date);
  17.         }
  18.     }
  19.     return $links;
  20. }
  21.  

Hier kommt die aktuelle Version zum herunterladen. Und nochmal die Links zu den jetzt wieder funktionierenden Feeds:

http://dirk-martin.net/podcast/bassdrive/komatic/
http://dirk-martin.net/podcast/bassdrive/araguaney_sessions/
http://dirk-martin.net/podcast/bassdrive/sociopath/

1.07.2012

kommentare: keine


Burnt Friedman und Jaki Liebezeit

Am 09.02.2012 haben Burnt Friedman und Jaki Liebezeit ein Konzert in der Alten Feuerwache Mannheim gegeben. Nachdem Matthias und meine Wenigkeit schon im Dezember für das Konzert nach Dresden gekachelt waren, war klar, dass wir uns das nicht entgehen lassen können. Interessanterweise hat das Konzert einen ganz anderen Eindruck hinterlassen als das in Dresden. Die beiden haben andere Songs gespielt und auch das Equipment von Burnt war anders. Es war auch mehr Publikum anwesend. Die beiden waren in Hochform, es war ein großartiges Konzert!
weiterlesen »

23.02.2012

kommentare: einer


Herbststimmung

Der trockene, sonnige November war fotografisch einfach klasse. Hier eine kleine Auswahl aus den vielen Fotos, die ich bei diversen Spaziergängen gemacht habe.
weiterlesen »

4.12.2011

kommentare: keine


Ring of Fire

Da das fotografieren von Lycopodium-Explosionen nicht gerade trivial ist, hatte ich mir schon einige Zeit gewünscht, das mal in Ruhe auszuprobieren. Vor Publikum gibt es im Normalfall ja nur einen einzigen burn, da bleibt keine Zeit, sich die Fotos anzuschauen, die Einstellungen der Kamera zu korrigieren, und den nächsten Versuch zu starten. Von kam die Idee, einen Kreis aus Feuer zu modellieren. Letzten Sonntag haben wir dann zusammen mit Sebastian einen 6 x 5 Meter breiten “Hintergrund” mit schwarzem Molton abgehängt und reichlich Lyco abgefackelt. Was für ein Spass! weiterlesen »

25.05.2011

kommentare: einer


Feuershow in der Stiftsruine Bad Hersfeld

In der Stiftsruine Bad Hersfeld wurde im Rahmen des “Festival der Reformation” am 30.04.2011 eine große Feuershow mit viel Pyrotechnik aufgeführt. Mit dabei waren Keiko und Gé von light-motion. weiterlesen »

1.05.2011

kommentare: einer


Russische Kapelle im Sonnenuntergang

Russische Kapelle im Sonnenuntergang

13.04.2011

kommentare: keine


Buschwindröschen am Hofgut

'Buschwindröschen im Wald am Hofgut Oberfeld

10.04.2011

kommentare: keine


Panorama vom Oberfeld

'Panorama vom Oberfeld im Frühling

19.03.2011

kommentare: 2 stück


Sparks in Motion in Mörlenbach

Gé von light-motion hat gestern zum ersten Mal die Feuershow Sparks in Motion gezeigt. Das Publikum war begeistert! weiterlesen »

16.01.2011

kommentare: einer


Winterurlaub in Falken-Gesäß

Für unser verlängertes Wochenende hatten wir eine Ferienwohnung in Falken-Gesäß im Beerfelder Land gebucht. Ende November hatten wir eigentlich mit Regen und Matsch gerechnet. Aber schon als wir ankamen lag ordentlich Schnee, und während des Aufenthalts gabs dann noch locker 10 cm Neuschnee. Großartig! weiterlesen »

30.11.2010

kommentare: einer


Fototour durch Frankfurt

Um neues Foto-Equipment zu testen, sind Matthias, Benny und ich einen Abend lang durch Frankfurt gestapft. Zum Abschluss haben wir dann noch einen Halt am Airport eingelegt, wo wir natürlich sofort Aufsehen bei den Sicherheitsbütteln erregt haben. weiterlesen »

21.11.2010

kommentare: einer


Experimente mit Gé

Gé von light motion wollte einige neue und weiterentwickelte Feuerspiel-Geräte testen. Da habe ich mich nur zu gern bereit erklärt, das fotografisch festzuhalten. Das Ergebnis des Tests? Einige Geräte sind noch stark verbesserungswürdig, aber die Holzkohle, mit der die letzten Bilder entstanden sind, gehört zum geilsten was ich bisher gesehen habe. Die warme Lichtstimmung und die zahlreichen Funken sind absolut magisch. weiterlesen »

3.10.2010

kommentare: 2 stück


Felsenmeer in Flammen

Am Felsenmeer bei Reichenbach im Odenwald (Lautertal) fand gestern Abend die Veranstaltung Felsenmeer in Flammen statt. Das Felsenmeer besteht aus hunderten mächtigen Felsblöcken, die sich einen Abhang hinunterziehen. Dieser Felsstrom und der Wald drumherum wurden mit zahlreichen Strahlern in verschiedenen Farben illuminiert, es wurde kräftig genebelt und auch eine Lasershow war Teil der Inszenierung. legte mit Petra und Belli vom Projekt PQ eine Feuer- und LED-Show vom Feinsten hin. Alles in allem eine geniale Veranstaltung.

weiterlesen »

26.09.2010

kommentare: keine


Camino Blue Recordings / Drone Audio Podcast

Einer meiner liebsten Podcasts ist der der beiden kleinen Labels Camino Blue Recordings und Drone Audio, auf denen unter anderem Sunchase und P.B.K. rauskommen. Ihre Selbstbeschreibung lautet treffend: “pushing the deeper side of drum and bass”.

Leider ist im Podcast-Feed meist nur die letzte Episode enthalten, da es einfach der Feed des Label-Blogs ist. Um den Podcast archivieren zu können, habe ich die Links zu allen Episoden aus dem Blog geklaubt:

CAMINO BLUE RECORDINGS / DRONE AUDIO PODCAST 11, 07.08.2010
CAMINO BLUE RECORDINGS / DRONE AUDIO PODCAST 10, 02.06.2010
CAMINO BLUE RECORDINGS – DRONE AUDIO PODCAST 09, 28.04.2010
CAMINO BLUE RECORDINGS / DRONE AUDIO PODCAST 08 – FEBRUARY 2010, 06.02.2010
CAMINO BLUE RECORDINGS / DRONE AUDIO PODCAST 07 – JANUARY 2010, 05.01.2010
CAMINO BLUE RECORDINGS / DRONE AUDIO PODCAST 06 – NOVEMBER 2009, 15.11.2009
CAMINO BLUE RECORDINGS – DRONE AUDIO PODCAST 05 – SEPTEMBER 2009, 19.09.2009
CAMINO BLUE / DRONE AUDIO PODCAST 04 – AUGUST 2009, 24.08.2009
CAMINO BLUE / DRONE AUDIO PODCAST 03 – JUNE 2009, 04.07.2009
CAMINO BLUE / DRONE AUDIO PODCAST 02 – APRIL 2009, 29.04.2009
CAMINO BLUE / DRONE AUDIO PODCAST 01 – MARCH 2009, 16.03.2009

18.09.2010

kommentare: einer


Webscraping – Podcast aus Directory Listing erstellen

Mein Lieblings-Radiosender ist seit vielen Jahren bassdrive.com. Die meisten DJs, die dort auflegen, nehmen ihre Sets auf und stellen sie nach einer Weile bei bassdrivarchive ein. Bisher habe ich fast jeden Tag dort geschaut, ob eine neue Show meiner Lieblings-DJs vorliegt. Da ich aber bei meinem sonstigen Medienkonsum den Komfort von Podcasts gewohnt bin, war das auf die Dauer nicht befriedigend.

Deshalb habe ich ein kleines php-Script gehackt, das einen Podcast-Feed aus der bassdrivearchive-Seite eines DJs baut. Wenn der Podfetcher (in meinem Fall iTunes) die Feed-Datei lädt, lädt das Script die Seite von bassdrivearchive und baut aus den Links, die auf mp3-Dateien verweisen, den Podcast zusammen.

Bisher habe ich das Script für 3 DJs angepasst und auf den Server geladen, hier die Links zu den Podcasts:

http://dirk-martin.net/podcast/bassdrive/komatic/
http://dirk-martin.net/podcast/bassdrive/araguaney_sessions/
http://dirk-martin.net/podcast/bassdrive/sociopath/

Und hier das Script selbst, in der Version für Komatic. Es ist nicht schwer, es für andere DJs von bassdrive anzupassen oder für eine andere Seite, die Links auf mp3-Dateien enthält.

29.08.2010

kommentare: 3 stück


« ältere einträge