Daten aus dem iTunes Podcast Verzeichnis

Hau rein. Ich beteilige mich an den Kosten :wink:

Naja, die Kiste, die ich mir da schießen müsste, würde sicher nicht unter 60€ im Monat kosten. Das wäre mir für den Spaß im Moment doch zu viel :slight_smile: Bis dahin sollen für die Suchmaschine die 5000 Podcasts reichen.

Ich war mal wieder neugierig…
Unter diesem Link findet ihr einen neuen Dump des iTunes Stores :slight_smile:
Das ist der zweite Crawl seit dem 28. Februar.

In ungefähr 4 Monaten tat sich in unserer Lieblingsszene grob folgendes:

108235 (+7,01%) Englische Listungen und 4329 (+7,6%) Deutsche Podcasteinträge.
Vor vier Monaten waren es 101098 Englische und 4024 Deutsche.

Interessant finde ich, dass die Steigerung in beiden Sprachräumen in etwa gleich groß ausfällt.

//D

4 „Gefällt mir“

Vielleicht solltest du auf TSV umstellen? Ein paar der URLs enthalten ein Komma. Zum Beispiel die Einträge für “95bfm.com”.

Und eine zweite Frage, weißt du wie Itunes mit verwaisten Podcasts umgeht? Sind die noch im System?

TSV, CSV => beim nächsten mal vielleicht. Ist ein wenig umständlich, weil ich ja ansonsten eigentlich immer die JSON files nutze.

Zu Deiner zweiten Frage: Ich weiß ehrlich gesagt nicht genau wie die das handhaben. Meine Vermutung: Die Einträge bleiben, zumindest mal so lange sie niemand gezielt aus dem Account entfernt. Aber ich spekuliere nur.

Also es gibt das releaseDate. Das scheint das Veröffentlichungsdatum der letzten Folge im Feed zu sein. Wenn man diese sortiert, sieht man, dass es einen Cutoff gibt. Kein releaseDate ist älter als 2015-06-01. Wobei ich natürlich nicht weiß, ob dein Crawler Podcasts, die seit mehr als anderthalb Jahren nichts neues im Feed hatten, nicht “sieht” oder ob sie tatsächlich aus dem Verzeichnis entfernt wurden.

Nebenbei das ist wohl auch wirklich nur das Datum aus dem Feed. Sieht man daran, dass einige in den kommenden Monaten dieses Jahres, in 2017 und 2018 liegen. Dieser Feed hat mit einem releaseDate in 2019 das am weitesten in der Zukunft liegende: http://www.uusg.org/podcasts?format=rss

Wenn sie wirklich die älteren Podcasts rausnehmen, scheint Vordatierung also eine wirksame Gegenmaßnahme zu sein. :wink:

Und das kommt dabei raus, wenn man germanpodcasts.csv in einen Scanner wirft:

http://1839cdd.podcaster.de/stura-freiburg.rss: An error occurred while parsing EntityName. Line 51, position 54.
http://1cgrpuw.podcaster.de/sportwetten-lifestyle.rss: An error occurred while parsing EntityName. Line 51, position 54.
http://witweberger.de/rss.xml: The remote server returned an error: (404) Not Found.
http://leben-fuehren.de/podcast/feed/: The remote server returned an error: (403) Forbidden.
http://mattze.podcaster.de/Redefluss.rss: An error occurred while parsing EntityName. Line 51, position 54.
https://coinspondent.de/category/podcast/honigdachs/feed/: The remote server returned an error: (403) Forbidden.
http://www.geemco.de/artikel/feed/itunes/: The remote server returned an error: (302) Redirect.
http://fetznschaedl.lima-city.de/?feed=mp3: The remote server returned an error: (403) Forbidden.
http://frankenfilm.podcaster.de/FilmpodcastFranken.rss: An error occurred while parsing EntityName. Line 51, position 54.
http://resource.ffh.de/podcasts/ffh/beziehungstippszuradventszeit.rss: Root element is missing.
http://flyingtinkerbell.com/?feed=katrinkotzt: The remote server returned an error: (404) Not Found.
http://www.uncle-bob-cast.com/blog?format=rss: The remote server returned an error: (400) Bad Request.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://goldkind.podcaster.de/Goldkind.rss: An error occurred while parsing EntityName. Line 51, position 54.
http://das-kopfkino.de/feed/mp3/: The remote server returned an error: (503) Server Unavailable.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.prinzenbuch.de/der-ochsenkrieg?format=rss: The remote server returned an error: (400) Bad Request.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.zentrumwalserbirnbaum.at/kat/birncast/feed/: The remote server returned an error: (403) Forbidden.
http://podcast.gamona.de/oldrep/oldrep_podcast.xml: An error occurred while parsing EntityName. Line 25, position 72.
http://www.onthebutton.de/OTB/OTB(Wrestling).xml: The request was aborted: The connection was closed unexpectedly.
http://www.onthebutton.de/OTB/OTB(UFC).xml: The request was aborted: The connection was closed unexpectedly.
http://www.onthebutton.de/feed/all/: The request was aborted: The connection was closed unexpectedly.
https://jaegers.net/feed/podcast/: The remote server returned an error: (403) Forbidden.
http://feeds.soundcloud.com/users/soundcloud:users:234648237/sounds.rss: The remote server returned an error: (422) Unprocessable Entity.
http://www.gabysgraupner.de/blog/?category=Podcast&format=rss: The remote server returned an error: (400) Bad Request.
http://www.cross.tv/api/tvshow/list.php?action=itunes_feed&entries_per_page=200&channel_id=4469: Invalid character in the given encoding. Line 68, position 273.
http://patrick-emmler.de/predigten/EvangelischeKircheB%C3%BChl.xml: The remote server returned an error: (404) Not Found.
https://www.icf-basel.ch/podcast/show/nextgen/feed/mp3: The remote server returned an error: (404) Not Found.
http://www.christus-centrum-kempen.de/component/podcastmanager/?format=raw&feedname=1: The remote server returned an error: (404) Not Found.
http://micha-leuenberger-boke.squarespace.com/predigten?format=rss: The remote server returned an error: (400) Bad Request.
http://www.davidjoisten.de/?feed=podcast: The remote server returned an error: (403) Forbidden.
http://www.elim-hamburg.de/podcasts/podcast.xml: The remote server returned an error: (404) Not Found.
http://www.elia-lippe.de/wp/wp-content/files/podcast/podcast.xml: An XML comment cannot contain '--', and '-' cannot be the last character. Line 68, position 36.
http://www.posinng.de/sersheim/audio/rss.xml: The remote server returned an error: (403) Forbidden.
http://ta-foryou.ch/index.php?option=com_sermonspeaker&view=feed&format=raw&Itemid=209: The remote server returned an error: (500) Internal Server Error.
http://www.paradiso.de/feed/podcast: The remote server returned an error: (403) Forbidden.
http://www.radiomaria.at/itunesfeed.php?sc=108: An error occurred while parsing EntityName. Line 7003, position 47.
http://www.radiomaria.at/itunesfeed.php?sc=102: An error occurred while parsing EntityName. Line 13523, position 34.
http://www.salemic.at/sermons/feed/: The remote server returned an error: (406) Not Acceptable.
http://www.dj-pld.com/podcast.xml: The remote name could not be resolved: 'www.dj-pld.com'
http://podcast.fotoglut.de/feed/mp3/: The remote server returned an error: (403) Forbidden.
http://www.musical1.de/feed/podcast/: The remote server returned an error: (403) Forbidden.
http://manuelborgesstudio.podcaster.de/Manuel_Borges_Studio.rss: An error occurred while parsing EntityName. Line 51, position 54.
http://piasgermany.podcaster.de/matteocapreoli.rss: An error occurred while parsing EntityName. Line 51, position 54.
http://tanzundklangkombinat.de/podcast/podcast.xml: An error occurred while parsing EntityName. Line 96, position 31.
http://www.arche-gemeinde.de/?id=4&rss=iaud: There are multiple root elements. Line 2, position 2.
http://electric-sundown.com/feed/mp3/: The remote server returned an error: (404) Not Found.
http://www.mdr.de/unter-uns/audiogalerie106-podcast.xml: The remote server returned an error: (404) Not Found.
http://www.motionclick.de/feed/podcast: The remote server returned an error: (403) Forbidden.
http://explikator.de/feed/podcast/: The remote server returned an error: (403) Forbidden.
http://humanistlab.com/podcast/?format=rss: The remote server returned an error: (400) Bad Request.
http://feeds.soundcloud.com/users/soundcloud:users:18060311/sounds.rss: The remote server returned an error: (404) Not Found.
http://anjakempe.squarespace.com/anja-kempe-podcast?format=rss: The remote server returned an error: (400) Bad Request.
http://ausdemrucksack.de/feed/podcast/: The remote server returned an error: (404) Not Found.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.vdr-cast.de/feed/: The remote server returned an error: (403) Forbidden.
http://bahnhofskino.libsyn.com/rss: Invalid character in the given encoding. Line 42, position 282.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.gftalk.de/iTunes/rss_fussball.xml: Reference to undeclared entity 'szlig'. Line 66, position 18.
http://www.sampple.at/feed/podcast: The remote server returned an error: (404) Not Found.
http://flyingtinkerbell.com/?feed=girlslabercast: The remote server returned an error: (404) Not Found.
http://seklenktestapp.azurewebsites.net/SebastianKlenkChannel9iTunes.xml: An error occurred while parsing EntityName. Line 8, position 612.
http://www.chip.de/rss/rss_video_podcast.xml: The remote server returned an error: (410) Gone.
http://fabian-knipp.squarespace.com/sq-test-blog?format=rss: The remote server returned an error: (400) Bad Request.
http://www.kopfsalat-medien.de/podcasts/sg/sg.xml: An error occurred while parsing EntityName. Line 85, position 41.
http://SmalltalkInspect.podspot.de/rss: The remote server returned an error: (404) Not Found.
http://www.mac-tv.de/RSS_Podcast_HD.lasso: An error occurred while parsing EntityName. Line 42, position 518.
http://heinke.squarespace.com/appel-ei-feed?format=rss: The remote server returned an error: (400) Bad Request.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.srf.ch/feed/podcast/hd/c548f2f6-fac0-0001-67b4-12208580b2f0.xml: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.
http://www.srf.ch/feed/podcast/sd/c548f2f6-fac0-0001-67b4-12208580b2f0.xml: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.
http://www.daserste.de/podcasts/mam_dyn~id: Root element is missing.
http://www.srf.ch/feed/podcast/sd/c6c7b18e-fde0-0001-d0cb-1060888017e2.xml: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.
http://semperveganis.de/feed/podcast: The remote server returned an error: (404) Not Found.
http://www.checkpod.fm/feed/podcast/fussball-feed: The remote server returned an error: (500) Internal Server Error.
http://www.checkpod.fm/feed/podcast: The remote server returned an error: (500) Internal Server Error.
http://www.checkpod.fm/feed/podcast/sports-feed: The remote server returned an error: (500) Internal Server Error.
http://www.radiomaria.at/itunesfeed.php?sc=101: An error occurred while parsing EntityName. Line 1863, position 29.
http://radiomaria.at/itunesfeed.php?sc=95: Invalid character in the given encoding. Line 1195, position 32.
https://zug.icf-zentralschweiz.ch/podcast/show/icf-zug-schweizerdeutsch/feed/mp3: The remote server returned an error: (404) Not Found.
https://www.icf-reutlingen.de/podcast/show/icf-reutlingen-audio-deutsch/feed/audio: '"' is an unexpected token. The expected token is ';'. Line 192, position 136.
https://luzern.icf-zentralschweiz.ch/podcast/show/icf-luzern-schweizerdeutsch/feed/mp3: The remote server returned an error: (404) Not Found.
https://www.icf-baselland.ch/podcast/show/icf-celebration/feed/mp3: The remote server returned an error: (404) Not Found.
https://www.icf-bielefeld.de/podcast/show/icf-bielefeld-ladies/feed/mp3: The remote server returned an error: (404) Not Found.
https://www.icf-bielefeld.de/podcast/show/icf-bielefeld/feed/mp3: The remote server returned an error: (404) Not Found.
http://yawa-recordings.de/podcast/stefanrio/feed.xml: An error occurred while parsing EntityName. Line 334, position 47.
http://julis-schwaben.org/podcast/feed.xml: The request was aborted: The operation has timed out.
https://hearthis.at/set/26269-31078/podcast/: An error occurred while parsing EntityName. Line 6, position 33.
https://bienenpodcast.info/feed/m4a/: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
http://lebenskunst365.de/feed/podcast/: The remote name could not be resolved: 'lebenskunst365.de'
http://www.tobiundrikyshow.de/RikyOTB/RikyOTB.xml: The request was aborted: The connection was closed unexpectedly.
http://www.startrek-index.de/trekcast/feed/podcast/: The remote server returned an error: (403) Forbidden.
http://www.srf.ch/feed/podcast/sd/58d32b9d-59fc-4026-9f7e-6ae7e841131e.xml: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.
http://askpyros.de/AskpyrosLive.xml: The remote server returned an error: (404) Not Found.
http://www.spreaker.com/show/1080933/episodes/feed: The remote server returned an error: (404) Not Found.
http://www.earlygamers.de/feed/earlygamers/: The remote name could not be resolved: 'www.earlygamers.de'
https://www.spreaker.com/show/1470455/episodes/feed: The remote server returned an error: (404) Not Found.
http://oderso.org/feed/mp3/: The remote server returned an error: (404) Not Found.
http://heinke.squarespace.com/die-medientheke?format=rss: The remote server returned an error: (400) Bad Request.
https://www.actilingua.com/podcast/feed-deutsch.php: There are multiple root elements. Line 2, position 2.
http://feeds.feedburner.com/ForexTrading2015Mql4TutorialDeutsch: The 'link' start tag on line 10 position 6 does not match the end tag of 'head'. Line 95, position 7.
http://www.vertrieblerblog.de/?feed=podcast: There are multiple root elements. Line 2, position 2.
http://www.sharepoint-rhein-ruhr.de/feed/podcast: The remote server returned an error: (403) Forbidden.
http://kevinrechsteiner.com/podcastgen/feed.xml: The remote name could not be resolved: 'kevinrechsteiner.com'
http://wirreden.gavinkarlmeier.de/feed/podcast: The remote server returned an error: (403) Forbidden.
http://rhetorikseminar.org/podcast/feed.xml: An error occurred while parsing EntityName. Line 229, position 37.
https://www.projektphoenix.com/series/projekt-phoenix-podcast/feed/: Reference to undeclared entity 'uuml'. Line 67, position 42.
http://sebastianprestele.libsyn.com/rss: The remote server returned an error: (404) Not Found.
http://feeds.feedburner.com/Wortgewand: Data at the root level is invalid. Line 41, position 1.
http://seifmeier.karlmeier.de/feed/podcast: The remote server returned an error: (403) Forbidden.
https://www.spreaker.com/show/1561444/episodes/feed: The remote server returned an error: (404) Not Found.
https://bildungstrinken.com/feed/m4a/: The remote server returned an error: (522) Origin Connection Time-out.
http://freies-radio-wiesental.de/raw: The remote server returned an error: (404) Not Found.
http://www.formfreude.fm/episoden?format=rss: The remote server returned an error: (400) Bad Request.
http://se3wlf.podcaster.de/infraschall.rss: An error occurred while parsing EntityName. Line 51, position 54.
http://turtles-boy.lima-city.de/itunes.xml: The remote server returned an error: (403) Forbidden.
http://www.designthinking-wien.at/podcast?format=rss: The remote server returned an error: (400) Bad Request.
http://hirndrang.de/feed/podcast/: Reference to undeclared entity 'hellip'. Line 37, position 431.
https://claudiaseverin.com/feed/podcast/: The remote server returned an error: (403) Forbidden.
http://lifechannel.ch/html/pod/lc_info___abend.xml: An error occurred while parsing EntityName. Line 571, position 131.
http://lifechannel.ch/feed/lc_am_morgen.xml?reqhost=www.erf-medien.ch&thereq=HEAD%2520/html/pod/lc_am_morgen.xml%2520HTTP/1.1&vardump: An error occurred while parsing EntityName. Line 57, position 65.
http://www.hourofpower.de/Podcast/podcastinterview.rss: Invalid character in the given encoding. Line 33, position 114.
http://www.hourofpower.de/Podcast/podcastvideo.rss: Invalid character in the given encoding. Line 33, position 101.
http://unlovedmac.de/podcast/feed.xml: The remote name could not be resolved: 'unlovedmac.de'
http://www.norddeutsche-nachrichten.de/feed/podcast: The remote server returned an error: (403) Forbidden.
http://www.burnwho.com/podcast/?format=rss: The remote server returned an error: (400) Bad Request.
http://sciencepie.squarespace.com/episoden?format=rss: The remote server returned an error: (400) Bad Request.
http://sciencepie.squarespace.com/episodes?format=rss: The remote server returned an error: (400) Bad Request.
http://www.beichthaus.com/podcast.rss2: Reference to undeclared entity 'szlig'. Line 26, position 20.
http://mp.podcast.toastyschmie.de/feed.xml: The remote server returned an error: (404) Not Found.
http://montagsbesprechung.de/rss.xml: The remote server returned an error: (404) Not Found.
https://christuscentrumorg.squarespace.com/podcast-uebersicht?format=rss: The remote server returned an error: (400) Bad Request.
https://www.bib.ch/test/Schulungen.xml: The remote server returned an error: (404) Not Found.

Allerdings sind viele eigentlich korrekte Links…
Beispielsweise der link von Sciencepie in Deinnem Log ist exakt deren feedurl wie sie auch auf ihrer seite steht. Oder der Explikator link.
Wie viel Fehler waren das in deinem Log? 50?

Die Fehleranzahl schwankt etwa zwischen 130 und 170. Die Kommunikationsfehler nehmen mal zu und mal ab. Aber das ist ja klar. Das Verhältnis zwischen Kommunikations- und Syntaxfehlern ist ungefähr gleich. Bei einem Input von über 4000 Feeds ist die Situation eigentlich gar nicht so schlecht.

1 „Gefällt mir“

Der @eazy kann da vermutlich schöne Statistiken hervor zaubern, denn fyyd.de arbeitet immerhin mit dem crawl :wink:

1 „Gefällt mir“

Vielleicht noch ein paar Eckpunkte für die Podcastverzeichnisafficionados:

Surface Book i7 Core 2 HT 16GB RAM SSD, Windows 10 Pro x64, .NET 4.6.2 XML-DOM, MSSQL 2016 ENT, VSDL50/10, WiFi. Ein kompletter Scan der Datei dauert etwas über 5min (302s). Die Downloadmenge der Feeds beträgt 550MB.

Aktuelle Zahlen von heute Abend nach Kategorien (ungefähr):
Kunst: 30000
Wirtschaft: 22000
Komödien: 27000
Bildung: 20000
Spiele & Hobbys: 15000
Regierung & NGOs: 4000
Gesundheit: 12000
Familie & Kinder: 3000
Musik: 35000
Nachrichten & Politik: 13000
Religion & Spiritualität: 48000
Wissenschaft & Medizin: 4000
Gesellschaft & Kultur: 22000
Sport & Freizeit: 18000
TV & Film: 14000
Technologie: 10000

4 „Gefällt mir“

Hi Heiko,
erst mal vielen Dank für das Update und Deine klasse Arbeit/ Zeitinvest!

Mich würde neben den genannten Zahlen pro Kategorie aus 8/2017 auch noch einmal die Gesamtanzahl der gelisteten deutschen Podcasts interessieren. Nur so um ein Gefühl für den überall ausgerufenen “Podcast Boom” und das Momentum zu bekommen…

Wir haben ja weiter oben im Thread gesehen, dass es in 2/2016 rund 4000 Podcasts in deutscher Sprache gab (DACH hauptsächlich, schätze ich?).

Wie viele gibt es also nun 2 Jahre später?

Beste Grüße und im voraus schon einmal vielen Dank

Jens

Einfach meinem Link oben folgen und das Skript laufen lassen :wink:
Alternativ weiß auch der @eazy ein wenig genauer wie viele zur Zeit gelistet sind…

//D

Zahlen für deutsche Podcasts habe ich nicht, aber so wie es für mich aussieht, kommen weltweit pro Tag etwas weniger als 500 Podcasts dazu. Insgesamt habe ich ca. 390.000 Feeds gesammelt, von denen erfahrungsgemäß mehr als 80% live sind, wenn ich das nicht falsch vergessen habe. Ich gucke nicht jeden Tag nach, und ob mein Scanner immer richtig liegt, weiß ich auch nicht. Könnten auch alles Alternative Facts sein.

Hey,
ja danke für den Tipp, das müsste ich mir mal genauer anschauen. Ich dachte vielleicht ist hier jemand dabei, der die Zahlen zufällig periodisch beobachtet…
Thnx
J

Hi Heiko,
echt Wahnsinn, jeden Tag fast 500 neue…
Ich schau mir mal das Script an, vielleicht bin ich nicht zu doof um es ans laufen zu bringen und filtere dann mal nach deutschen podcasts.
Danke Dir
Jens

1 „Gefällt mir“

Es war mal wieder Zeit…
Ich habe meinen Crawler neu geschrieben und die als Deutschsprachig identifizierbaren Podcasts aus dem Directory gefischt. Wer will kann in diesem Google
Spreadsheet
mit den Daten spielen oder hier das Excel File samt Pivot (2,7MB) herunterladen.
Für technisch versierte habe ich auch hier ein dekoratives JSON File (ZIP, 890kb)…

Wer selbst ran will oder wissen möchte wie mein Crawler funktioniert, der läd hier das Python Skript runter. Aber Achtung:

  1. Das Ding ist Quick & Dirty, erwartet keine besonders hohe Qualität
  1. Die iTunes API gibt nur sehr wenig Infos her weswegen ich außerdem jeden Feed abrufe. Wenn man das daheim nachmacht, dann zieht man nicht nur sehr viel Daten sondern sollte auch knapp eine Woche Zeit für den Crawl einplanen (ca. 750000 Feeds x ca. 1 Sekunde Zeitaufwand = 8,3 Tage)

Viel Spaß damit!

Quick Highlights:

  • Insgesamt sind in itunes 15265 Podcasts registriert deren Feeds im Language Tag als Sprache “de*” tragen also sich selbst als Deutsch identifizieren.
  • die verteilen sich auf 11060 unterschiedliche Podcaster (bzw. unterschiedliche Angaben bei “Autor”
  • Davon haben 7194 dieses Jahr noch kein Update gesehen. Sprich: knapp die Hälfte sind entweder verstorben oder pausieren.
  • Soundcloud hat mit 1585 Feeds immer noch einen ordentlichen Anteil.
  • anchor-feeds sind mit 655 auch ordentlich vertreten.
  • Lt. iTunes ist “Bildung” mit 1107 Podcasts die “vollste” Kategorie gefolgt von “Gesellschaft und Kultur” (1095) und “Musikfilme” (933, wtf?)
  • 2873 Podcasts stammen von 83 Podcastern mit mehr als 10 registrierten Sendungen. Keiner davon ist privat.
10 „Gefällt mir“

Wow! Danke, danke, danke!

2 „Gefällt mir“

nicht, dass ich mich zu früh freue, aber interpretiere ich deine XLSX-Datei richtig, dass die meisten Feeds eine podigee.io-Feed-URL haben?