Unable to discover new podcasts from Apple Podcasts if podcast's name has UTF-8 character
I tried to import a podcast called "Affaires étrangères", but got a feedURL error. If I search another podcast with only ASCII characters, I get corrected results.
As a workaround, I used Podverse search to import the wished podcast.
Hey thanks for reporting!
I was able to reproduce it, but due to Passover I don't expect to have time to do a deep dive until at least a week and a half from now.
In the mean time I was able to add this podcast via the Podverse search.
I'm not a developer, but have some python knowledge and would be glad to try to submit a PR.
Adding some prints inside the method on_search from the class ApplePodcastsSearchProvider, I found some hints.
With this code:
for entry in util.read_json(json_url)['results']:
print(entry)
I get this result with "Affaires étrangères":
{'wrapperType': 'track', 'kind': 'podcast', 'artistId': 729430130, 'collectionId': 608884562, 'trackId': 608884562, 'artistName': 'France Culture', 'collectionName': 'Affaires étrangères', 'trackName': 'Affaires étrangères', 'collectionCensoredName': 'Affaires étrangères', 'trackCensoredName': 'Affaires étrangères', 'artistViewUrl': 'https://podcasts.apple.com/us/artist/france-culture/729430130?uo=4', 'collectionViewUrl': 'https://podcasts.apple.com/us/podcast/affaires-%C3%A9trang%C3%A8res/id608884562?uo=4', 'trackViewUrl': 'https://podcasts.apple.com/us/podcast/affaires-%C3%A9trang%C3%A8res/id608884562?uo=4', 'artworkUrl30': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts125/v4/c1/fb/0f/c1fb0fb5-8f82-1134-8567-2910b1c77d89/mza_8766385510833197674.jpg/30x30bb.jpg', 'artworkUrl60': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts125/v4/c1/fb/0f/c1fb0fb5-8f82-1134-8567-2910b1c77d89/mza_8766385510833197674.jpg/60x60bb.jpg', 'artworkUrl100': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts125/v4/c1/fb/0f/c1fb0fb5-8f82-1134-8567-2910b1c77d89/mza_8766385510833197674.jpg/100x100bb.jpg', 'collectionPrice': 0.0, 'trackPrice': 0.0, 'collectionHdPrice': 0, 'releaseDate': '2025-03-29T10:58:00Z', 'collectionExplicitness': 'notExplicit', 'trackExplicitness': 'cleaned', 'trackCount': 40, 'trackTimeMillis': 3561, 'country': 'USA', 'currency': 'USD', 'primaryGenreName': 'News', 'contentAdvisoryRating': 'Clean', 'artworkUrl600': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts125/v4/c1/fb/0f/c1fb0fb5-8f82-1134-8567-2910b1c77d89/mza_8766385510833197674.jpg/600x600bb.jpg', 'genreIds': ['1489', '26'], 'genres': ['News', 'Podcasts']}
And with "Le Point J", I get:
{'wrapperType': 'track', 'kind': 'podcast', 'artistId': 174906153, 'collectionId': 1506020866, 'trackId': 1506020866, 'artistName': 'RTS - Radio Télévision Suisse', 'collectionName': 'Le Point J ‐ RTS', 'trackName': 'Le Point J ‐ RTS', 'collectionCensoredName': 'Le Point J ‐ RTS', 'trackCensoredName': 'Le Point J ‐ RTS', 'artistViewUrl': 'https://podcasts.apple.com/us/artist/rts-radio-t%C3%A9l%C3%A9vision-suisse/174906153?uo=4', 'collectionViewUrl': 'https://podcasts.apple.com/us/podcast/le-point-j-rts/id1506020866?uo=4', 'feedUrl': 'https://feeds.audiomeans.fr/feed/34cc7531-2703-4869-801a-1ec6808f9788.xml', 'trackViewUrl': 'https://podcasts.apple.com/us/podcast/le-point-j-rts/id1506020866?uo=4', 'artworkUrl30': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/fd/97/47/fd97472d-f03b-6c7f-780c-ea101afe9c45/mza_17565539136410206997.jpg/30x30bb.jpg', 'artworkUrl60': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/fd/97/47/fd97472d-f03b-6c7f-780c-ea101afe9c45/mza_17565539136410206997.jpg/60x60bb.jpg', 'artworkUrl100': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/fd/97/47/fd97472d-f03b-6c7f-780c-ea101afe9c45/mza_17565539136410206997.jpg/100x100bb.jpg', 'collectionPrice': 0.0, 'trackPrice': 0.0, 'collectionHdPrice': 0, 'releaseDate': '2025-04-09T15:00:00Z', 'collectionExplicitness': 'notExplicit', 'trackExplicitness': 'cleaned', 'trackCount': 60, 'trackTimeMillis': 809, 'country': 'USA', 'currency': 'USD', 'primaryGenreName': 'News', 'contentAdvisoryRating': 'Clean', 'artworkUrl600': 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/fd/97/47/fd97472d-f03b-6c7f-780c-ea101afe9c45/mza_17565539136410206997.jpg/600x600bb.jpg', 'genreIds': ['1489', '26'], 'genres': ['News', 'Podcasts']}
And the main difference is the absence of feedUrl from "Affaires Étrangères".
It turns out that the problem has nothing to do with UTF-8, as the podcast "Le journal intime de", also published by France Radio as "Affaires étrangères", doesn't work either.
Interestingly, I do not get RSS when I use a site like https://www.get-rss.com/. But it works with "Le Point J" which is produced by Swiss Radio. It seems that another method is needed to get the RSS of Radio France podcast.
That is some good research you have done there, feedUrl is the property that holds a link to the RSS, none of the other links in what you posted look like that so I'm not sure what to do with this result.
As for your second question - in my short test searching with podverse search did work for your first testcase so that does seem to be a good workaround.
I tested with AntennaPod (an Android Podcast client) and it didn't work either, but I found another bug. For instance, if I search for "Le journal intime de" 3 occurrences are returned on Apple Podcast, 2 in AntennaPod and none on gPodder. As one of the 3 podcasts doesn't offer a feedUrl, gPodder print a notification with an "feedUrl error".
I see two improvements:
- Display a more comprehensible message as "feedUrl error". For instance: "No URL found" ;
- Display matches minus the one without a feedUrl (I'll create another issue for this one).
Does it sounds ok for you?
Display a more comprehensible message as "feedUrl error". For instance: "No URL found" ;
That means the variable message found in the file GpodderNotifications.qml needs to be updated. I didn't found yet where this variable is set. Probably at log.py:41.
A better error message is definitely a good thing, as for not showing it, I think it needs to be shown with some type of error suggesting using a different search engine so the user knows it exists but apple for whatever reason is not providing the correct data.