feat(search): add SoundCloud source and cross-platform relevance ranking
This commit is contained in:
1 parent
30ba67c707
commit
aa6c605d14
4 files changed
+214
-63
No files matched your search
@@ -17,7 +17,10 @@ class UniversalProvider(BaseProvider):
|
||||
"music.apple.com",
|
||||
"youtube.com",
|
||||
"youtu.be",
|
||||
"music.youtube.com"
|
||||
"music.youtube.com",
|
||||
"soundcloud.com",
|
||||
"snd.sc",
|
||||
"api.soundcloud.com"
|
||||
])
|
||||
|
||||
async def resolve(self, url: str) -> List[TrackMetadata]:
|
||||
@@ -106,15 +109,16 @@ class UniversalProvider(BaseProvider):
|
||||
continue
|
||||
title = entry.get("title", "Unknown")
|
||||
uploader = entry.get("uploader") or entry.get("artist") or "Unknown"
|
||||
service_name = "soundcloud" if ("soundcloud" in (entry.get("webpage_url") or url).lower() or "snd.sc" in url.lower()) else "youtube"
|
||||
tracks.append(TrackMetadata(
|
||||
service="youtube",
|
||||
service=service_name,
|
||||
service_id=str(entry.get("id", "")),
|
||||
title=title,
|
||||
artist=uploader,
|
||||
album=entry.get("album"),
|
||||
duration_ms=int(entry.get("duration", 0) * 1000) if entry.get("duration") else None,
|
||||
cover_url=entry.get("thumbnail"),
|
||||
source_url=entry.get("webpage_url") or f"https://www.youtube.com/watch?v={entry.get('id')}"
|
||||
source_url=entry.get("webpage_url") or url
|
||||
))
|
||||
except Exception as e:
|
||||
print(f"yt-dlp resolve error: {e}")
|
||||
@@ -144,7 +148,7 @@ class UniversalProvider(BaseProvider):
|
||||
}
|
||||
|
||||
try:
|
||||
target_input = track.source_url if track.service == "youtube" and track.source_url else f"ytsearch1:{query}"
|
||||
target_input = track.source_url if track.service in ("youtube", "soundcloud") and track.source_url else f"ytsearch1:{query}"
|
||||
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
||||
ydl.download([target_input])
|
||||
|
||||
|
||||
Reference in new issue
Block a user