lib.itmens/catalog/sites/apple_podcast.py
2024-07-13 18:16:44 -04:00

49 lines
1.6 KiB
Python

import logging
from catalog.common import *
from catalog.models import *
from .rss import RSS
_logger = logging.getLogger(__name__)
@SiteManager.register
class ApplePodcast(AbstractSite):
# SITE_NAME = SiteName.ApplePodcast
ID_TYPE = IdType.ApplePodcast
URL_PATTERNS = [r"https://[^.]+.apple.com/\w+/podcast/*[^/?]*/id(\d+)"]
WIKI_PROPERTY_ID = "P5842"
DEFAULT_MODEL = Podcast
@classmethod
def id_to_url(cls, id_value):
return "https://podcasts.apple.com/us/podcast/id" + id_value
def scrape(self):
api_url = f"https://itunes.apple.com/lookup?id={self.id_value}"
dl = BasicDownloader(api_url)
resp = dl.download()
r = resp.json()["results"][0]
feed_url = r["feedUrl"]
title = r["trackName"]
pd = ResourceContent(
metadata={
"title": title,
"feed_url": feed_url,
"host": [r["artistName"]],
"genres": r["genres"],
"cover_image_url": r["artworkUrl600"],
}
)
pd.lookup_ids[IdType.RSS] = RSS.url_to_id(feed_url)
if pd.metadata["cover_image_url"]:
imgdl = BasicImageDownloader(pd.metadata["cover_image_url"], self.url)
try:
pd.cover_image = imgdl.download().content
pd.cover_image_extention = imgdl.extention
except Exception:
_logger.debug(
f'failed to download cover for {self.url} from {pd.metadata["cover_image_url"]}'
)
return pd