mirror of
https://github.com/sigma67/ytmusicapi.git
synced 2026-04-24 23:06:13 +03:00
[PR #817] iOS Compatibility Enhancement for ytmusicapi #750
Labels
No labels
a/b
bug
documentation
enhancement
good first issue
help wanted
invalid
pull-request
question
wontfix
yt-error
yt-update
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/ytmusicapi#750
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/sigma67/ytmusicapi/pull/817
Author: @Goldenfreddy0703
Created: 9/7/2025
Status: 🔄 Open
Base:
main← Head:main📝 Commits (2)
2d91d24feat: Add comprehensive iOS compatibility for all major function categories43971ebAdd iOS support for browsing, charts, explore, and library📊 Changes
14 files changed (+3176 additions, -123 deletions)
View changed files
➕
PR_SUMMARY.md(+176 -0)📝
ytmusicapi/helpers.py(+2 -2)📝
ytmusicapi/mixins/browsing.py(+1243 -22)📝
ytmusicapi/mixins/charts.py(+145 -7)📝
ytmusicapi/mixins/explore.py(+173 -0)📝
ytmusicapi/mixins/library.py(+468 -50)📝
ytmusicapi/mixins/playlists.py(+125 -2)📝
ytmusicapi/mixins/podcasts.py(+184 -20)📝
ytmusicapi/mixins/search.py(+192 -0)📝
ytmusicapi/parsers/browsing.py(+10 -5)➕
ytmusicapi/parsers/ios_explore.py(+38 -0)📝
ytmusicapi/parsers/library.py(+294 -7)📝
ytmusicapi/parsers/playlists.py(+124 -6)📝
ytmusicapi/ytmusic.py(+2 -2)📄 Description
Summary
This pull request enhances ytmusicapi with comprehensive iOS compatibility across all major function categories. The changes enable seamless operation with YouTube Music's mobile single-column format while maintaining backward compatibility with desktop clients.
Problem Statement
YouTube Music returns different response structures for mobile iOS clients compared to desktop clients:
twoColumnBrowseResultsRendererformatsingleColumnBrowseResultsRendererformat with different navigation pathsWithout iOS compatibility, many functions would fail when using mobile clients, particularly when using OAuth with the
IOS_MUSICclient configuration.Solution Overview
Added iOS format detection and parsing throughout the codebase with fallback strategies:
IOS_MUSICfor better OAuth compatibilityKey Changes
1. Client Configuration (
ytmusicapi/helpers.py)2. Core Mixins Enhanced
Library Functions (
ytmusicapi/mixins/library.py)get_library_playlists()- iOS navigation paths + conversionget_library_songs()- Advanced iOS parsing with continuation supportget_library_albums()- iOS format detection and conversionget_library_artists()- iOS continuation handlingget_library_subscriptions()- iOS-compatible navigationget_library_podcasts()- iOS format supportget_library_channels()- iOS navigation enhancementget_history()- iOS path fallbacksget_account_info()- Multiple iOS navigation attemptsBrowsing Functions (
ytmusicapi/mixins/browsing.py)get_home()- iOS mixed content parsingget_artist()- iOS header and section parsingget_artist_albums()- iOS album format detectionget_user()- iOS user content parsingget_user_playlists()- iOS playlist format conversionget_user_videos()- iOS video parsingget_album()- Comprehensive iOS album parsingget_lyrics()- iOS footer source extractionPlaylist Functions (
ytmusicapi/mixins/playlists.py)get_playlist()- iOS single-column format supportPodcast Functions (
ytmusicapi/mixins/podcasts.py)get_channel()- Naturally iOS compatibleget_channel_episodes()- Naturally iOS compatibleget_podcast()- iOS header and section fallbacksget_episode()- iOS description parsing with URL/timestamp extractionget_episodes_playlist()- iOS navigation fallbacksSearch Functions (
ytmusicapi/mixins/search.py)search()- iOS elementRenderer and item parsing3. Parser Enhancements
Library Parser (
ytmusicapi/parsers/library.py)parse_albums_ios_compatible()for iOS album conversionparse_artists_ios_compatible()for iOS artist parsingparse_podcasts_ios_compatible()for iOS podcast supportBrowsing Parser (
ytmusicapi/parsers/browsing.py)browseIdextractionPlaylist Parser (
ytmusicapi/parsers/playlists.py)parse_playlist_item_ios()for iOS playlist item parsingparse_playlist_items()to handle both formatsTechnical Implementation Details
iOS Format Detection Strategy
Navigation Path Enhancement
Format Conversion Pattern
Compatibility Strategy
Three Types of iOS Compatibility
Fallback Hierarchy
Testing Coverage
Functions Tested and Enhanced
Success Rate
Backward Compatibility
✅ Fully maintained - All existing desktop functionality preserved
✅ Zero breaking changes - Existing code continues to work unchanged
✅ Progressive enhancement - iOS support added without affecting desktop users
Benefits
IOS_MUSICOAuth clientFiles Modified
ytmusicapi/helpers.py- Client configuration updateytmusicapi/mixins/browsing.py- iOS browsing supportytmusicapi/mixins/library.py- iOS library functionsytmusicapi/mixins/playlists.py- iOS playlist supportytmusicapi/mixins/podcasts.py- iOS podcast functionsytmusicapi/mixins/search.py- iOS search parsingytmusicapi/parsers/browsing.py- iOS navigation enhancementsytmusicapi/parsers/library.py- iOS parser implementationsytmusicapi/parsers/playlists.py- iOS playlist item parsingytmusicapi/ytmusic.py- Client context updateRelated Issues
IOS_MUSICclient configurationThis comprehensive enhancement makes ytmusicapi truly client-agnostic while maintaining all existing functionality.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.