gpodder-sailfish icon indicating copy to clipboard operation
gpodder-sailfish copied to clipboard

Unable to discover new podcasts from Apple Podcasts if podcast's name has UTF-8 character

Open pherjung opened this issue 11 months ago • 8 comments

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.

pherjung avatar Apr 10 '25 18:04 pherjung

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.

Keeper-of-the-Keys avatar Apr 10 '25 18:04 Keeper-of-the-Keys

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".

pherjung avatar Apr 10 '25 19:04 pherjung

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.

pherjung avatar Apr 10 '25 21:04 pherjung

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.

pherjung avatar Apr 11 '25 00:04 pherjung

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.

Keeper-of-the-Keys avatar Apr 15 '25 21:04 Keeper-of-the-Keys

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?

pherjung avatar Apr 15 '25 23:04 pherjung

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.

pherjung avatar Apr 15 '25 23:04 pherjung

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.

Keeper-of-the-Keys avatar Apr 16 '25 11:04 Keeper-of-the-Keys