Daten aus dem iTunes Podcast Verzeichnis

Hallo zusammen

Ich habe mich am Wochenende etwas ausführlicher mit iTunes beschäftigt und unter anderem einen Crawler (leicht abgewandelte Version von dem hier) auf den Store losgelassen. Hier ein paar Dinge, die vielleicht auch für andere interessant sind:

Weiter bin ich erst mal noch nicht, weiß auch noch nicht wann ich wieder dazu komme. Aber vielleicht kann das ja trotzdem schon jemand brauchen :wink:

//D

14 „Gefällt mir“

geiler scheiß. sieht so aus, wenn man jetzt auf chinesisch anfängt, kann man noch was reißen! Auch wenn deine Aufteilung nach Sprache bei chinesisch sicher nicht ganz korrekt ist. die haben doch ganz viele Dialekte

In iTunes gibt es trotzdem nur einen Eintrag :wink:

1 „Gefällt mir“

Sehr geile Liste - Danke.

Was ich komisch finde ist, dass mein Podcast nicht auftaucht.

Daraufhin habe ich mir noch einmal das iTunes-Verzeichnis angesehen und festgestellt, dass mein Podcast (eGovernment Podcast) zwar im Verzeichnis gelistet ist und auch über iTunes abonniert werden kann aber wenn ich in den Kategorien suche, dann finde ich ihn nicht.

So habe ich ihn kategorisiert:
Kategorie: National
Sprache: Deutsch

Wo holt sich den Script die Daten her?
Hat noch jemand diese Beobachtung gemacht?

Sehr cool. Wenn du da vielleicht sogar was in ein git repo legen könntest, mit regelmäßigen Updates wäre das noch hilfreicher.

1 „Gefällt mir“

Hm… Interessant. Das Script crawled sich ausgehend von der Kategorienliste voran. Gut zu wissen, dass es scheinbar eine “Dunkelziffer” gibt…

Der Podcast ist ja auch nur Nische. :wink:

Sehr interessant! Das müsste doch für @garneleh besonders spannend sein?
Aus den Daten könnte man ja auch mal eine schick visualisierte Echtzeit-Karte machen.

2 „Gefällt mir“

Uff. Der Importer hat über Nacht das Verzeichnis des flattrBoards (und damit der Suchmaschine) verzweieinhalbfacht. Oder? Also… vorher waren es 2000, jetzt sind es 5000 Podcasts mit über 330k Episoden. Ein Dupelauf wird aber noch mal nötig sein.

Das Gesamtverzeichnis allerdings werde ich wohl nicht da drauf werfen, das dürfte die mysql-db deutlich überfordern :slightly_smiling:

Danke!

1 „Gefällt mir“

MongoDB kommt bei mir hier ganz gut mit allem zurecht :wink:

Naja, das Problem sind ja nicht die 180k Podcasts Es sind mehr die geschätzten 12 Mio Episoden, die da drin hocken.

Hätte gut Lust, mir einen Server bei Hetzner zu schießen, um das auszuprobieren. Auf meiner einen Maschine dort hab ich die Hörsuppe und alles andere (firtz, flattrBoard natürlich…) laufen, da möchte ich nicht rumspielen :slightly_smiling:

1 „Gefällt mir“

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“