Skip to content

Commit

Permalink
fixed bandcamp
Browse files Browse the repository at this point in the history
  • Loading branch information
xnetcat committed Sep 1, 2023
1 parent 992d30b commit b1a48de
Showing 1 changed file with 13 additions and 70 deletions.
83 changes: 13 additions & 70 deletions spotdl/providers/audio/bandcamp.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,10 @@
"""

import logging
import time
from datetime import datetime
from typing import Any, Dict, List

import bandcamp_api.search as BandCampSearch
import bandcamp_api.track as BandCampTrack
import requests
from bs4 import BeautifulSoup
from bandcamp_api.search import SearchResultsItemTrack, search

from spotdl.providers.audio.base import AudioProvider
from spotdl.types.result import Result
Expand Down Expand Up @@ -42,68 +38,6 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:

super().__init__(*args, **kwargs)

def search_tracks(self, search_string: str):
"""
Search for tracks on . Currently broken in
the bandcamp
### Arguments
- search_string: String to search for on SoundCloud
### Returns
- List of `Result` objects
"""

link = "https://bandcamp.com/search?q=" + search_string + "&item_type=t"
try:
response = requests.get(link, timeout=10)
except requests.exceptions.MissingSchema:
pass

try:
soup = BeautifulSoup(response.text, "lxml")
except Exception:
soup = BeautifulSoup(response.text, "html.parser")

results = soup.find("ul", {"class": "result-items"})
things_to_return: List[BandCampSearch.TrackResults] = []

if not results:
return things_to_return

for item in results.find_all("li"):
track = BandCampSearch.TrackResults()

track.track_title = BandCampSearch.clean_string(
item.find("div", {"class": "heading"}).text
)

track.album_title = (
BandCampSearch.clean_string(item.find("div", {"class": "subhead"}).text)
.split(" by ", maxsplit=1)[0]
.replace("from ", "")
)

track.artist_title = BandCampSearch.clean_string(
item.find("div", {"class": "subhead"}).text
).split("by ")[1]

track.date_released = " ".join(
item.find("div", {"class": "released"}).text.split()
)[9:]
track.date_released = datetime.strptime(track.date_released, "%B %d, %Y")
track.date_released = int(time.mktime(track.date_released.timetuple()))

track.album_art_url = item.find("img").get("src").split("_")[0] + "_0.jpg"

track.track_url = BandCampSearch.clean_string(
item.find("div", {"class": "itemurl"}).text
)

things_to_return.append(track)

return things_to_return

def get_results(self, search_term: str, *_args, **_kwargs) -> List[Result]:
"""
Get results from slider.kz
Expand All @@ -117,19 +51,28 @@ def get_results(self, search_term: str, *_args, **_kwargs) -> List[Result]:
- A list of slider.kz results if found, None otherwise.
"""

results: List[BandCampSearch.TrackResults] = self.search_tracks(search_term)
try:
results = search(search_term)
except KeyError:
return []
except Exception as exc:
logger.error("Failed to get results from BandCamp", exc_info=exc)
return []

simplified_results: List[Result] = []
for result in results:
track = BandCampTrack.Track(result.track_url)
if not isinstance(result, SearchResultsItemTrack):
continue

track = BandCampTrack.Track(result.artist_id, result.track_id)

simplified_results.append(
Result(
source="bandcamp",
url=track.track_url,
verified=False,
name=track.track_title,
duration=track.duration_seconds,
duration=track.track_duration_seconds,
author=track.artist_title,
result_id=track.track_url,
search_query=search_term,
Expand Down

0 comments on commit b1a48de

Please sign in to comment.